modernc.org/cc@v1.0.1/v2/testdata/tcc-0.9.26/tests/asmtest.S (about) 1 # gas comment with ``gnu'' style quotes 2 3 /* some directive tests */ 4 5 .byte 0xff 6 .byte 1, 2, 3 7 .short 1, 2, 3 8 .word 1, 2, 3 9 .long 1, 2, 3 10 .int 1, 2, 3 11 .align 8 12 .byte 1 13 /* .align 16, 0x90 gas is too clever for us with 0x90 fill */ 14 .align 16, 0x91 /* 0x91 tests the non-clever behaviour */ 15 .skip 3 16 .skip 15, 0x90 17 .string "hello\0world" 18 19 /* some label tests */ 20 21 movl %eax, %ebx 22 L1: 23 movl %eax, %ebx 24 mov 0x10000, %eax 25 L2: 26 movl $L2 - L1, %ecx 27 var1: 28 nop ; nop ; nop ; nop 29 30 mov var1, %eax 31 32 /* instruction tests */ 33 movl %eax, %ebx 34 mov 0x10000, %eax 35 mov 0x10000, %ax 36 mov 0x10000, %al 37 mov %al, 0x10000 38 39 mov $1, %edx 40 mov $1, %dx 41 mov $1, %dl 42 movb $2, 0x100(%ebx,%edx,2) 43 movw $2, 0x100(%ebx,%edx,2) 44 movl $2, 0x100(%ebx,%edx,2) 45 movl %eax, 0x100(%ebx,%edx,2) 46 movl 0x100(%ebx,%edx,2), %edx 47 movw %ax, 0x100(%ebx,%edx,2) 48 49 mov %eax, 0x12(,%edx,2) 50 51 mov %cr3, %edx 52 mov %ecx, %cr3 53 movl %cr3, %eax 54 movl %tr3, %eax 55 movl %db3, %ebx 56 movl %dr6, %eax 57 movl %fs, %ecx 58 movl %ebx, %fs 59 60 movsbl 0x1000, %eax 61 movsbw 0x1000, %ax 62 movswl 0x1000, %eax 63 64 movzbl 0x1000, %eax 65 movzbw 0x1000, %ax 66 movzwl 0x1000, %eax 67 68 movzb 0x1000, %eax 69 movzb 0x1000, %ax 70 71 72 pushl %eax 73 pushw %ax 74 push %eax 75 push %cs 76 push %gs 77 push $1 78 push $100 79 80 popl %eax 81 popw %ax 82 pop %eax 83 pop %ds 84 pop %fs 85 86 xchg %eax, %ecx 87 xchg %edx, %eax 88 xchg %bx, 0x10000 89 xchg 0x10000, %ebx 90 xchg 0x10000, %dl 91 92 in $100, %al 93 in $100, %ax 94 in $100, %eax 95 in %dx, %al 96 in %dx, %ax 97 in %dx, %eax 98 inb %dx 99 inw %dx 100 inl %dx 101 102 out %al, $100 103 out %ax, $100 104 out %eax, $100 105 106 /* NOTE: gas is bugged here, so size must be added */ 107 outb %al, %dx 108 outw %ax, %dx 109 outl %eax, %dx 110 111 leal 0x1000(%ebx), %ecx 112 lea 0x1000(%ebx), %ecx 113 114 les 0x2000, %eax 115 lds 0x2000, %ebx 116 lfs 0x2000, %ecx 117 lgs 0x2000, %edx 118 lss 0x2000, %edx 119 120 addl $0x123, %eax 121 add $0x123, %ebx 122 addl $0x123, 0x100 123 addl $0x123, 0x100(%ebx) 124 addl $0x123, 0x100(%ebx,%edx,2) 125 addl $0x123, 0x100(%esp) 126 addl $0x123, (3*8)(%esp) 127 addl $0x123, (%ebp) 128 addl $0x123, (%esp) 129 cmpl $0x123, (%esp) 130 131 add %eax, (%ebx) 132 add (%ebx), %eax 133 134 or %dx, (%ebx) 135 or (%ebx), %si 136 137 add %cl, (%ebx) 138 add (%ebx), %dl 139 140 inc %edx 141 incl 0x10000 142 incb 0x10000 143 dec %dx 144 145 test $1, %al 146 test $1, %cl 147 148 testl $1, 0x1000 149 testb $1, 0x1000 150 testw $1, 0x1000 151 test %eax, %ebx 152 test %eax, 0x1000 153 test 0x1000, %edx 154 155 not %edx 156 notw 0x10000 157 notl 0x10000 158 notb 0x10000 159 160 neg %edx 161 negw 0x10000 162 negl 0x10000 163 negb 0x10000 164 165 imul %ecx 166 mul %edx 167 mulb %cl 168 169 imul %eax, %ecx 170 imul 0x1000, %cx 171 imul $10, %eax, %ecx 172 imul $10, %ax, %cx 173 imul $10, %eax 174 imul $0x1100000, %eax 175 imul $1, %eax 176 177 idivw 0x1000 178 div %ecx 179 div %bl 180 div %ecx, %eax 181 182 183 shl %edx 184 shl $10, %edx 185 shl %cl, %edx 186 187 shld $1, %eax, %edx 188 shld %cl, %eax, %edx 189 shld %eax, %edx 190 191 shrd $1, %eax, %edx 192 shrd %cl, %eax, %edx 193 shrd %eax, %edx 194 195 L4: 196 call 0x1000 197 call L4 198 call *%eax 199 call *0x1000 200 call func1 201 202 .global L5,L6 203 204 L5: 205 L6: 206 207 lcall $0x100, $0x1000 208 209 jmp 0x1000 210 jmp *%eax 211 jmp *0x1000 212 213 ljmp $0x100, $0x1000 214 215 ret 216 retl 217 218 ret $10 219 retl $10 220 221 lret 222 223 lret $10 224 225 enter $1234, $10 226 227 L3: 228 jo 0x1000 229 jnp 0x1001 230 jne 0x1002 231 jg 0x1003 232 233 jo L3 234 jnp L3 235 jne L3 236 jg L3 237 238 loopne L3 239 loopnz L3 240 loope L3 241 loopz L3 242 loop L3 243 jecxz L3 244 245 246 seto %al 247 setnp 0x1000 248 setl 0xaaaa 249 setg %dl 250 251 fadd 252 fadd %st(1), %st 253 fadd %st(0), %st(1) 254 fadd %st(3) 255 256 fmul %st(0),%st(0) 257 fmul %st(0),%st(1) 258 259 faddp %st(5) 260 faddp 261 faddp %st(1), %st 262 263 fadds 0x1000 264 fiadds 0x1002 265 faddl 0x1004 266 fiaddl 0x1006 267 268 fmul 269 fmul %st(1), %st 270 fmul %st(3) 271 272 fmulp %st(5) 273 fmulp 274 fmulp %st(1), %st 275 276 fmuls 0x1000 277 fimuls 0x1002 278 fmull 0x1004 279 fimull 0x1006 280 281 fsub 282 fsub %st(1), %st 283 fsub %st(3) 284 285 fsubp %st(5) 286 fsubp 287 fsubp %st(1), %st 288 289 fsubs 0x1000 290 fisubs 0x1002 291 fsubl 0x1004 292 fisubl 0x1006 293 294 fsubr 295 fsubr %st(1), %st 296 fsubr %st(3) 297 298 fsubrp %st(5) 299 fsubrp 300 fsubrp %st(1), %st 301 302 fsubrs 0x1000 303 fisubrs 0x1002 304 fsubrl 0x1004 305 fisubrl 0x1006 306 307 fdiv 308 fdiv %st(1), %st 309 fdiv %st(3) 310 311 fdivp %st(5) 312 fdivp 313 fdivp %st(1), %st 314 315 fdivs 0x1000 316 fidivs 0x1002 317 fdivl 0x1004 318 fidivl 0x1006 319 320 fcom %st(3) 321 322 fcoms 0x1000 323 ficoms 0x1002 324 fcoml 0x1004 325 ficoml 0x1006 326 327 fcomp %st(5) 328 fcomp 329 fcompp 330 331 fcomps 0x1000 332 ficomps 0x1002 333 fcompl 0x1004 334 ficompl 0x1006 335 336 fld %st(5) 337 fldl 0x1000 338 flds 0x1002 339 fildl 0x1004 340 fst %st(4) 341 fstp %st(6) 342 fstpt 0x1006 343 fbstp 0x1008 344 345 fxch 346 fxch %st(4) 347 348 fucom %st(6) 349 fucomp %st(3) 350 fucompp 351 352 finit 353 fninit 354 fldcw 0x1000 355 fnstcw 0x1002 356 fstcw 0x1002 357 fnstsw 0x1004 358 fnstsw (%eax) 359 fstsw 0x1004 360 fstsw (%eax) 361 fnclex 362 fclex 363 fnstenv 0x1000 364 fstenv 0x1000 365 fldenv 0x1000 366 fnsave 0x1002 367 fsave 0x1000 368 frstor 0x1000 369 ffree %st(7) 370 ffreep %st(6) 371 372 ftst 373 fxam 374 fld1 375 fldl2t 376 fldl2e 377 fldpi 378 fldlg2 379 fldln2 380 fldz 381 382 f2xm1 383 fyl2x 384 fptan 385 fpatan 386 fxtract 387 fprem1 388 fdecstp 389 fincstp 390 fprem 391 fyl2xp1 392 fsqrt 393 fsincos 394 frndint 395 fscale 396 fsin 397 fcos 398 fchs 399 fabs 400 fnop 401 fwait 402 403 bswap %edx 404 xadd %ecx, %edx 405 xaddb %dl, 0x1000 406 xaddw %ax, 0x1000 407 xaddl %eax, 0x1000 408 cmpxchg %ecx, %edx 409 cmpxchgb %dl, 0x1000 410 cmpxchgw %ax, 0x1000 411 cmpxchgl %eax, 0x1000 412 invlpg 0x1000 413 cmpxchg8b 0x1002 414 415 fcmovb %st(5), %st 416 fcmove %st(5), %st 417 fcmovbe %st(5), %st 418 fcmovu %st(5), %st 419 fcmovnb %st(5), %st 420 fcmovne %st(5), %st 421 fcmovnbe %st(5), %st 422 fcmovnu %st(5), %st 423 fcomi %st(5), %st 424 fucomi %st(5), %st 425 fcomip %st(5), %st 426 fucomip %st(5), %st 427 428 429 430 cmovo 0x1000, %eax 431 cmovs 0x1000, %eax 432 cmovns %edx, %edi 433 434 int $3 435 int $0x10 436 437 pusha 438 popa 439 clc 440 cld 441 cli 442 clts 443 cmc 444 lahf 445 sahf 446 pushfl 447 popfl 448 pushf 449 popf 450 stc 451 std 452 sti 453 aaa 454 aas 455 daa 456 das 457 aad 458 aam 459 cbw 460 cwd 461 cwde 462 cdq 463 cbtw 464 cwtd 465 cwtl 466 cltd 467 leave 468 int3 469 into 470 iret 471 rsm 472 hlt 473 wait 474 nop 475 476 /* XXX: handle prefixes */ 477 #if 0 478 aword 479 addr16 480 #endif 481 lock 482 rep 483 repe 484 repz 485 repne 486 repnz 487 nop 488 489 lock ;negl (%eax) 490 wait ;pushf 491 rep ;stosb 492 repe ;lodsb 493 repz ;cmpsb 494 repne;movsb 495 repnz;outsb 496 497 /* handle one-line prefix + ops */ 498 lock negl (%eax) 499 wait pushf 500 rep stosb 501 repe lodsb 502 repz cmpsb 503 repne movsb 504 repnz outsb 505 506 invd 507 wbinvd 508 cpuid 509 wrmsr 510 rdtsc 511 rdmsr 512 rdpmc 513 ud2 514 515 emms 516 movd %edx, %mm3 517 movd 0x1000, %mm2 518 movd %mm4, %ecx 519 movd %mm5, 0x1000 520 521 movq 0x1000, %mm2 522 movq %mm4, 0x1000 523 524 pand 0x1000, %mm3 525 pand %mm4, %mm5 526 527 psllw $1, %mm6 528 psllw 0x1000, %mm7 529 psllw %mm2, %mm7 530 531 xlat 532 cmpsb 533 scmpw 534 insl 535 outsw 536 lodsb 537 slodl 538 movsb 539 movsl 540 smovb 541 scasb 542 sscaw 543 stosw 544 sstol 545 546 bsf 0x1000, %ebx 547 bsr 0x1000, %ebx 548 bt %edx, 0x1000 549 btl $2, 0x1000 550 btc %edx, 0x1000 551 btcl $2, 0x1000 552 btr %edx, 0x1000 553 btrl $2, 0x1000 554 bts %edx, 0x1000 555 btsl $2, 0x1000 556 557 558 559 boundl %edx, 0x10000 560 boundw %bx, 0x1000 561 562 arpl %bx, 0x1000 563 lar 0x1000, %eax 564 lgdt 0x1000 565 lidt 0x1000 566 lldt 0x1000 567 lmsw 0x1000 568 lsl 0x1000, %ecx 569 ltr 0x1000 570 571 sgdt 0x1000 572 sidt 0x1000 573 sldt 0x1000 574 smsw 0x1000 575 str 0x1000 576 577 verr 0x1000 578 verw 0x1000 579 580 push %ds 581 pushw %ds 582 pushl %ds 583 pop %ds 584 popw %ds 585 popl %ds 586 fxsave 1(%ebx) 587 fxrstor 1(%ecx) 588 pushl $1 589 pushw $1 590 push $1 591 592 #ifdef __ASSEMBLER__ // should be defined, for S files 593 inc %eax 594 #endif 595 596 ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9: 597 xor %eax, %eax 598 ret 599 600 .type ft1,STT_FUNC 601 .type ft2,@STT_FUNC 602 .type ft3,%STT_FUNC 603 .type ft4,"STT_FUNC" 604 .type ft5,function 605 .type ft6,@function 606 .type ft7,%function 607 .type ft8,"function" 608 609 pause