Home | History | Annotate | Download | only in X86
      1 // RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel %s > %t 2> %t.err
      2 // RUN: FileCheck < %t %s
      3 // RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
      4 
      5 _test:
      6 	xor	EAX, EAX
      7 	ret
      8 
      9 .set  number, 8
     10 .global _foo
     11 
     12 .text
     13   .global main
     14 main:
     15 
     16 // CHECK: leaq    _foo(%rbx,%rax,8), %rdx
     17   lea RDX, [8 * RAX + RBX      + _foo]
     18 // CHECK: leaq _foo(%rbx,%rax,8), %rdx
     19   lea RDX, [_foo + 8 * RAX + RBX]
     20 // CHECK: leaq 8(%rcx,%rax,8), %rdx
     21   lea RDX, [8 + RAX * 8 + RCX]
     22 // CHECK: leaq 8(%rcx,%rax,8), %rdx
     23   lea RDX, [number + 8 * RAX + RCX]
     24 // CHECK: leaq _foo(,%rax,8), %rdx
     25   lea RDX, [_foo + RAX * 8]
     26 // CHECK:  leaq _foo(%rbx,%rax,8), %rdx
     27   lea RDX, [_foo + RAX * 8 + RBX]
     28 // CHECK: leaq -8(%rax), %rdx
     29   lea RDX, [RAX - number]
     30 // CHECK: leaq -8(%rax), %rdx
     31   lea RDX, [RAX - 8]
     32 // CHECK: leaq    _foo(%rax), %rdx
     33   lea RDX, [RAX + _foo]
     34 // CHECK: leaq    8(%rax), %rdx
     35   lea RDX, [RAX + number]
     36 // CHECK: leaq    8(%rax), %rdx
     37   lea RDX, [RAX + 8]
     38 // CHECK: leaq    _foo(%rbx,%rax,8), %rdx
     39   lea RDX, [RAX * number + RBX + _foo]
     40 // CHECK: leaq    _foo(%rbx,%rax,8), %rdx
     41   lea RDX, [_foo + RAX * number + RBX]
     42 // CHECK: leaq    8(%rcx,%rax,8), %rdx
     43   lea RDX, [number + RAX * number + RCX]
     44 // CHECK: leaq    _foo(,%rax,8), %rdx
     45   lea RDX, [_foo + RAX * number]
     46 // CHECK: leaq    _foo(%rbx,%rax,8), %rdx
     47   lea RDX, [number * RAX + RBX + _foo]
     48 // CHECK: leaq    _foo(%rbx,%rax,8), %rdx
     49   lea RDX, [_foo + number * RAX + RBX]
     50 // CHECK: leaq    8(%rcx,%rax,8), %rdx
     51   lea RDX, [8 + number * RAX + RCX]
     52 // CHECK: leaq    _foo(%rax), %rdx
     53   lea RDX, [_foo + RAX]
     54 // CHECK: leaq    8(%rax), %rdx
     55   lea RDX, [number + RAX]
     56 // CHECK: leaq    8(%rax), %rdx
     57   lea RDX, [8 + RAX]
     58 
     59 // CHECK: lcalll *(%rax)
     60   call FWORD ptr [rax]
     61 // CHECK: lcalll *(%rax)
     62   lcall [rax]
     63 // CHECK: ljmpl *(%rax)
     64   jmp FWORD ptr [rax]
     65 // CHECK: ljmpq *(%rax)
     66   ljmp [rax]
     67 
     68 // CHECK:	movl	$257, -4(%rsp)
     69 	mov	DWORD PTR [RSP - 4], 257
     70 // CHECK:	movl	$258, 4(%rsp)
     71 	mov	DWORD PTR [RSP + 4], 258
     72 // CHECK:	movq	$123, -16(%rsp)
     73 	mov	QWORD PTR [RSP - 16], 123
     74 // CHECK:	movb	$97, -17(%rsp)
     75 	mov	BYTE PTR [RSP - 17], 97
     76 // CHECK:	movl	-4(%rsp), %eax
     77 	mov	EAX, DWORD PTR [RSP - 4]
     78 // CHECK:	movq    (%rsp), %rax
     79 	mov     RAX, QWORD PTR [RSP]
     80 // CHECK: movabsq $4294967289, %rax
     81 	mov     RAX, 4294967289
     82 // CHECK:	movl	$-4, -4(%rsp)
     83 	mov	DWORD PTR [RSP - 4], -4
     84 // CHECK:	movq	0, %rcx
     85 	mov	RCX, QWORD PTR [0]
     86 // CHECK:	movl	-24(%rsp,%rax,4), %eax
     87 	mov	EAX, DWORD PTR [RSP + 4*RAX - 24]
     88 // CHECK:	movb	%dil, (%rdx,%rcx)
     89 	mov	BYTE PTR [RDX + RCX], DIL
     90 // CHECK:	movzwl	2(%rcx), %edi
     91 	movzx	EDI, WORD PTR [RCX + 2]
     92 // CHECK:	callq	_test
     93 	call	_test
     94 // CHECK:	andw	$12,	%ax
     95 	and	ax, 12
     96 // CHECK:	andw	$-12,	%ax
     97 	and	ax, -12
     98 // CHECK:	andw	$257,	%ax
     99 	and	ax, 257
    100 // CHECK:	andw	$-257,	%ax
    101 	and	ax, -257
    102 // CHECK:	andl	$12,	%eax
    103 	and	eax, 12
    104 // CHECK:	andl	$-12,	%eax
    105 	and	eax, -12
    106 // CHECK:	andl	$257,	%eax
    107 	and	eax, 257
    108 // CHECK:	andl	$-257,	%eax
    109 	and	eax, -257
    110 // CHECK:	andq	$12,	%rax
    111 	and	rax, 12
    112 // CHECK:	andq	$-12,	%rax
    113 	and	rax, -12
    114 // CHECK:	andq	$257,	%rax
    115 	and	rax, 257
    116 // CHECK:	andq	$-257,	%rax
    117 	and	rax, -257
    118 // CHECK:	fld	%st(0)
    119 	fld	ST(0)
    120 // CHECK:	movl	%fs:(%rdi), %eax
    121     mov EAX, DWORD PTR FS:[RDI]
    122 // CHECK: leal (,%rdi,4), %r8d
    123     lea R8D, DWORD PTR [4*RDI]
    124 // CHECK: movl _fnan(,%ecx,4), %ecx
    125     mov ECX, DWORD PTR [4*ECX + _fnan]
    126 // CHECK: movq %fs:320, %rax
    127     mov RAX, QWORD PTR FS:[320]
    128 // CHECK: movq %fs:320, %rax
    129     mov RAX, QWORD PTR FS:320
    130 // CHECK: movq %rax, %fs:320
    131     mov QWORD PTR FS:320, RAX
    132 // CHECK: movq %rax, %fs:20(%rbx)
    133     mov QWORD PTR FS:20[rbx], RAX
    134 // CHECK: vshufpd $1, %xmm2, %xmm1, %xmm0
    135     vshufpd XMM0, XMM1, XMM2, 1
    136 // CHECK: vpgatherdd %xmm8, (%r15,%xmm9,2), %xmm1
    137     vpgatherdd XMM10, XMMWORD PTR [R15 + 2*XMM9], XMM8
    138 // CHECK: movsd -8, %xmm5
    139     movsd   XMM5, QWORD PTR [-8]
    140 // CHECK: movsl (%rsi), %es:(%rdi)
    141     movsd
    142 // CHECK: movl %ecx, (%eax)
    143     mov [eax], ecx
    144 // CHECK: movl %ecx, (,%ebx,4)
    145     mov [4*ebx], ecx
    146  // CHECK:   movl %ecx, (,%ebx,4)
    147     mov [ebx*4], ecx
    148 // CHECK: movl %ecx, 1024
    149     mov [1024], ecx
    150 // CHECK: movl %ecx, 4132
    151     mov [0x1024], ecx
    152 // CHECK: movl %ecx, 32
    153     mov [16 + 16], ecx
    154 // CHECK: movl %ecx, 0
    155     mov [16 - 16], ecx
    156 // CHECK: movl %ecx, 32
    157     mov [16][16], ecx
    158 // CHECK: movl %ecx, (%eax,%ebx,4)
    159     mov [eax + 4*ebx], ecx
    160 // CHECK: movl %ecx, (%eax,%ebx,4)
    161     mov [eax + ebx*4], ecx
    162 // CHECK: movl %ecx, (%eax,%ebx,4)
    163     mov [4*ebx + eax], ecx
    164 // CHECK: movl %ecx, (%eax,%ebx,4)
    165     mov [ebx*4 + eax], ecx
    166 // CHECK: movl %ecx, (%eax,%ebx,4)
    167     mov [eax][4*ebx], ecx
    168 // CHECK: movl %ecx, (%eax,%ebx,4)
    169     mov [eax][ebx*4], ecx
    170 // CHECK: movl %ecx, (%eax,%ebx,4)
    171     mov [4*ebx][eax], ecx
    172 // CHECK: movl %ecx, (%eax,%ebx,4)
    173     mov [ebx*4][eax], ecx
    174 // CHECK: movl %ecx, 12(%eax)
    175     mov [eax + 12], ecx
    176 // CHECK: movl %ecx, 12(%eax)
    177     mov [12 + eax], ecx
    178 // CHECK: movl %ecx, 32(%eax)
    179     mov [eax + 16 + 16], ecx
    180 // CHECK: movl %ecx, 32(%eax)
    181     mov [16 + eax + 16], ecx
    182 // CHECK: movl %ecx, 32(%eax)
    183     mov [16 + 16 + eax], ecx
    184 // CHECK: movl %ecx, 12(%eax)
    185     mov [eax][12], ecx
    186 // CHECK: movl %ecx, 12(%eax)
    187     mov [12][eax], ecx
    188 // CHECK: movl %ecx, 32(%eax)
    189     mov [eax][16 + 16], ecx
    190 // CHECK: movl %ecx, 32(%eax)
    191     mov [eax + 16][16], ecx
    192 // CHECK: movl %ecx, 32(%eax)
    193     mov [eax][16][16], ecx
    194 // CHECK: movl %ecx, 32(%eax)
    195     mov [16][eax + 16], ecx
    196 // CHECK: movl %ecx, 32(%eax)
    197     mov [16 + eax][16], ecx
    198 // CHECK: movl %ecx, 32(%eax)
    199     mov [16][16 + eax], ecx
    200 // CHECK: movl %ecx, 32(%eax)
    201     mov [16 + 16][eax], ecx
    202 // CHECK: movl %ecx, 32(%eax)
    203     mov [eax][16][16], ecx
    204 // CHECK: movl %ecx, 32(%eax)
    205     mov [16][eax][16], ecx
    206 // CHECK: movl %ecx, 32(%eax)
    207     mov [16][16][eax], ecx
    208 // CHECK: movl %ecx, 16(,%ebx,4)
    209     mov [4*ebx + 16], ecx
    210 // CHECK: movl %ecx, 16(,%ebx,4)
    211     mov [ebx*4 + 16], ecx
    212 // CHECK: movl %ecx, 16(,%ebx,4)
    213     mov [4*ebx][16], ecx
    214 // CHECK: movl %ecx, 16(,%ebx,4)
    215     mov [ebx*4][16], ecx
    216 // CHECK: movl %ecx, 16(,%ebx,4)
    217     mov [16 + 4*ebx], ecx
    218 // CHECK: movl %ecx, 16(,%ebx,4)
    219     mov [16 + ebx*4], ecx
    220 // CHECK: movl %ecx, 16(,%ebx,4)
    221     mov [16][4*ebx], ecx
    222 // CHECK: movl %ecx, 16(,%ebx,4)
    223     mov [16][ebx*4], ecx
    224 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    225     mov [eax + 4*ebx + 16], ecx
    226 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    227     mov [eax + 16 + 4*ebx], ecx
    228 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    229     mov [4*ebx + eax + 16], ecx
    230 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    231     mov [4*ebx + 16 + eax], ecx
    232 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    233     mov [16 + eax + 4*ebx], ecx
    234 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    235     mov [16 + eax + 4*ebx], ecx
    236 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    237     mov [eax][4*ebx + 16], ecx
    238 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    239     mov [eax][16 + 4*ebx], ecx
    240 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    241     mov [4*ebx][eax + 16], ecx
    242 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    243     mov [4*ebx][16 + eax], ecx
    244 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    245     mov [16][eax + 4*ebx], ecx
    246 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    247     mov [16][eax + 4*ebx], ecx
    248 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    249     mov [eax + 4*ebx][16], ecx
    250 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    251     mov [eax + 16][4*ebx], ecx
    252 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    253     mov [4*ebx + eax][16], ecx
    254 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    255     mov [4*ebx + 16][eax], ecx
    256 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    257     mov [16 + eax][4*ebx], ecx
    258 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    259     mov [16 + eax][4*ebx], ecx
    260 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    261     mov [eax][4*ebx][16], ecx
    262 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    263     mov [eax][16][4*ebx], ecx
    264 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    265     mov [4*ebx][eax][16], ecx
    266 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    267     mov [4*ebx][16][eax], ecx
    268 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    269     mov [16][eax][4*ebx], ecx
    270 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    271     mov [16][eax][4*ebx], ecx
    272 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    273     mov [eax + ebx*4 + 16], ecx
    274 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    275     mov [eax + 16 + ebx*4], ecx
    276 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    277     mov [ebx*4 + eax + 16], ecx
    278 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    279     mov [ebx*4 + 16 + eax], ecx
    280 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    281     mov [16 + eax + ebx*4], ecx
    282 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    283     mov [16 + eax + ebx*4], ecx
    284 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    285     mov [eax][ebx*4 + 16], ecx
    286 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    287     mov [eax][16 + ebx*4], ecx
    288 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    289     mov [ebx*4][eax + 16], ecx
    290 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    291     mov [ebx*4][16 + eax], ecx
    292 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    293     mov [16][eax + ebx*4], ecx
    294 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    295     mov [16][eax + ebx*4], ecx
    296 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    297     mov [eax + ebx*4][16], ecx
    298 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    299     mov [eax + 16][ebx*4], ecx
    300 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    301     mov [ebx*4 + eax][16], ecx
    302 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    303     mov [ebx*4 + 16][eax], ecx
    304 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    305     mov [16 + eax][ebx*4], ecx
    306 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    307     mov [16 + eax][ebx*4], ecx
    308 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    309     mov [eax][ebx*4][16], ecx
    310 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    311     mov [eax][16][ebx*4], ecx
    312 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    313     mov [ebx*4][eax][16], ecx
    314 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    315     mov [ebx*4][16][eax], ecx
    316 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    317     mov [16][eax][ebx*4], ecx
    318 // CHECK: movl %ecx, 16(%eax,%ebx,4)
    319     mov [16][eax][ebx*4], ecx
    320 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    321     mov [eax][ebx*4 - 16], ecx
    322 
    323 // CHECK: prefetchnta 12800(%esi)
    324     prefetchnta [esi + (200*64)]
    325 // CHECK: prefetchnta 32(%esi)
    326     prefetchnta [esi + (64/2)]
    327 // CHECK: prefetchnta 128(%esi)
    328     prefetchnta [esi + (64/2*4)]
    329 // CHECK: prefetchnta 8(%esi)
    330     prefetchnta [esi + (64/(2*4))]
    331 // CHECK: prefetchnta 48(%esi)
    332     prefetchnta [esi + (64/(2*4)+40)]
    333 
    334 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    335     mov [eax][ebx*4 - 2*8], ecx
    336 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    337     mov [eax][4*ebx - 2*8], ecx
    338 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    339     mov [eax + 4*ebx - 2*8], ecx
    340 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    341     mov [12 + eax + (4*ebx) - 2*14], ecx
    342 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    343     mov [eax][ebx*4 - 2*2*2*2], ecx
    344 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    345     mov [eax][ebx*4 - (2*8)], ecx
    346 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    347     mov [eax][ebx*4 - 2 * 8 + 4 - 4], ecx
    348 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    349     mov [eax + ebx*4 - 2 * 8 + 4 - 4], ecx
    350 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    351     mov [eax + ebx*4 - 2 * ((8 + 4) - 4)], ecx
    352 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    353     mov [-2 * ((8 + 4) - 4) + eax + ebx*4], ecx
    354 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    355     mov [((-2) * ((8 + 4) - 4)) + eax + ebx*4], ecx
    356 // CHECK: movl %ecx, -16(%eax,%ebx,4)
    357     mov [eax + ((-2) * ((8 + 4) - 4)) + ebx*4], ecx
    358 // CHECK: movl %ecx, 96(%eax,%ebx,4)
    359     mov [eax + ((-2) * ((8 + 4) * -4)) + ebx*4], ecx
    360 // CHECK: movl %ecx, -8(%eax,%ebx,4)
    361     mov [eax][-8][ebx*4], ecx
    362 // CHECK: movl %ecx, -2(%eax,%ebx,4)
    363     mov [eax][16/-8][ebx*4], ecx
    364 // CHECK: movl %ecx, -2(%eax,%ebx,4)
    365     mov [eax][(16)/-8][ebx*4], ecx
    366 
    367 // CHECK: setb %al
    368     setc al
    369 // CHECK: sete %al
    370     setz al
    371 // CHECK: setbe %al
    372     setna al
    373 // CHECK: setae %al
    374     setnb al
    375 // CHECK: setae %al
    376     setnc al
    377 // CHECK: setle %al
    378     setng al
    379 // CHECK: setge %al
    380     setnl al
    381 // CHECK: setne %al
    382     setnz al
    383 // CHECK: setp %al
    384     setpe al
    385 // CHECK: setnp %al
    386     setpo al
    387 // CHECK: setb %al
    388     setnae al
    389 // CHECK: seta %al
    390     setnbe al
    391 // CHECK: setl %al
    392     setnge al
    393 // CHECK: setg %al
    394     setnle al
    395 // CHECK: jne _foo
    396     jnz _foo
    397 // CHECK: outb %al, $4
    398     out 4, al
    399     ret
    400 
    401 // CHECK: cmovbl %ebx, %eax
    402     cmovc eax, ebx
    403 // CHECK: cmovel %ebx, %eax
    404     cmovz eax, ebx
    405 // CHECK: cmovbel %ebx, %eax
    406     cmovna eax, ebx
    407 // CHECK: cmovael %ebx, %eax
    408     cmovnb eax, ebx
    409 // CHECK: cmovael %ebx, %eax
    410     cmovnc eax, ebx
    411 // CHECK: cmovlel %ebx, %eax
    412     cmovng eax, ebx
    413 // CHECK: cmovgel %ebx, %eax
    414     cmovnl eax, ebx
    415 // CHECK: cmovnel %ebx, %eax
    416     cmovnz eax, ebx
    417 // CHECK: cmovpl %ebx, %eax
    418     cmovpe eax, ebx
    419 // CHECK: cmovnpl %ebx, %eax
    420     cmovpo eax, ebx
    421 // CHECK: cmovbl %ebx, %eax
    422     cmovnae eax, ebx
    423 // CHECK: cmoval %ebx, %eax
    424     cmovnbe eax, ebx
    425 // CHECK: cmovll %ebx, %eax
    426     cmovnge eax, ebx
    427 // CHECK: cmovgl %ebx, %eax
    428     cmovnle eax, ebx
    429 
    430 // CHECK: shldw	%cl, %bx, %dx
    431 // CHECK: shldw	%cl, %bx, %dx
    432 // CHECK: shldw	$1, %bx, %dx
    433 // CHECK: shldw	%cl, %bx, (%rax)
    434 // CHECK: shldw	%cl, %bx, (%rax)
    435 // CHECK: shrdw	%cl, %bx, %dx
    436 // CHECK: shrdw	%cl, %bx, %dx
    437 // CHECK: shrdw	$1, %bx, %dx
    438 // CHECK: shrdw	%cl, %bx, (%rax)
    439 // CHECK: shrdw	%cl, %bx, (%rax)
    440 
    441 shld  DX, BX
    442 shld  DX, BX, CL
    443 shld  DX, BX, 1
    444 shld  [RAX], BX
    445 shld  [RAX], BX, CL
    446 shrd  DX, BX
    447 shrd  DX, BX, CL
    448 shrd  DX, BX, 1
    449 shrd  [RAX], BX
    450 shrd  [RAX], BX, CL
    451 
    452 // CHECK: btl $1, (%eax)
    453 // CHECK: btsl $1, (%eax)
    454 // CHECK: btrl $1, (%eax)
    455 // CHECK: btcl $1, (%eax)
    456     bt DWORD PTR [EAX], 1
    457     bt DWORD PTR [EAX], 1
    458     bts DWORD PTR [EAX], 1
    459     btr DWORD PTR [EAX], 1
    460     btc DWORD PTR [EAX], 1
    461 
    462 //CHECK: divb	%bl
    463 //CHECK: divw	%bx
    464 //CHECK: divl	%ecx
    465 //CHECK: divl	3735928559(%ebx,%ecx,8)
    466 //CHECK: divl	69
    467 //CHECK: divl	32493
    468 //CHECK: divl	3133065982
    469 //CHECK: divl	305419896
    470 //CHECK: idivb	%bl
    471 //CHECK: idivw	%bx
    472 //CHECK: idivl	%ecx
    473 //CHECK: idivl	3735928559(%ebx,%ecx,8)
    474 //CHECK: idivl	69
    475 //CHECK: idivl	32493
    476 //CHECK: idivl	3133065982
    477 //CHECK: idivl	305419896
    478     div AL, BL
    479     div AX, BX
    480     div EAX, ECX
    481     div EAX, [ECX*8+EBX+0xdeadbeef]
    482     div EAX, [0x45]
    483     div EAX, [0x7eed]
    484     div EAX, [0xbabecafe]
    485     div EAX, [0x12345678]
    486     idiv AL, BL
    487     idiv AX, BX
    488     idiv EAX, ECX
    489     idiv EAX, [ECX*8+EBX+0xdeadbeef]
    490     idiv EAX, [0x45]
    491     idiv EAX, [0x7eed]
    492     idiv EAX, [0xbabecafe]
    493     idiv EAX, [0x12345678]
    494 
    495 
    496 // CHECK: inb %dx, %al
    497 // CHECK: inw %dx, %ax
    498 // CHECK: inl %dx, %eax
    499 // CHECK: outb %al, %dx
    500 // CHECK: outw %ax, %dx
    501 // CHECK: outl %eax, %dx
    502     inb DX
    503     inw DX
    504     inl DX
    505     outb DX
    506     outw DX
    507     outl DX
    508 
    509 // CHECK: xchgq %rcx, %rax
    510 // CHECK: xchgq %rcx, %rax
    511 // CHECK: xchgl %ecx, %eax
    512 // CHECK: xchgl %ecx, %eax
    513 // CHECK: xchgw %cx, %ax
    514 // CHECK: xchgw %cx, %ax
    515 xchg RAX, RCX
    516 xchg RCX, RAX
    517 xchg EAX, ECX
    518 xchg ECX, EAX
    519 xchg AX, CX
    520 xchg CX, AX
    521 
    522 // CHECK: xchgq %rax, (%ecx)
    523 // CHECK: xchgq %rax, (%ecx)
    524 // CHECK: xchgl %eax, (%ecx)
    525 // CHECK: xchgl %eax, (%ecx)
    526 // CHECK: xchgw %ax, (%ecx)
    527 // CHECK: xchgw %ax, (%ecx)
    528 xchg RAX, [ECX]
    529 xchg [ECX], RAX
    530 xchg EAX, [ECX]
    531 xchg [ECX], EAX
    532 xchg AX, [ECX]
    533 xchg [ECX], AX
    534 
    535 // CHECK: testq %rax, (%ecx)
    536 // CHECK: testq %rax, (%ecx)
    537 // CHECK: testl %eax, (%ecx)
    538 // CHECK: testl %eax, (%ecx)
    539 // CHECK: testw %ax, (%ecx)
    540 // CHECK: testw %ax, (%ecx)
    541 // CHECK: testb %al, (%ecx)
    542 // CHECK: testb %al, (%ecx)
    543 test RAX, [ECX]
    544 test [ECX], RAX
    545 test EAX, [ECX]
    546 test [ECX], EAX
    547 test AX, [ECX]
    548 test [ECX], AX
    549 test AL, [ECX]
    550 test [ECX], AL
    551 
    552 // CHECK: fnstsw %ax
    553 // CHECK: fnstsw %ax
    554 // CHECK: fnstsw (%eax)
    555 fnstsw
    556 fnstsw AX
    557 fnstsw WORD PTR [EAX]
    558 
    559 // CHECK: faddp %st(1)
    560 // CHECK: fmulp %st(1)
    561 // CHECK: fsubrp %st(1)
    562 // CHECK: fsubp %st(1)
    563 // CHECK: fdivrp %st(1)
    564 // CHECK: fdivp %st(1)
    565 faddp ST(1), ST(0)
    566 fmulp ST(1), ST(0)
    567 fsubp ST(1), ST(0)
    568 fsubrp ST(1), ST(0)
    569 fdivp ST(1), ST(0)
    570 fdivrp ST(1), ST(0)
    571 
    572 // CHECK: faddp %st(1)
    573 // CHECK: fmulp %st(1)
    574 // CHECK: fsubrp %st(1)
    575 // CHECK: fsubp %st(1)
    576 // CHECK: fdivrp %st(1)
    577 // CHECK: fdivp %st(1)
    578 faddp ST(0), ST(1)
    579 fmulp ST(0), ST(1)
    580 fsubp ST(0), ST(1)
    581 fsubrp ST(0), ST(1)
    582 fdivp ST(0), ST(1)
    583 fdivrp ST(0), ST(1)
    584 
    585 // CHECK: faddp %st(1)
    586 // CHECK: fmulp %st(1)
    587 // CHECK: fsubrp %st(1)
    588 // CHECK: fsubp %st(1)
    589 // CHECK: fdivrp %st(1)
    590 // CHECK: fdivp %st(1)
    591 faddp ST(1)
    592 fmulp ST(1)
    593 fsubp ST(1)
    594 fsubrp ST(1)
    595 fdivp ST(1)
    596 fdivrp ST(1)
    597 
    598 
    599 // CHECK: faddp %st(1)
    600 // CHECK: fmulp %st(1)
    601 // CHECK: fsubrp %st(1)
    602 // CHECK: fsubp %st(1)
    603 // CHECK: fdivrp %st(1)
    604 // CHECK: fdivp %st(1)
    605 fadd
    606 fmul
    607 fsub
    608 fsubr
    609 fdiv
    610 fdivr
    611 
    612 // CHECK: faddp %st(1)
    613 // CHECK: fmulp %st(1)
    614 // CHECK: fsubrp %st(1)
    615 // CHECK: fsubp %st(1)
    616 // CHECK: fdivrp %st(1)
    617 // CHECK: fdivp %st(1)
    618 faddp
    619 fmulp
    620 fsubp
    621 fsubrp
    622 fdivp
    623 fdivrp
    624 
    625 // CHECK: fadd %st(1)
    626 // CHECK: fmul %st(1)
    627 // CHECK: fsub %st(1)
    628 // CHECK: fsubr %st(1)
    629 // CHECK: fdiv %st(1)
    630 // CHECK: fdivr %st(1)
    631 fadd ST(0), ST(1)
    632 fmul ST(0), ST(1)
    633 fsub ST(0), ST(1)
    634 fsubr ST(0), ST(1)
    635 fdiv ST(0), ST(1)
    636 fdivr ST(0), ST(1)
    637 
    638 // CHECK: fadd %st(0), %st(1)
    639 // CHECK: fmul %st(0), %st(1)
    640 // CHECK: fsubr %st(0), %st(1)
    641 // CHECK: fsub %st(0), %st(1)
    642 // CHECK: fdivr %st(0), %st(1)
    643 // CHECK: fdiv %st(0), %st(1)
    644 fadd ST(1), ST(0)
    645 fmul ST(1), ST(0)
    646 fsub ST(1), ST(0)
    647 fsubr ST(1), ST(0)
    648 fdiv ST(1), ST(0)
    649 fdivr ST(1), ST(0)
    650 
    651 // CHECK: fadd %st(1)
    652 // CHECK: fmul %st(1)
    653 // CHECK: fsub %st(1)
    654 // CHECK: fsubr %st(1)
    655 // CHECK: fdiv %st(1)
    656 // CHECK: fdivr %st(1)
    657 fadd ST(1)
    658 fmul ST(1)
    659 fsub ST(1)
    660 fsubr ST(1)
    661 fdiv ST(1)
    662 fdivr ST(1)
    663 
    664 
    665 // CHECK: fxsave64 (%rax)
    666 // CHECK: fxrstor64 (%rax)
    667 fxsave64 [rax]
    668 fxrstor64 [rax]
    669 
    670 .bss
    671 .globl _g0
    672 .text
    673 
    674 // CHECK: movq _g0, %rbx
    675 // CHECK: movq _g0+8, %rcx
    676 // CHECK: movq _g0+18(%rbp), %rax
    677 // CHECK: movq _g0(,%rsi,4), %rax
    678 mov rbx, qword ptr [_g0]
    679 mov rcx, qword ptr [_g0 + 8]
    680 mov rax, QWORD PTR _g0[rbp + 1 + (2 * 5) - 3 + 1<<1]
    681 mov rax, QWORD PTR _g0[rsi*4]
    682 
    683 "?half@?0??bar@@YAXXZ@4NA":
    684 	.quad   4602678819172646912
    685 
    686 fadd   dword ptr "?half@?0??bar@@YAXXZ@4NA"
    687 fadd   dword ptr "?half@?0??bar@@YAXXZ@4NA"@IMGREL
    688 // CHECK: fadds   "?half@?0??bar@@YAXXZ@4NA"
    689 // CHECK: fadds   "?half@?0??bar@@YAXXZ@4NA"@IMGREL
    690 
    691 inc qword ptr [rax]
    692 inc long ptr [rax]
    693 inc dword ptr [rax]
    694 inc word ptr [rax]
    695 inc byte ptr [rax]
    696 // CHECK: incq (%rax)
    697 // CHECK: incl (%rax)
    698 // CHECK: incl (%rax)
    699 // CHECK: incw (%rax)
    700 // CHECK: incb (%rax)
    701 
    702 dec qword ptr [rax]
    703 dec dword ptr [rax]
    704 dec word ptr [rax]
    705 dec byte ptr [rax]
    706 // CHECK: decq (%rax)
    707 // CHECK: decl (%rax)
    708 // CHECK: decw (%rax)
    709 // CHECK: decb (%rax)
    710 
    711 add qword ptr [rax], 1
    712 add dword ptr [rax], 1
    713 add word ptr [rax], 1
    714 add byte ptr [rax], 1
    715 // CHECK: addq $1, (%rax)
    716 // CHECK: addl $1, (%rax)
    717 // CHECK: addw $1, (%rax)
    718 // CHECK: addb $1, (%rax)
    719 
    720 fstp tbyte ptr [rax]
    721 fstp xword ptr [rax]
    722 fstp qword ptr [rax]
    723 fstp dword ptr [rax]
    724 // CHECK: fstpt (%rax)
    725 // CHECK: fstpt (%rax)
    726 // CHECK: fstpl (%rax)
    727 // CHECK: fstps (%rax)
    728 
    729 fxsave [eax]
    730 fsave [eax]
    731 fxrstor [eax]
    732 frstor [eax]
    733 // CHECK: fxsave (%eax)
    734 // CHECK: wait
    735 // CHECK: fnsave (%eax)
    736 // CHECK: fxrstor (%eax)
    737 // CHECK: frstor (%eax)
    738 
    739 // FIXME: Should we accept this?  Masm accepts it, but gas does not.
    740 fxsave dword ptr [eax]
    741 fsave dword ptr [eax]
    742 fxrstor dword ptr [eax]
    743 frstor dword ptr [eax]
    744 // CHECK: fxsave (%eax)
    745 // CHECK: wait
    746 // CHECK: fnsave (%eax)
    747 // CHECK: fxrstor (%eax)
    748 // CHECK: frstor (%eax)
    749 
    750 // CHECK: cmpnless %xmm1, %xmm0
    751 cmpnless xmm0, xmm1
    752 
    753 insb
    754 insw
    755 insd
    756 // CHECK: insb %dx, %es:(%rdi)
    757 // CHECK: insw %dx, %es:(%rdi)
    758 // CHECK: insl %dx, %es:(%rdi)
    759 
    760 outsb
    761 outsw
    762 outsd
    763 // CHECK: outsb (%rsi), %dx
    764 // CHECK: outsw (%rsi), %dx
    765 // CHECK: outsl (%rsi), %dx
    766 
    767 imul bx, 123
    768 imul ebx, 123
    769 imul rbx, 123
    770 // CHECK: imulw $123, %bx
    771 // CHECK: imull $123, %ebx
    772 // CHECK: imulq $123, %rbx
    773 
    774 repe cmpsb
    775 repz cmpsb
    776 repne cmpsb
    777 repnz cmpsb
    778 // CHECK: rep
    779 // CHECK: cmpsb	%es:(%rdi), (%rsi)
    780 // CHECK: rep
    781 // CHECK: cmpsb	%es:(%rdi), (%rsi)
    782 // CHECK: repne
    783 // CHECK: cmpsb	%es:(%rdi), (%rsi)
    784 // CHECK: repne
    785 // CHECK: cmpsb	%es:(%rdi), (%rsi)
    786 
    787 sal eax, 123
    788 // CHECK: shll	$123, %eax
    789 
    790 psignw    mm0, MMWORD PTR t2
    791 // CHECK: psignw t2, %mm0
    792 
    793 comisd xmm0, QWORD PTR [eax]
    794 comiss xmm0, DWORD PTR [eax]
    795 vcomisd xmm0, QWORD PTR [eax]
    796 vcomiss xmm0, DWORD PTR [eax]
    797 
    798 // CHECK: comisd (%eax), %xmm0
    799 // CHECK: comiss (%eax), %xmm0
    800 // CHECK: vcomisd (%eax), %xmm0
    801 // CHECK: vcomiss (%eax), %xmm0
    802 
    803 fbld tbyte ptr [eax]
    804 fbstp tbyte ptr [eax]
    805 // CHECK: fbld (%eax)
    806 // CHECK: fbstp (%eax)
    807 
    808 fld float ptr [rax]
    809 fld double ptr [rax]
    810 // CHECK: flds (%rax)
    811 // CHECK: fldl (%rax)
    812 
    813 fcomip st, st(2)
    814 fucomip st, st(2)
    815 // CHECK: fcompi  %st(2)
    816 // CHECK: fucompi  %st(2)
    817 
    818 loopz _foo
    819 loopnz _foo
    820 // CHECK: loope _foo
    821 // CHECK: loopne _foo
    822 
    823 sidt fword ptr [eax]
    824 // CHECK: sidtq (%eax)
    825 
    826 ins byte ptr [eax], dx
    827 // CHECK: insb %dx, %es:(%edi)
    828 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location
    829 // CHECK-STDERR-NEXT: ins byte ptr [eax], dx
    830 outs dx, word ptr [eax]
    831 // CHECK: outsw (%esi), %dx
    832 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location
    833 // CHECK-STDERR-NEXT: outs dx, word ptr [eax]
    834 lods dword ptr [eax]
    835 // CHECK: lodsl (%esi), %eax
    836 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location
    837 // CHECK-STDERR-NEXT: lods dword ptr [eax]
    838 stos qword ptr [eax]
    839 // CHECK: stosq %rax, %es:(%edi)
    840 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location
    841 // CHECK-STDERR-NEXT: stos qword ptr [eax]
    842 scas byte ptr [eax]
    843 // CHECK: scasb %es:(%edi), %al
    844 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location
    845 // CHECK-STDERR-NEXT: scas byte ptr [eax]
    846 cmps word ptr [eax], word ptr [ebx]
    847 // CHECK: cmpsw %es:(%edi), (%esi)
    848 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location
    849 // CHECK-STDERR-NEXT: cmps word ptr [eax], word ptr [ebx]
    850 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location
    851 // CHECK-STDERR-NEXT: cmps word ptr [eax], word ptr [ebx]
    852 movs dword ptr [eax], dword ptr [ebx]
    853 // CHECK: movsl (%esi), %es:(%edi)
    854 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location
    855 // CHECK-STDERR-NEXT: movs dword ptr [eax], dword ptr [ebx]
    856 // CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location
    857 // CHECK-STDERR-NEXT: movs dword ptr [eax], dword ptr [ebx]
    858 
    859 movsd  qword ptr [rax], xmm0
    860 // CHECK: movsd %xmm0, (%rax)
    861 // CHECK-STDERR-NOT: movsd qword ptr [rax], xmm0
    862 
    863 xlat byte ptr [eax]
    864 // CHECK: xlatb
    865 // CHECK-STDERR: memory operand is only for determining the size, (R|E)BX will be used for the location
    866 
    867 // CHECK:   punpcklbw
    868 punpcklbw mm0, dword ptr [rsp]
    869 // CHECK:   punpcklwd
    870 punpcklwd mm0, dword ptr [rsp]
    871 // CHECK:   punpckldq
    872 punpckldq mm0, dword ptr [rsp]
    873 
    874 // CHECK: lslq (%eax), %rbx
    875 lsl rbx, word ptr [eax]
    876 
    877 // CHECK: lsll (%eax), %ebx
    878 lsl ebx, word ptr [eax]
    879 
    880 // CHECK: lslw (%eax), %bx
    881 lsl bx, word ptr [eax]
    882 
    883 // CHECK: sysexitl
    884 sysexit
    885 // CHECK: sysexitq
    886 sysexitq
    887 // CHECK: sysretl
    888 sysret
    889 // CHECK: sysretq
    890 sysretq
    891 
    892 // CHECK: leaq (%rsp,%rax), %rax
    893 lea rax, [rax+rsp]
    894 // CHECK: leaq (%rsp,%rax), %rax
    895 lea rax, [rsp+rax]
    896 // CHECK: leal (%esp,%eax), %eax
    897 lea eax, [eax+esp]
    898 // CHECK: leal (%esp,%eax), %eax
    899 lea eax, [esp+eax]
    900 
    901 // CHECK: vpgatherdq      %ymm2, (%rdi,%xmm1), %ymm0
    902 vpgatherdq ymm0, [rdi+xmm1], ymm2
    903 // CHECK: vpgatherdq      %ymm2, (%rdi,%xmm1), %ymm0
    904 vpgatherdq ymm0, [xmm1+rdi], ymm2
    905