Home | History | Annotate | Download | only in X86
      1 // RUN: llvm-mc -triple x86_64-unknown-unknown -show-encoding %s > %t 2> %t.err
      2 // RUN: FileCheck < %t %s
      3 // RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
      4 
      5 	monitor
      6 // CHECK: monitor
      7 // CHECK: encoding: [0x0f,0x01,0xc8]
      8 	monitor %rax, %rcx, %rdx
      9 // CHECK: monitor
     10 // CHECK: encoding: [0x0f,0x01,0xc8]
     11 	mwait
     12 // CHECK: mwait
     13 // CHECK: encoding: [0x0f,0x01,0xc9]
     14 	mwait %rax, %rcx
     15 // CHECK: mwait
     16 // CHECK: encoding: [0x0f,0x01,0xc9]
     17 
     18 // Suffix inference:
     19 
     20 // CHECK: addl $0, %eax
     21         add $0, %eax
     22 // CHECK: addb $255, %al
     23         add $0xFF, %al
     24 // CHECK: orq %rax, %rdx
     25         or %rax, %rdx
     26 // CHECK: shlq $3, %rax
     27         shl $3, %rax
     28 
     29 
     30 // CHECK: subb %al, %al
     31         subb %al, %al
     32 
     33 // CHECK: addl $24, %eax
     34         addl $24, %eax
     35 
     36 // CHECK: movl %eax, 10(%ebp)
     37         movl %eax, 10(%ebp)
     38 // CHECK: movl %eax, 10(%ebp,%ebx)
     39         movl %eax, 10(%ebp, %ebx)
     40 // CHECK: movl %eax, 10(%ebp,%ebx,4)
     41         movl %eax, 10(%ebp, %ebx, 4)
     42 // CHECK: movl %eax, 10(,%ebx,4)
     43         movl %eax, 10(, %ebx, 4)
     44 
     45 // CHECK: movl 0, %eax
     46         movl 0, %eax
     47 // CHECK: movl $0, %eax
     48         movl $0, %eax
     49 
     50 // CHECK: ret
     51         ret
     52 
     53 // CHECK: retw
     54         retw
     55 
     56 // FIXME: Check that this matches SUB32ri8
     57 // CHECK: subl $1, %eax
     58         subl $1, %eax
     59 
     60 // FIXME: Check that this matches SUB32ri8
     61 // CHECK: subl $-1, %eax
     62         subl $-1, %eax
     63 
     64 // FIXME: Check that this matches SUB32ri
     65 // CHECK: subl $256, %eax
     66         subl $256, %eax
     67 
     68 // FIXME: Check that this matches XOR64ri8
     69 // CHECK: xorq $1, %rax
     70         xorq $1, %rax
     71 
     72 // FIXME: Check that this matches XOR64ri32
     73 // CHECK: xorq $256, %rax
     74         xorq $256, %rax
     75 
     76 // FIXME: Check that this matches SUB8rr
     77 // CHECK: subb %al, %bl
     78         subb %al, %bl
     79 
     80 // FIXME: Check that this matches SUB16rr
     81 // CHECK: subw %ax, %bx
     82         subw %ax, %bx
     83 
     84 // FIXME: Check that this matches SUB32rr
     85 // CHECK: subl %eax, %ebx
     86         subl %eax, %ebx
     87 
     88 // FIXME: Check that this matches the correct instruction.
     89 // CHECK: callq *%rax
     90         call *%rax
     91 
     92 // FIXME: Check that this matches the correct instruction.
     93 // CHECK: shldl %cl, %eax, %ebx
     94         shldl %cl, %eax, %ebx
     95 
     96 // CHECK: shll $2, %eax
     97         shll $2, %eax
     98 
     99 // CHECK: shll $2, %eax
    100         sall $2, %eax
    101 
    102 // CHECK: rep
    103 // CHECK: insb
    104         rep;insb
    105 
    106 // CHECK: rep
    107 // CHECK: outsb
    108         rep;outsb
    109 
    110 // CHECK: rep
    111 // CHECK: movsb
    112         rep;movsb
    113 
    114 
    115 // rdar://8470918
    116 smovb // CHECK: movsb
    117 smovw // CHECK: movsw
    118 smovl // CHECK: movsl
    119 smovq // CHECK: movsq
    120 
    121 // rdar://8456361
    122 // CHECK: rep
    123 // CHECK: movsl
    124         rep movsd
    125 
    126 // CHECK: rep
    127 // CHECK: lodsb
    128         rep;lodsb
    129 
    130 // CHECK: rep
    131 // CHECK: stosb
    132         rep;stosb
    133 
    134 // NOTE: repz and repe have the same opcode as rep
    135 // CHECK: rep
    136 // CHECK: cmpsb
    137         repz;cmpsb
    138 
    139 // NOTE: repnz has the same opcode as repne
    140 // CHECK: repne
    141 // CHECK: cmpsb
    142         repnz;cmpsb
    143 
    144 // NOTE: repe and repz have the same opcode as rep
    145 // CHECK: rep
    146 // CHECK: scasb
    147         repe;scasb
    148 
    149 // CHECK: repne
    150 // CHECK: scasb
    151         repne;scasb
    152 
    153 // CHECK: lock
    154 // CHECK: cmpxchgb %al, (%ebx)
    155         lock;cmpxchgb %al, 0(%ebx)
    156 
    157 // CHECK: cs
    158 // CHECK: movb (%eax), %al
    159         cs;movb 0(%eax), %al
    160 
    161 // CHECK: ss
    162 // CHECK: movb (%eax), %al
    163         ss;movb 0(%eax), %al
    164 
    165 // CHECK: ds
    166 // CHECK: movb (%eax), %al
    167         ds;movb 0(%eax), %al
    168 
    169 // CHECK: es
    170 // CHECK: movb (%eax), %al
    171         es;movb 0(%eax), %al
    172 
    173 // CHECK: fs
    174 // CHECK: movb (%eax), %al
    175         fs;movb 0(%eax), %al
    176 
    177 // CHECK: gs
    178 // CHECK: movb (%eax), %al
    179         gs;movb 0(%eax), %al
    180 
    181 // CHECK: fadd %st(0)
    182 // CHECK: fadd %st(1)
    183 // CHECK: fadd %st(7)
    184 
    185 fadd %st(0)
    186 fadd %st(1)
    187 fadd %st(7)
    188 
    189 // CHECK: leal 0, %eax
    190         leal 0, %eax
    191 
    192 // rdar://7986634 - Insensitivity on opcodes.
    193 // CHECK: int3
    194 INT3
    195 
    196 // rdar://8735979 - int $3 -> int3
    197 // CHECK: int3
    198 int	$3
    199 
    200 
    201 // Allow scale factor without index register.
    202 // CHECK: movaps	%xmm3, (%esi)
    203 // CHECK-STDERR: warning: scale factor without index register is ignored
    204 movaps %xmm3, (%esi, 2)
    205 
    206 // CHECK: imull $12, %eax
    207 imul $12, %eax
    208 
    209 // CHECK: imull %ecx, %eax
    210 imull %ecx, %eax
    211 
    212 
    213 // rdar://8208481
    214 // CHECK: outb	%al, $161
    215 outb	%al, $161
    216 // CHECK: outw	%ax, $128
    217 outw	%ax, $128
    218 // CHECK: inb	$161, %al
    219 inb	$161, %al
    220 
    221 // rdar://8017621
    222 // CHECK: pushq	$1
    223 push $1
    224 
    225 // rdar://9716860
    226 pushq $1
    227 // CHECK: encoding: [0x6a,0x01]
    228 pushq $1111111
    229 // CHECK: encoding: [0x68,0x47,0xf4,0x10,0x00]
    230 
    231 // rdar://8017530
    232 // CHECK: sldtw	4
    233 sldt	4
    234 
    235 // rdar://8208499
    236 // CHECK: cmovnew	%bx, %ax
    237 cmovnz %bx, %ax
    238 // CHECK: cmovneq	%rbx, %rax
    239 cmovnzq %rbx, %rax
    240 
    241 
    242 // rdar://8407928
    243 // CHECK: inb	$127, %al
    244 // CHECK: inw	%dx, %ax
    245 // CHECK: outb	%al, $127
    246 // CHECK: outw	%ax, %dx
    247 // CHECK: inl	%dx, %eax
    248 inb	$0x7f
    249 inw	%dx
    250 outb	$0x7f
    251 outw	%dx
    252 inl	%dx
    253 
    254 
    255 // PR8114
    256 // CHECK: outb	%al, %dx
    257 // CHECK: outb	%al, %dx
    258 // CHECK: outw	%ax, %dx
    259 // CHECK: outw	%ax, %dx
    260 // CHECK: outl	%eax, %dx
    261 // CHECK: outl	%eax, %dx
    262 
    263 out	%al, (%dx)
    264 outb	%al, (%dx)
    265 out	%ax, (%dx)
    266 outw	%ax, (%dx)
    267 out	%eax, (%dx)
    268 outl	%eax, (%dx)
    269 
    270 // CHECK: inb	%dx, %al
    271 // CHECK: inb	%dx, %al
    272 // CHECK: inw	%dx, %ax
    273 // CHECK: inw	%dx, %ax
    274 // CHECK: inl	%dx, %eax
    275 // CHECK: inl	%dx, %eax
    276 
    277 in	(%dx), %al
    278 inb	(%dx), %al
    279 in	(%dx), %ax
    280 inw	(%dx), %ax
    281 in	(%dx), %eax
    282 inl	(%dx), %eax
    283 
    284 //PR15455
    285 
    286 // permitted invalid memory forms
    287 outs	(%rsi), (%dx)
    288 // CHECK: outsw	(%rsi), %dx
    289 outsb	(%rsi), (%dx)
    290 // CHECK: outsb	(%rsi), %dx
    291 outsw	(%rsi), (%dx)
    292 // CHECK: outsw	(%rsi), %dx
    293 outsl	(%rsi), (%dx)
    294 // CHECK: outsl	(%rsi), %dx
    295 
    296 ins	(%dx), %es:(%rdi)
    297 // CHECK: insw	%dx, %es:(%rdi)
    298 insb	(%dx), %es:(%rdi)
    299 // CHECK: insb	%dx, %es:(%rdi)
    300 insw	(%dx), %es:(%rdi)
    301 // CHECK: insw	%dx, %es:(%rdi)
    302 insl	(%dx), %es:(%rdi)
    303 // CHECK: insl	%dx, %es:(%rdi)
    304 
    305 // rdar://8431422
    306 
    307 // CHECK: fxch %st(1)
    308 // CHECK: fucom %st(1)
    309 // CHECK: fucomp %st(1)
    310 // CHECK: faddp %st(1)
    311 // CHECK: faddp	%st(0)
    312 // CHECK: fsubp %st(1)
    313 // CHECK: fsubrp %st(1)
    314 // CHECK: fmulp %st(1)
    315 // CHECK: fdivp %st(1)
    316 // CHECK: fdivrp %st(1)
    317 
    318 fxch
    319 fucom
    320 fucomp
    321 faddp
    322 faddp %st
    323 fsubp
    324 fsubrp
    325 fmulp
    326 fdivp
    327 fdivrp
    328 
    329 // CHECK: fcomi %st(1)
    330 // CHECK: fcomi	%st(2)
    331 // CHECK: fucomi %st(1)
    332 // CHECK: fucomi %st(2)
    333 // CHECK: fucomi %st(2)
    334 
    335 fcomi
    336 fcomi	%st(2)
    337 fucomi
    338 fucomi	%st(2)
    339 fucomi	%st(2), %st
    340 
    341 // CHECK: fnstsw %ax
    342 // CHECK: fnstsw %ax
    343 // CHECK: fnstsw %ax
    344 // CHECK: fnstsw %ax
    345 
    346 fnstsw
    347 fnstsw %ax
    348 fnstsw %eax
    349 fnstsw %al
    350 
    351 // rdar://8431880
    352 // CHECK: rclb	%bl
    353 // CHECK: rcll	3735928559(%ebx,%ecx,8)
    354 // CHECK: rcrl	%ecx
    355 // CHECK: rcrl	305419896
    356 rcl	%bl
    357 rcll	0xdeadbeef(%ebx,%ecx,8)
    358 rcr	%ecx
    359 rcrl	0x12345678
    360 
    361 rclb	%bl       // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
    362 rclb	$1, %bl   // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
    363 rclb	$2, %bl   // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02]
    364 
    365 // rdar://8418316
    366 // PR12173
    367 // CHECK: shldw	%cl, %bx, %dx
    368 // CHECK: shldw	%cl, %bx, %dx
    369 // CHECK: shldw	$1, %bx, %dx
    370 // CHECK: shldw	%cl, %bx, (%rax)
    371 // CHECK: shldw	%cl, %bx, (%rax)
    372 // CHECK: shrdw	%cl, %bx, %dx
    373 // CHECK: shrdw	%cl, %bx, %dx
    374 // CHECK: shrdw	$1, %bx, %dx
    375 // CHECK: shrdw	%cl, %bx, (%rax)
    376 // CHECK: shrdw	%cl, %bx, (%rax)
    377 
    378 shld  %bx, %dx
    379 shld  %cl, %bx, %dx
    380 shld  $1, %bx, %dx
    381 shld  %bx, (%rax)
    382 shld  %cl, %bx, (%rax)
    383 shrd  %bx, %dx
    384 shrd  %cl, %bx, %dx
    385 shrd  $1, %bx, %dx
    386 shrd  %bx, (%rax)
    387 shrd  %cl, %bx, (%rax)
    388 
    389 // CHECK: sldtl	%ecx
    390 // CHECK: encoding: [0x0f,0x00,0xc1]
    391 // CHECK: sldtw	%cx
    392 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
    393 
    394 sldt	%ecx
    395 sldt	%cx
    396 
    397 // CHECK: lcalll	*3135175374
    398 // CHECK: ljmpl	*3135175374
    399 lcall	*0xbadeface
    400 ljmp	*0xbadeface
    401 
    402 
    403 // rdar://8444631
    404 // CHECK: enter	$31438, $0
    405 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
    406 // CHECK: enter	$31438, $1
    407 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
    408 // CHECK: enter	$31438, $127
    409 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
    410 enter $0x7ace,$0
    411 enter $0x7ace,$1
    412 enter $0x7ace,$0x7f
    413 
    414 
    415 // rdar://8456364
    416 // CHECK: movw	%cs, %ax
    417 mov %CS, %ax
    418 
    419 // rdar://8456391
    420 fcmovb %st(1), %st(0)   // CHECK: fcmovb	%st(1), %st(0)
    421 fcmove %st(1), %st(0)   // CHECK: fcmove	%st(1), %st(0)
    422 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe	%st(1), %st(0)
    423 fcmovu %st(1), %st(0)   // CHECK: fcmovu	 %st(1), %st(0)
    424 
    425 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb	%st(1), %st(0)
    426 fcmovne %st(1), %st(0)  // CHECK: fcmovne	%st(1), %st(0)
    427 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe	%st(1), %st(0)
    428 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu	%st(1), %st(0)
    429 
    430 fcmovnae %st(1), %st(0) // CHECK: fcmovb	%st(1), %st(0)
    431 fcmovna %st(1), %st(0)  // CHECK: fcmovbe	%st(1), %st(0)
    432 
    433 fcmovae %st(1), %st(0)  // CHECK: fcmovnb	%st(1), %st(0)
    434 fcmova %st(1), %st(0)   // CHECK: fcmovnbe	%st(1), %st(0)
    435 
    436 // rdar://8456417
    437 .byte (88 + 1) & 15  // CHECK: .byte	9
    438 
    439 // rdar://8456412
    440 mov %rdx, %cr0
    441 // CHECK: movq	%rdx, %cr0
    442 // CHECK: encoding: [0x0f,0x22,0xc2]
    443 mov %rdx, %cr4
    444 // CHECK: movq	%rdx, %cr4
    445 // CHECK: encoding: [0x0f,0x22,0xe2]
    446 mov %rdx, %cr8
    447 // CHECK: movq	%rdx, %cr8
    448 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
    449 mov %rdx, %cr15
    450 // CHECK: movq	%rdx, %cr15
    451 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
    452 
    453 // rdar://8456371 - Handle commutable instructions written backward.
    454 // CHECK: 	faddp	%st(1)
    455 // CHECK:	fmulp	%st(2)
    456 faddp %st, %st(1)
    457 fmulp %st, %st(2)
    458 
    459 // rdar://8468087 - Encode these accurately, they are not synonyms.
    460 // CHECK: fmul	%st(0), %st(1)
    461 // CHECK: encoding: [0xdc,0xc9]
    462 // CHECK: fmul	%st(1)
    463 // CHECK: encoding: [0xd8,0xc9]
    464 fmul %st, %st(1)
    465 fmul %st(1), %st
    466 
    467 // CHECK: fadd	%st(0), %st(1)
    468 // CHECK: encoding: [0xdc,0xc1]
    469 // CHECK: fadd	%st(1)
    470 // CHECK: encoding: [0xd8,0xc1]
    471 fadd %st, %st(1)
    472 fadd %st(1), %st
    473 
    474 
    475 // rdar://8416805
    476 // CHECK: xorb	%al, %al
    477 // CHECK: encoding: [0x30,0xc0]
    478 // CHECK: xorw	%di, %di
    479 // CHECK: encoding: [0x66,0x31,0xff]
    480 // CHECK: xorl	%esi, %esi
    481 // CHECK: encoding: [0x31,0xf6]
    482 // CHECK: xorq	%rsi, %rsi
    483 // CHECK: encoding: [0x48,0x31,0xf6]
    484 clrb    %al
    485 clr    %di
    486 clr    %esi
    487 clr    %rsi
    488 
    489 // rdar://8456378
    490 cltq  // CHECK: cltq
    491 cdqe  // CHECK: cltq
    492 cwde  // CHECK: cwtl
    493 cwtl  // CHECK: cwtl
    494 
    495 // rdar://8416805
    496 cbw   // CHECK: cbtw
    497 cwd   // CHECK: cwtd
    498 cdq   // CHECK: cltd
    499 cqo   // CHECK: cqto
    500 
    501 // rdar://8456378 and PR7557 - fstsw
    502 fstsw %ax
    503 // CHECK: wait
    504 // CHECK: fnstsw
    505 fstsw (%rax)
    506 // CHECK: wait
    507 // CHECK: fnstsw (%rax)
    508 
    509 // PR8259
    510 fstcw (%rsp)
    511 // CHECK: wait
    512 // CHECK: fnstcw (%rsp)
    513 
    514 // PR8259
    515 fstcw (%rsp)
    516 // CHECK: wait
    517 // CHECK: fnstcw (%rsp)
    518 
    519 // PR8258
    520 finit
    521 // CHECK: wait
    522 // CHECK: fninit
    523 
    524 fsave	32493
    525 // CHECK: wait
    526 // CHECK: fnsave 32493
    527 
    528 
    529 // rdar://8456382 - cvtsd2si support.
    530 cvtsd2si	%xmm1, %rax
    531 // CHECK: cvtsd2si	%xmm1, %rax
    532 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
    533 cvtsd2si	%xmm1, %eax
    534 // CHECK: cvtsd2si	%xmm1, %eax
    535 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
    536 
    537 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2si	%xmm0, %rax
    538 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2si	%xmm0, %eax
    539 cvtsd2si %xmm0, %rax  // CHECK: cvtsd2si	%xmm0, %rax
    540 
    541 
    542 cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
    543 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
    544 
    545 cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
    546 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
    547 
    548 // rdar://8456376 - llvm-mc rejects 'roundss'
    549 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
    550 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
    551 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
    552 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e]
    553 
    554 
    555 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix)
    556 leal	8(%eax), %esi
    557 // CHECK: leal	8(%eax), %esi
    558 // CHECK: encoding: [0x67,0x8d,0x70,0x08]
    559 leaq	8(%eax), %rsi
    560 // CHECK: leaq	8(%eax), %rsi
    561 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
    562 leaq	8(%rax), %rsi
    563 // CHECK: leaq	8(%rax), %rsi
    564 // CHECK: encoding: [0x48,0x8d,0x70,0x08]
    565 
    566 
    567 cvttpd2dq	0xdeadbeef(%ebx,%ecx,8),%xmm5
    568 // CHECK: cvttpd2dq	3735928559(%ebx,%ecx,8), %xmm5
    569 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde]
    570 
    571 // rdar://8490728 - llvm-mc rejects 'movmskpd'
    572 movmskpd	%xmm6, %rax
    573 // CHECK: movmskpd	%xmm6, %eax
    574 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
    575 movmskpd	%xmm6, %eax
    576 // CHECK: movmskpd	%xmm6, %eax
    577 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
    578 
    579 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
    580 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
    581 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
    582 
    583 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
    584 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
    585 
    586 // also PR8861
    587 fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
    588 fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
    589 
    590 
    591 movl	foo(%rip), %eax
    592 // CHECK: movl	foo(%rip), %eax
    593 // CHECK: encoding: [0x8b,0x05,A,A,A,A]
    594 // CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte
    595 
    596 movb	$12, foo(%rip)
    597 // CHECK: movb	$12, foo(%rip)
    598 // CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c]
    599 // CHECK:    fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte
    600 
    601 movw	$12, foo(%rip)
    602 // CHECK: movw	$12, foo(%rip)
    603 // CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00]
    604 // CHECK:    fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte
    605 
    606 movl	$12, foo(%rip)
    607 // CHECK: movl	$12, foo(%rip)
    608 // CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
    609 // CHECK:    fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte
    610 
    611 movq	$12, foo(%rip)
    612 // CHECK:  movq	$12, foo(%rip)
    613 // CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
    614 // CHECK:    fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte
    615 
    616 movl	foo(%eip), %eax
    617 // CHECK: movl	foo(%eip), %eax
    618 // CHECK: encoding: [0x67,0x8b,0x05,A,A,A,A]
    619 // CHECK: fixup A - offset: 3, value: foo-4, kind: reloc_riprel_4byte
    620 
    621 movb	$12, foo(%eip)
    622 // CHECK: movb	$12, foo(%eip)
    623 // CHECK: encoding: [0x67,0xc6,0x05,A,A,A,A,0x0c]
    624 // CHECK:    fixup A - offset: 3, value: foo-5, kind: reloc_riprel_4byte
    625 
    626 movw	$12, foo(%eip)
    627 // CHECK: movw	$12, foo(%eip)
    628 // CHECK: encoding: [0x67,0x66,0xc7,0x05,A,A,A,A,0x0c,0x00]
    629 // CHECK:    fixup A - offset: 4, value: foo-6, kind: reloc_riprel_4byte
    630 
    631 movl	$12, foo(%eip)
    632 // CHECK: movl	$12, foo(%eip)
    633 // CHECK: encoding: [0x67,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
    634 // CHECK:    fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte
    635 
    636 movq	$12, foo(%eip)
    637 // CHECK:  movq	$12, foo(%eip)
    638 // CHECK: encoding: [0x67,0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
    639 // CHECK:    fixup A - offset: 4, value: foo-8, kind: reloc_riprel_4byte
    640 
    641 // CHECK: addq	$-424, %rax
    642 // CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff]
    643 addq $-424, %rax
    644 
    645 
    646 // CHECK: movq	_foo@GOTPCREL(%rip), %rax
    647 // CHECK:  encoding: [0x48,0x8b,0x05,A,A,A,A]
    648 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
    649 movq _foo@GOTPCREL(%rip), %rax
    650 
    651 // CHECK: movq	_foo@GOTPCREL(%rip), %r14
    652 // CHECK:  encoding: [0x4c,0x8b,0x35,A,A,A,A]
    653 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
    654 movq _foo@GOTPCREL(%rip), %r14
    655 
    656 // CHECK: movq	_foo@GOTPCREL(%eip), %rax
    657 // CHECK:  encoding: [0x67,0x48,0x8b,0x05,A,A,A,A]
    658 // CHECK:  fixup A - offset: 4, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
    659 movq _foo@GOTPCREL(%eip), %rax
    660 
    661 // CHECK: movq	_foo@GOTPCREL(%eip), %r14
    662 // CHECK:  encoding: [0x67,0x4c,0x8b,0x35,A,A,A,A]
    663 // CHECK:  fixup A - offset: 4, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
    664 movq _foo@GOTPCREL(%eip), %r14
    665 
    666 // CHECK: movq	(%r13,%rax,8), %r13
    667 // CHECK:  encoding: [0x4d,0x8b,0x6c,0xc5,0x00]
    668 movq 0x00(%r13,%rax,8),%r13
    669 
    670 // CHECK: testq	%rax, %rbx
    671 // CHECK:  encoding: [0x48,0x85,0xc3]
    672 testq %rax, %rbx
    673 
    674 // CHECK: cmpq	%rbx, %r14
    675 // CHECK:   encoding: [0x49,0x39,0xde]
    676         cmpq %rbx, %r14
    677 
    678 // rdar://7947167
    679 
    680 movsq
    681 // CHECK: movsq
    682 // CHECK:   encoding: [0x48,0xa5]
    683 
    684 movsl
    685 // CHECK: movsl
    686 // CHECK:   encoding: [0xa5]
    687 
    688 stosq
    689 // CHECK: stosq
    690 // CHECK:   encoding: [0x48,0xab]
    691 stosl
    692 // CHECK: stosl
    693 // CHECK:   encoding: [0xab]
    694 
    695 
    696 // Not moffset forms of moves, they are x86-32 only! rdar://7947184
    697 movb	0, %al    // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00]
    698 movw	0, %ax    // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
    699 movl	0, %eax   // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
    700 
    701 // CHECK: pushfq	# encoding: [0x9c]
    702         pushf
    703 // CHECK: pushfq	# encoding: [0x9c]
    704         pushfq
    705 // CHECK: popfq	        # encoding: [0x9d]
    706         popf
    707 // CHECK: popfq	        # encoding: [0x9d]
    708         popfq
    709 
    710 // CHECK: movabsq $-281474976710654, %rax
    711 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
    712         movabsq $0xFFFF000000000002, %rax
    713 
    714 // CHECK: movabsq $-281474976710654, %rax
    715 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
    716         movq $0xFFFF000000000002, %rax
    717 
    718 // CHECK: movq $-65536, %rax
    719 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff]
    720         movq $0xFFFFFFFFFFFF0000, %rax
    721 
    722 // CHECK: movq $-256, %rax
    723 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff]
    724         movq $0xFFFFFFFFFFFFFF00, %rax
    725 
    726 // CHECK: movq $10, %rax
    727 // CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00]
    728         movq $10, %rax
    729 
    730 // CHECK: movabsb -6066930261531658096, %al
    731 // CHECK: encoding: [0xa0,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    732         movabsb 0xabcdef1234567890,%al
    733 
    734 // CHECK: movabsw -6066930261531658096, %ax
    735 // CHECK: encoding: [0x66,0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    736         movabsw 0xabcdef1234567890,%ax
    737 
    738 // CHECK: movabsl -6066930261531658096, %eax
    739 // CHECK: encoding: [0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    740         movabsl 0xabcdef1234567890,%eax
    741 
    742 // CHECK: movabsq -6066930261531658096, %rax
    743 // CHECK: encoding: [0x48,0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    744         movabsq 0xabcdef1234567890, %rax
    745 
    746 // CHECK: movabsb %al, -6066930261531658096
    747 // CHECK: encoding: [0xa2,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    748         movabsb %al,0xabcdef1234567890
    749 
    750 // CHECK: movabsw %ax, -6066930261531658096
    751 // CHECK: encoding: [0x66,0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    752         movabsw %ax,0xabcdef1234567890
    753 
    754 // CHECK: movabsl %eax, -6066930261531658096
    755 // CHECK: encoding: [0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    756         movabsl %eax,0xabcdef1234567890
    757 
    758 // CHECK: movabsq %rax, -6066930261531658096
    759 // CHECK: encoding: [0x48,0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab]
    760         movabsq %rax,0xabcdef1234567890
    761 
    762 // rdar://8014869
    763 //
    764 // CHECK: ret
    765 // CHECK:  encoding: [0xc3]
    766         retq
    767 
    768 // CHECK: sete %al
    769 // CHECK: encoding: [0x0f,0x94,0xc0]
    770         setz %al
    771 
    772 // CHECK: setne %al
    773 // CHECK: encoding: [0x0f,0x95,0xc0]
    774         setnz %al
    775 
    776 // CHECK: je 0
    777 // CHECK: encoding: [0x74,A]
    778         jz 0
    779 
    780 // CHECK: jne
    781 // CHECK: encoding: [0x75,A]
    782         jnz 0
    783 
    784 // PR9264
    785 btl	$1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
    786 bt	$1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
    787 
    788 // rdar://8017515
    789 btq $0x01,%rdx
    790 // CHECK: btq	$1, %rdx
    791 // CHECK:  encoding: [0x48,0x0f,0xba,0xe2,0x01]
    792 
    793 //rdar://8017633
    794 // CHECK: movzbl	%al, %esi
    795 // CHECK:  encoding: [0x0f,0xb6,0xf0]
    796         movzx %al, %esi
    797 
    798 // CHECK: movzbq	%al, %rsi
    799 // CHECK:  encoding: [0x48,0x0f,0xb6,0xf0]
    800         movzx %al, %rsi
    801 
    802 // CHECK: movsbw	%al, %ax
    803 // CHECK: encoding: [0x66,0x0f,0xbe,0xc0]
    804 movsx %al, %ax
    805 
    806 // CHECK: movsbl	%al, %eax
    807 // CHECK: encoding: [0x0f,0xbe,0xc0]
    808 movsx %al, %eax
    809 
    810 // CHECK: movswl	%ax, %eax
    811 // CHECK: encoding: [0x0f,0xbf,0xc0]
    812 movsx %ax, %eax
    813 
    814 // CHECK: movsbq	%bl, %rax
    815 // CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
    816 movsx %bl, %rax
    817 
    818 // CHECK: movswq %cx, %rax
    819 // CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
    820 movsx %cx, %rax
    821 
    822 // CHECK: movslq	%edi, %rax
    823 // CHECK: encoding: [0x48,0x63,0xc7]
    824 movsx %edi, %rax
    825 
    826 // CHECK: movzbw	%al, %ax
    827 // CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
    828 movzx %al, %ax
    829 
    830 // CHECK: movzbl	%al, %eax
    831 // CHECK: encoding: [0x0f,0xb6,0xc0]
    832 movzx %al, %eax
    833 
    834 // CHECK: movzwl	%ax, %eax
    835 // CHECK: encoding: [0x0f,0xb7,0xc0]
    836 movzx %ax, %eax
    837 
    838 // CHECK: movzbq	%bl, %rax
    839 // CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
    840 movzx %bl, %rax
    841 
    842 // CHECK: movzwq	%cx, %rax
    843 // CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
    844 movzx %cx, %rax
    845 
    846 // CHECK: movsbw	(%rax), %ax
    847 // CHECK: encoding: [0x66,0x0f,0xbe,0x00]
    848 movsx (%rax), %ax
    849 
    850 // CHECK: movzbw	(%rax), %ax
    851 // CHECK: encoding: [0x66,0x0f,0xb6,0x00]
    852 movzx (%rax), %ax
    853 
    854 
    855 // rdar://7873482
    856 // CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00]
    857         movl	%gs:124, %eax
    858 
    859 // CHECK: jmpq *8(%rax)
    860 // CHECK:   encoding: [0xff,0x60,0x08]
    861 	jmp	*8(%rax)
    862 
    863 // CHECK: btq $61, -216(%rbp)
    864 // CHECK:   encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d]
    865 	btq	$61, -216(%rbp)
    866 
    867 
    868 // rdar://8061602
    869 L1:
    870   jecxz L1
    871 // CHECK: jecxz L1
    872 // CHECK:   encoding: [0x67,0xe3,A]
    873   jrcxz L1
    874 // CHECK: jrcxz L1
    875 // CHECK:   encoding: [0xe3,A]
    876 
    877 // PR8061
    878 xchgl   368(%rax),%ecx
    879 // CHECK: xchgl	%ecx, 368(%rax)
    880 xchgl   %ecx, 368(%rax)
    881 // CHECK: xchgl	%ecx, 368(%rax)
    882 
    883 // rdar://8407548
    884 xchg	0xdeadbeef(%rbx,%rcx,8),%bl
    885 // CHECK: xchgb	%bl, 3735928559(%rbx,%rcx,8)
    886 
    887 
    888 
    889 // PR7254
    890 lock  incl 1(%rsp)
    891 // CHECK: lock
    892 // CHECK: incl 1(%rsp)
    893 
    894 // rdar://8741045
    895 lock/incl 1(%rsp)
    896 // CHECK: lock
    897 // CHECK: incl 1(%rsp)
    898 
    899 
    900 lock addq %rsi, (%rdi)
    901 // CHECK: lock
    902 // CHECK: encoding: [0xf0]
    903 // CHECK: addq %rsi, (%rdi)
    904 // CHECK: encoding: [0x48,0x01,0x37]
    905 
    906 lock subq %rsi, (%rdi)
    907 // CHECK: lock
    908 // CHECK: encoding: [0xf0]
    909 // CHECK: subq %rsi, (%rdi)
    910 // CHECK: encoding: [0x48,0x29,0x37]
    911 
    912 lock andq %rsi, (%rdi)
    913 // CHECK: lock
    914 // CHECK: encoding: [0xf0]
    915 // CHECK: andq %rsi, (%rdi)
    916 // CHECK: encoding: [0x48,0x21,0x37]
    917 
    918 lock orq %rsi, (%rdi)
    919 // CHECK: lock
    920 // CHECK: encoding: [0xf0]
    921 // CHECK: orq %rsi, (%rdi)
    922 // CHECK: encoding: [0x48,0x09,0x37]
    923 
    924 lock xorq %rsi, (%rdi)
    925 // CHECK: lock
    926 // CHECK: encoding: [0xf0]
    927 // CHECK: xorq %rsi, (%rdi)
    928 // CHECK: encoding: [0x48,0x31,0x37]
    929 
    930 
    931 // rdar://8033482
    932 rep movsl
    933 // CHECK: rep
    934 // CHECK: encoding: [0xf3]
    935 // CHECK: movsl
    936 // CHECK: encoding: [0xa5]
    937 
    938 
    939 // rdar://8403974
    940 iret
    941 // CHECK: iretl
    942 // CHECK: encoding: [0xcf]
    943 iretw
    944 // CHECK: iretw
    945 // CHECK: encoding: [0x66,0xcf]
    946 iretl
    947 // CHECK: iretl
    948 // CHECK: encoding: [0xcf]
    949 iretq
    950 // CHECK: iretq
    951 // CHECK: encoding: [0x48,0xcf]
    952 
    953 // rdar://8416805
    954 // CHECK: retw	$31438
    955 // CHECK:  encoding: [0x66,0xc2,0xce,0x7a]
    956         	retw	$0x7ace
    957 
    958 // CHECK: lretw	$31438
    959 // CHECK:  encoding: [0x66,0xca,0xce,0x7a]
    960         	lretw	$0x7ace
    961 
    962 // PR8592
    963 lretq  // CHECK: lretq # encoding: [0x48,0xcb]
    964 lretl  // CHECK: lretl # encoding: [0xcb]
    965 lret   // CHECK: lretl # encoding: [0xcb]
    966 lretw  // CHECK: lretw # encoding: [0x66,0xcb]
    967 
    968 // rdar://8403907
    969 sysret
    970 // CHECK: sysretl
    971 // CHECK: encoding: [0x0f,0x07]
    972 sysretl
    973 // CHECK: sysretl
    974 // CHECK: encoding: [0x0f,0x07]
    975 sysretq
    976 // CHECK: sysretq
    977 // CHECK: encoding: [0x48,0x0f,0x07]
    978 
    979 // rdar://8407242
    980 push %fs
    981 // CHECK: pushq	%fs
    982 // CHECK: encoding: [0x0f,0xa0]
    983 push %gs
    984 // CHECK: pushq	%gs
    985 // CHECK: encoding: [0x0f,0xa8]
    986 
    987 pushw %fs
    988 // CHECK: pushw	%fs
    989 // CHECK: encoding: [0x66,0x0f,0xa0]
    990 pushw %gs
    991 // CHECK: pushw	%gs
    992 // CHECK: encoding: [0x66,0x0f,0xa8]
    993 
    994 
    995 pop %fs
    996 // CHECK: popq	%fs
    997 // CHECK: encoding: [0x0f,0xa1]
    998 pop %gs
    999 // CHECK: popq	%gs
   1000 // CHECK: encoding: [0x0f,0xa9]
   1001 
   1002 popw %fs
   1003 // CHECK: popw	%fs
   1004 // CHECK: encoding: [0x66,0x0f,0xa1]
   1005 popw %gs
   1006 // CHECK: popw	%gs
   1007 // CHECK: encoding: [0x66,0x0f,0xa9]
   1008 
   1009 // rdar://8438816
   1010 fildq -8(%rsp)
   1011 fildll -8(%rsp)
   1012 // CHECK: fildll	-8(%rsp)
   1013 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
   1014 // CHECK: fildll	-8(%rsp)
   1015 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
   1016 
   1017 // CHECK: callq a
   1018         callq a
   1019 
   1020 // CHECK: leaq	-40(%rbp), %r15
   1021 	leaq	-40(%rbp), %r15
   1022 
   1023 
   1024 
   1025 // rdar://8013734 - Alias dr6=db6
   1026 mov %dr6, %rax
   1027 mov %db6, %rax
   1028 // CHECK: movq	%dr6, %rax
   1029 // CHECK: movq	%dr6, %rax
   1030 
   1031 
   1032 // INC/DEC encodings.
   1033 incb %al  // CHECK:	incb	%al # encoding: [0xfe,0xc0]
   1034 incw %ax  // CHECK:	incw	%ax # encoding: [0x66,0xff,0xc0]
   1035 incl %eax // CHECK:	incl	%eax # encoding: [0xff,0xc0]
   1036 decb %al  // CHECK:	decb	%al # encoding: [0xfe,0xc8]
   1037 decw %ax  // CHECK:	decw	%ax # encoding: [0x66,0xff,0xc8]
   1038 decl %eax // CHECK:	decl	%eax # encoding: [0xff,0xc8]
   1039 
   1040 // rdar://8416805
   1041 // CHECK: lgdtq	4(%rax)
   1042 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
   1043         	lgdt	4(%rax)
   1044 
   1045 // CHECK: lgdtq	4(%rax)
   1046 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
   1047         	lgdtq	4(%rax)
   1048 
   1049 // CHECK: lidtq	4(%rax)
   1050 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
   1051         	lidt	4(%rax)
   1052 
   1053 // CHECK: lidtq	4(%rax)
   1054 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
   1055         	lidtq	4(%rax)
   1056 
   1057 // CHECK: sgdtq	4(%rax)
   1058 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
   1059         	sgdt	4(%rax)
   1060 
   1061 // CHECK: sgdtq	4(%rax)
   1062 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
   1063         	sgdtq	4(%rax)
   1064 
   1065 // CHECK: sidtq	4(%rax)
   1066 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
   1067         	sidt	4(%rax)
   1068 
   1069 // CHECK: sidtq	4(%rax)
   1070 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
   1071         	sidtq	4(%rax)
   1072 
   1073 
   1074 // rdar://8208615
   1075 mov (%rsi), %gs  // CHECK: movl	(%rsi), %gs # encoding: [0x8e,0x2e]
   1076 mov %gs, (%rsi)  // CHECK: movl	%gs, (%rsi) # encoding: [0x8c,0x2e]
   1077 
   1078 
   1079 // rdar://8431864
   1080 //CHECK: divb	%bl
   1081 //CHECK: divw	%bx
   1082 //CHECK: divl	%ecx
   1083 //CHECK: divl	3735928559(%ebx,%ecx,8)
   1084 //CHECK: divl	69
   1085 //CHECK: divl	32493
   1086 //CHECK: divl	3133065982
   1087 //CHECK: divl	305419896
   1088 //CHECK: idivb	%bl
   1089 //CHECK: idivw	%bx
   1090 //CHECK: idivl	%ecx
   1091 //CHECK: idivl	3735928559(%ebx,%ecx,8)
   1092 //CHECK: idivl	69
   1093 //CHECK: idivl	32493
   1094 //CHECK: idivl	3133065982
   1095 //CHECK: idivl	305419896
   1096 	div	%bl,%al
   1097 	div	%bx,%ax
   1098 	div	%ecx,%eax
   1099 	div	0xdeadbeef(%ebx,%ecx,8),%eax
   1100 	div	0x45,%eax
   1101 	div	0x7eed,%eax
   1102 	div	0xbabecafe,%eax
   1103 	div	0x12345678,%eax
   1104 	idiv	%bl,%al
   1105 	idiv	%bx,%ax
   1106 	idiv	%ecx,%eax
   1107 	idiv	0xdeadbeef(%ebx,%ecx,8),%eax
   1108 	idiv	0x45,%eax
   1109 	idiv	0x7eed,%eax
   1110 	idiv	0xbabecafe,%eax
   1111 	idiv	0x12345678,%eax
   1112 
   1113 // PR8524
   1114 movd	%rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
   1115 movd	%mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
   1116 movq	%rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
   1117 movq	%mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
   1118 
   1119 rex64 // CHECK: rex64 # encoding: [0x48]
   1120 data16 // CHECK: data16 # encoding: [0x66]
   1121 
   1122 // PR8855
   1123 movq 18446744073709551615,%rbx   // CHECK: movq	-1, %rbx
   1124 
   1125 // PR8946
   1126 movdqu	%xmm0, %xmm1 // CHECK: movdqu	%xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
   1127 
   1128 // PR8935
   1129 xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
   1130 xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1]
   1131 
   1132 // CHECK: loope 0
   1133 // CHECK: encoding: [0xe1,A]
   1134 	loopz 0
   1135 
   1136 // CHECK: loopne 0
   1137 // CHECK: encoding: [0xe0,A]
   1138 	loopnz 0
   1139 
   1140 // CHECK: outsb (%rsi), %dx # encoding: [0x6e]
   1141 // CHECK: outsb
   1142 // CHECK: outsb
   1143 	outsb
   1144 	outsb	%ds:(%rsi), %dx
   1145 	outsb	(%rsi), %dx
   1146 
   1147 // CHECK: outsw (%rsi), %dx # encoding: [0x66,0x6f]
   1148 // CHECK: outsw
   1149 // CHECK: outsw
   1150 	outsw
   1151 	outsw	%ds:(%rsi), %dx
   1152 	outsw	(%rsi), %dx
   1153 
   1154 // CHECK: outsl (%rsi), %dx # encoding: [0x6f]
   1155 // CHECK: outsl
   1156 	outsl
   1157 	outsl	%ds:(%rsi), %dx
   1158 	outsl	(%rsi), %dx
   1159 
   1160 // CHECK: insb  %dx, %es:(%rdi) # encoding: [0x6c]
   1161 // CHECK: insb
   1162 	insb
   1163 	insb	%dx, %es:(%rdi)
   1164 
   1165 // CHECK: insw  %dx, %es:(%rdi) # encoding: [0x66,0x6d]
   1166 // CHECK: insw
   1167 	insw
   1168 	insw	%dx, %es:(%rdi)
   1169 
   1170 // CHECK: insl %dx, %es:(%rdi) # encoding: [0x6d]
   1171 // CHECK: insl
   1172 	insl
   1173 	insl	%dx, %es:(%rdi)
   1174 
   1175 // CHECK: movsb (%rsi), %es:(%rdi) # encoding: [0xa4]
   1176 // CHECK: movsb
   1177 // CHECK: movsb
   1178 	movsb
   1179 	movsb	%ds:(%rsi), %es:(%rdi)
   1180 	movsb	(%rsi), %es:(%rdi)
   1181 
   1182 // CHECK: movsw (%rsi), %es:(%rdi) # encoding: [0x66,0xa5]
   1183 // CHECK: movsw
   1184 // CHECK: movsw
   1185 	movsw
   1186 	movsw	%ds:(%rsi), %es:(%rdi)
   1187 	movsw	(%rsi), %es:(%rdi)
   1188 
   1189 // CHECK: movsl (%rsi), %es:(%rdi) # encoding: [0xa5]
   1190 // CHECK: movsl
   1191 // CHECK: movsl
   1192 	movsl
   1193 	movsl	%ds:(%rsi), %es:(%rdi)
   1194 	movsl	(%rsi), %es:(%rdi)
   1195 // rdar://10883092
   1196 // CHECK: movsl
   1197 	movsl	(%rsi), (%rdi)
   1198 
   1199 // CHECK: movsq (%rsi), %es:(%rdi) # encoding: [0x48,0xa5]
   1200 // CHECK: movsq
   1201 // CHECK: movsq
   1202 	movsq
   1203 	movsq	%ds:(%rsi), %es:(%rdi)
   1204 	movsq	(%rsi), %es:(%rdi)
   1205 
   1206 // CHECK: lodsb (%rsi), %al # encoding: [0xac]
   1207 // CHECK: lodsb
   1208 // CHECK: lodsb
   1209 // CHECK: lodsb
   1210 // CHECK: lodsb
   1211 	lodsb
   1212 	lodsb	%ds:(%rsi), %al
   1213 	lodsb	(%rsi), %al
   1214 	lods	%ds:(%rsi), %al
   1215 	lods	(%rsi), %al
   1216 
   1217 // CHECK: lodsw (%rsi), %ax # encoding: [0x66,0xad]
   1218 // CHECK: lodsw
   1219 // CHECK: lodsw
   1220 // CHECK: lodsw
   1221 // CHECK: lodsw
   1222 	lodsw
   1223 	lodsw	%ds:(%rsi), %ax
   1224 	lodsw	(%rsi), %ax
   1225 	lods	%ds:(%rsi), %ax
   1226 	lods	(%rsi), %ax
   1227 
   1228 // CHECK: lodsl (%rsi), %eax # encoding: [0xad]
   1229 // CHECK: lodsl
   1230 // CHECK: lodsl
   1231 // CHECK: lodsl
   1232 // CHECK: lodsl
   1233 	lodsl
   1234 	lodsl	%ds:(%rsi), %eax
   1235 	lodsl	(%rsi), %eax
   1236 	lods	%ds:(%rsi), %eax
   1237 	lods	(%rsi), %eax
   1238 
   1239 // CHECK: lodsq (%rsi), %rax # encoding: [0x48,0xad]
   1240 // CHECK: lodsq
   1241 // CHECK: lodsq
   1242 // CHECK: lodsq
   1243 // CHECK: lodsq
   1244 	lodsq
   1245 	lodsq	%ds:(%rsi), %rax
   1246 	lodsq	(%rsi), %rax
   1247 	lods	%ds:(%rsi), %rax
   1248 	lods	(%rsi), %rax
   1249 
   1250 // CHECK: stosb %al, %es:(%rdi) # encoding: [0xaa]
   1251 // CHECK: stosb
   1252 // CHECK: stosb
   1253 	stosb
   1254 	stosb	%al, %es:(%rdi)
   1255 	stos	%al, %es:(%rdi)
   1256 
   1257 // CHECK: stosw %ax, %es:(%rdi) # encoding: [0x66,0xab]
   1258 // CHECK: stosw
   1259 // CHECK: stosw
   1260 	stosw
   1261 	stosw	%ax, %es:(%rdi)
   1262 	stos	%ax, %es:(%rdi)
   1263 
   1264 // CHECK: stosl %eax, %es:(%rdi) # encoding: [0xab]
   1265 // CHECK: stosl
   1266 // CHECK: stosl
   1267 	stosl
   1268 	stosl	%eax, %es:(%rdi)
   1269 	stos	%eax, %es:(%rdi)
   1270 
   1271 // CHECK: stosq %rax, %es:(%rdi) # encoding: [0x48,0xab]
   1272 // CHECK: stosq
   1273 // CHECK: stosq
   1274 	stosq
   1275 	stosq	%rax, %es:(%rdi)
   1276 	stos	%rax, %es:(%rdi)
   1277 
   1278 // CHECK: strw
   1279 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
   1280 	str %ax
   1281 
   1282 // CHECK: strl
   1283 // CHECK: encoding: [0x0f,0x00,0xc8]
   1284 	str %eax
   1285 
   1286 // CHECK: strw
   1287 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
   1288 	str %ax
   1289 
   1290 // CHECK: strq
   1291 // CHECK: encoding: [0x48,0x0f,0x00,0xc8]
   1292 	str %rax
   1293 
   1294 // CHECK: movd %rdi, %xmm0
   1295 // CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
   1296 	movq %rdi,%xmm0
   1297 
   1298 // CHECK: movd %rdi, %xmm0
   1299 // CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
   1300 	movd %rdi,%xmm0
   1301 
   1302 // CHECK: movd  %xmm0, %rax
   1303 // CHECK: encoding: [0x66,0x48,0x0f,0x7e,0xc0]
   1304         movd  %xmm0, %rax
   1305 
   1306 // CHECK: movntil %eax, (%rdi)
   1307 // CHECK: encoding: [0x0f,0xc3,0x07]
   1308 // CHECK: movntil
   1309 movntil %eax, (%rdi)
   1310 movnti %eax, (%rdi)
   1311 
   1312 // CHECK: movntiq %rax, (%rdi)
   1313 // CHECK: encoding: [0x48,0x0f,0xc3,0x07]
   1314 // CHECK: movntiq
   1315 movntiq %rax, (%rdi)
   1316 movnti %rax, (%rdi)
   1317 
   1318 // CHECK: pclmulqdq	$17, %xmm0, %xmm1
   1319 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x11]
   1320 pclmulhqhqdq %xmm0, %xmm1
   1321 
   1322 // CHECK: pclmulqdq	$1, %xmm0, %xmm1
   1323 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x01]
   1324 pclmulqdq $1, %xmm0, %xmm1
   1325 
   1326 // CHECK: pclmulqdq	$16, (%rdi), %xmm1
   1327 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x10]
   1328 pclmullqhqdq (%rdi), %xmm1
   1329 
   1330 // CHECK: pclmulqdq	$0, (%rdi), %xmm1
   1331 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x00]
   1332 pclmulqdq $0, (%rdi), %xmm1
   1333 
   1334 // PR10345
   1335 // CHECK: xchgq %rax, %rax
   1336 // CHECK: encoding: [0x48,0x90]
   1337 xchgq %rax, %rax
   1338 
   1339 // CHECK: xchgl %eax, %eax
   1340 // CHECK: encoding: [0x87,0xc0]
   1341 xchgl %eax, %eax
   1342 
   1343 // CHECK: xchgw %ax, %ax
   1344 // CHECK: encoding: [0x66,0x90]
   1345 xchgw %ax, %ax
   1346 
   1347 // CHECK: xchgl %ecx, %eax
   1348 // CHECK: encoding: [0x91]
   1349 xchgl %ecx, %eax
   1350 
   1351 // CHECK: xchgl %ecx, %eax
   1352 // CHECK: encoding: [0x91]
   1353 xchgl %eax, %ecx
   1354 
   1355 // CHECK: sysexit
   1356 // CHECK: encoding: [0x0f,0x35]
   1357 sysexit
   1358 
   1359 // CHECK: sysexitl
   1360 // CHECK: encoding: [0x0f,0x35]
   1361 sysexitl
   1362 
   1363 // CHECK: sysexitq
   1364 // CHECK: encoding: [0x48,0x0f,0x35]
   1365 sysexitq
   1366 
   1367 // CHECK: clac
   1368 // CHECK: encoding: [0x0f,0x01,0xca]
   1369 clac
   1370 
   1371 // CHECK: stac
   1372 // CHECK: encoding: [0x0f,0x01,0xcb]
   1373 stac
   1374 
   1375 // CHECK: faddp %st(1)
   1376 // CHECK: fmulp %st(1)
   1377 // CHECK: fsubp %st(1)
   1378 // CHECK: fsubrp %st(1)
   1379 // CHECK: fdivp %st(1)
   1380 // CHECK: fdivrp %st(1)
   1381 faddp %st(0), %st(1)
   1382 fmulp %st(0), %st(1)
   1383 fsubp %st(0), %st(1)
   1384 fsubrp %st(0), %st(1)
   1385 fdivp %st(0), %st(1)
   1386 fdivrp %st(0), %st(1)
   1387 
   1388 // CHECK: faddp %st(1)
   1389 // CHECK: fmulp %st(1)
   1390 // CHECK: fsubp %st(1)
   1391 // CHECK: fsubrp %st(1)
   1392 // CHECK: fdivp %st(1)
   1393 // CHECK: fdivrp %st(1)
   1394 faddp %st(1), %st(0)
   1395 fmulp %st(1), %st(0)
   1396 fsubp %st(1), %st(0)
   1397 fsubrp %st(1), %st(0)
   1398 fdivp %st(1), %st(0)
   1399 fdivrp %st(1), %st(0)
   1400 
   1401 // CHECK: faddp %st(1)
   1402 // CHECK: fmulp %st(1)
   1403 // CHECK: fsubp %st(1)
   1404 // CHECK: fsubrp %st(1)
   1405 // CHECK: fdivp %st(1)
   1406 // CHECK: fdivrp %st(1)
   1407 faddp %st(1)
   1408 fmulp %st(1)
   1409 fsubp %st(1)
   1410 fsubrp %st(1)
   1411 fdivp %st(1)
   1412 fdivrp %st(1)
   1413 
   1414 // CHECK: faddp %st(1)
   1415 // CHECK: fmulp %st(1)
   1416 // CHECK: fsubp %st(1)
   1417 // CHECK: fsubrp %st(1)
   1418 // CHECK: fdivp %st(1)
   1419 // CHECK: fdivrp %st(1)
   1420 faddp
   1421 fmulp
   1422 fsubp
   1423 fsubrp
   1424 fdivp
   1425 fdivrp
   1426 
   1427 // CHECK: fadd %st(1)
   1428 // CHECK: fmul %st(1)
   1429 // CHECK: fsub %st(1)
   1430 // CHECK: fsubr %st(1)
   1431 // CHECK: fdiv %st(1)
   1432 // CHECK: fdivr %st(1)
   1433 fadd %st(1), %st(0)
   1434 fmul %st(1), %st(0)
   1435 fsub %st(1), %st(0)
   1436 fsubr %st(1), %st(0)
   1437 fdiv %st(1), %st(0)
   1438 fdivr %st(1), %st(0)
   1439 
   1440 // CHECK: fadd %st(0), %st(1)
   1441 // CHECK: fmul %st(0), %st(1)
   1442 // CHECK: fsub %st(0), %st(1)
   1443 // CHECK: fsubr %st(0), %st(1)
   1444 // CHECK: fdiv %st(0), %st(1)
   1445 // CHECK: fdivr %st(0), %st(1)
   1446 fadd %st(0), %st(1)
   1447 fmul %st(0), %st(1)
   1448 fsub %st(0), %st(1)
   1449 fsubr %st(0), %st(1)
   1450 fdiv %st(0), %st(1)
   1451 fdivr %st(0), %st(1)
   1452 
   1453 // CHECK: fadd %st(1)
   1454 // CHECK: fmul %st(1)
   1455 // CHECK: fsub %st(1)
   1456 // CHECK: fsubr %st(1)
   1457 // CHECK: fdiv %st(1)
   1458 // CHECK: fdivr %st(1)
   1459 fadd %st(1)
   1460 fmul %st(1)
   1461 fsub %st(1)
   1462 fsubr %st(1)
   1463 fdiv %st(1)
   1464 fdivr %st(1)
   1465 
   1466 // CHECK: movd %xmm0, %eax
   1467 // CHECK: movd %xmm0, %rax
   1468 // CHECK: movd %xmm0, %rax
   1469 // CHECK: vmovd %xmm0, %eax
   1470 // CHECK: vmovq %xmm0, %rax
   1471 // CHECK: vmovq %xmm0, %rax
   1472 movd %xmm0, %eax
   1473 movd %xmm0, %rax
   1474 movq %xmm0, %rax
   1475 vmovd %xmm0, %eax
   1476 vmovd %xmm0, %rax
   1477 vmovq %xmm0, %rax
   1478 
   1479 // CHECK: seto 3735928559(%r10,%r9,8)
   1480 // CHECK:  encoding: [0x43,0x0f,0x90,0x84,0xca,0xef,0xbe,0xad,0xde]
   1481 	seto 0xdeadbeef(%r10,%r9,8)
   1482 
   1483 // CHECK: 	monitorx
   1484 // CHECK:  encoding: [0x0f,0x01,0xfa]
   1485         	monitorx
   1486 
   1487 // CHECK: 	monitorx
   1488 // CHECK:  encoding: [0x0f,0x01,0xfa]
   1489         	monitorx %rax, %rcx, %rdx
   1490 
   1491 // CHECK: 	mwaitx
   1492 // CHECK:  encoding: [0x0f,0x01,0xfb]
   1493         	mwaitx
   1494 
   1495 // CHECK: 	mwaitx
   1496 // CHECK:  encoding: [0x0f,0x01,0xfb]
   1497         	mwaitx %rax, %rcx, %rbx
   1498 
   1499 // CHECK: 	movl %r15d, (%r15,%r15)
   1500 // CHECK:  encoding: [0x47,0x89,0x3c,0x3f]
   1501 movl %r15d, (%r15,%r15)
   1502