x86-64.s revision 740e5b3586a474f1cea371cf6f652850e5420b90
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// FIXME: Check that this matches SUB32ri8 54// CHECK: subl $1, %eax 55 subl $1, %eax 56 57// FIXME: Check that this matches SUB32ri8 58// CHECK: subl $-1, %eax 59 subl $-1, %eax 60 61// FIXME: Check that this matches SUB32ri 62// CHECK: subl $256, %eax 63 subl $256, %eax 64 65// FIXME: Check that this matches XOR64ri8 66// CHECK: xorq $1, %rax 67 xorq $1, %rax 68 69// FIXME: Check that this matches XOR64ri32 70// CHECK: xorq $256, %rax 71 xorq $256, %rax 72 73// FIXME: Check that this matches SUB8rr 74// CHECK: subb %al, %bl 75 subb %al, %bl 76 77// FIXME: Check that this matches SUB16rr 78// CHECK: subw %ax, %bx 79 subw %ax, %bx 80 81// FIXME: Check that this matches SUB32rr 82// CHECK: subl %eax, %ebx 83 subl %eax, %ebx 84 85// FIXME: Check that this matches the correct instruction. 86// CHECK: callq *%rax 87 call *%rax 88 89// FIXME: Check that this matches the correct instruction. 90// CHECK: shldl %cl, %eax, %ebx 91 shldl %cl, %eax, %ebx 92 93// CHECK: shll $2, %eax 94 shll $2, %eax 95 96// CHECK: shll $2, %eax 97 sall $2, %eax 98 99// CHECK: rep 100// CHECK: insb 101 rep;insb 102 103// CHECK: rep 104// CHECK: outsb 105 rep;outsb 106 107// CHECK: rep 108// CHECK: movsb 109 rep;movsb 110 111 112// rdar://8470918 113smovb // CHECK: movsb 114smovw // CHECK: movsw 115smovl // CHECK: movsd 116smovq // CHECK: movsq 117 118// rdar://8456361 119// CHECK: rep 120// CHECK: movsd 121 rep movsd 122 123// CHECK: rep 124// CHECK: lodsb 125 rep;lodsb 126 127// CHECK: rep 128// CHECK: stosb 129 rep;stosb 130 131// NOTE: repz and repe have the same opcode as rep 132// CHECK: rep 133// CHECK: cmpsb 134 repz;cmpsb 135 136// NOTE: repnz has the same opcode as repne 137// CHECK: repne 138// CHECK: cmpsb 139 repnz;cmpsb 140 141// NOTE: repe and repz have the same opcode as rep 142// CHECK: rep 143// CHECK: scasb 144 repe;scasb 145 146// CHECK: repne 147// CHECK: scasb 148 repne;scasb 149 150// CHECK: lock 151// CHECK: cmpxchgb %al, (%ebx) 152 lock;cmpxchgb %al, 0(%ebx) 153 154// CHECK: cs 155// CHECK: movb (%eax), %al 156 cs;movb 0(%eax), %al 157 158// CHECK: ss 159// CHECK: movb (%eax), %al 160 ss;movb 0(%eax), %al 161 162// CHECK: ds 163// CHECK: movb (%eax), %al 164 ds;movb 0(%eax), %al 165 166// CHECK: es 167// CHECK: movb (%eax), %al 168 es;movb 0(%eax), %al 169 170// CHECK: fs 171// CHECK: movb (%eax), %al 172 fs;movb 0(%eax), %al 173 174// CHECK: gs 175// CHECK: movb (%eax), %al 176 gs;movb 0(%eax), %al 177 178// CHECK: fadd %st(0) 179// CHECK: fadd %st(1) 180// CHECK: fadd %st(7) 181 182fadd %st(0) 183fadd %st(1) 184fadd %st(7) 185 186// CHECK: leal 0, %eax 187 leal 0, %eax 188 189// rdar://7986634 - Insensitivity on opcodes. 190// CHECK: int3 191INT3 192 193// rdar://8735979 - int $3 -> int3 194// CHECK: int3 195int $3 196 197 198// Allow scale factor without index register. 199// CHECK: movaps %xmm3, (%esi) 200// CHECK-STDERR: warning: scale factor without index register is ignored 201movaps %xmm3, (%esi, 2) 202 203// CHECK: imull $12, %eax, %eax 204imul $12, %eax 205 206// CHECK: imull %ecx, %eax 207imull %ecx, %eax 208 209 210// rdar://8208481 211// CHECK: outb %al, $161 212outb %al, $161 213// CHECK: outw %ax, $128 214outw %ax, $128 215// CHECK: inb $161, %al 216inb $161, %al 217 218// rdar://8017621 219// CHECK: pushq $1 220push $1 221 222// rdar://8017530 223// CHECK: sldtw 4 224sldt 4 225 226// rdar://8208499 227// CHECK: cmovnew %bx, %ax 228cmovnz %bx, %ax 229// CHECK: cmovneq %rbx, %rax 230cmovnzq %rbx, %rax 231 232 233// rdar://8407928 234// CHECK: inb $127, %al 235// CHECK: inw %dx, %ax 236// CHECK: outb %al, $127 237// CHECK: outw %ax, %dx 238// CHECK: inl %dx, %eax 239inb $0x7f 240inw %dx 241outb $0x7f 242outw %dx 243inl %dx 244 245 246// PR8114 247// CHECK: outb %al, %dx 248// CHECK: outb %al, %dx 249// CHECK: outw %ax, %dx 250// CHECK: outw %ax, %dx 251// CHECK: outl %eax, %dx 252// CHECK: outl %eax, %dx 253 254out %al, (%dx) 255outb %al, (%dx) 256out %ax, (%dx) 257outw %ax, (%dx) 258out %eax, (%dx) 259outl %eax, (%dx) 260 261// CHECK: inb %dx, %al 262// CHECK: inb %dx, %al 263// CHECK: inw %dx, %ax 264// CHECK: inw %dx, %ax 265// CHECK: inl %dx, %eax 266// CHECK: inl %dx, %eax 267 268in (%dx), %al 269inb (%dx), %al 270in (%dx), %ax 271inw (%dx), %ax 272in (%dx), %eax 273inl (%dx), %eax 274 275// rdar://8431422 276 277// CHECK: fxch 278// CHECK: fucom 279// CHECK: fucomp 280// CHECK: faddp 281// CHECK: faddp %st(0) 282// CHECK: fsubp 283// CHECK: fsubrp 284// CHECK: fmulp 285// CHECK: fdivp 286// CHECK: fdivrp 287 288fxch 289fucom 290fucomp 291faddp 292faddp %st 293fsubp 294fsubrp 295fmulp 296fdivp 297fdivrp 298 299// CHECK: fcomi 300// CHECK: fcomi %st(2) 301// CHECK: fucomi 302// CHECK: fucomi %st(2) 303// CHECK: fucomi %st(2) 304 305fcomi 306fcomi %st(2) 307fucomi 308fucomi %st(2) 309fucomi %st(2), %st 310 311// CHECK: fnstsw 312// CHECK: fnstsw 313// CHECK: fnstsw 314// CHECK: fnstsw 315 316fnstsw 317fnstsw %ax 318fnstsw %eax 319fnstsw %al 320 321// rdar://8431880 322// CHECK: rclb %bl 323// CHECK: rcll 3735928559(%ebx,%ecx,8) 324// CHECK: rcrl %ecx 325// CHECK: rcrl 305419896 326rcl %bl 327rcll 0xdeadbeef(%ebx,%ecx,8) 328rcr %ecx 329rcrl 0x12345678 330 331rclb %bl // CHECK: rclb %bl # encoding: [0xd0,0xd3] 332rclb $1, %bl // CHECK: rclb %bl # encoding: [0xd0,0xd3] 333rclb $2, %bl // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02] 334 335// rdar://8418316 336// CHECK: shldw $1, %bx, %bx 337// CHECK: shldw $1, %bx, %bx 338// CHECK: shrdw $1, %bx, %bx 339// CHECK: shrdw $1, %bx, %bx 340 341shld %bx,%bx 342shld $1, %bx,%bx 343shrd %bx,%bx 344shrd $1, %bx,%bx 345 346// CHECK: sldtl %ecx 347// CHECK: encoding: [0x0f,0x00,0xc1] 348// CHECK: sldtw %cx 349// CHECK: encoding: [0x66,0x0f,0x00,0xc1] 350 351sldt %ecx 352sldt %cx 353 354// CHECK: lcalll *3135175374 355// CHECK: ljmpl *3135175374 356lcall *0xbadeface 357ljmp *0xbadeface 358 359 360// rdar://8444631 361// CHECK: enter $31438, $0 362// CHECK: encoding: [0xc8,0xce,0x7a,0x00] 363// CHECK: enter $31438, $1 364// CHECK: encoding: [0xc8,0xce,0x7a,0x01] 365// CHECK: enter $31438, $127 366// CHECK: encoding: [0xc8,0xce,0x7a,0x7f] 367enter $0x7ace,$0 368enter $0x7ace,$1 369enter $0x7ace,$0x7f 370 371 372// rdar://8456364 373// CHECK: movw %cs, %ax 374mov %CS, %ax 375 376// rdar://8456391 377fcmovb %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0) 378fcmove %st(1), %st(0) // CHECK: fcmove %st(1), %st(0) 379fcmovbe %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0) 380fcmovu %st(1), %st(0) // CHECK: fcmovu %st(1), %st(0) 381 382fcmovnb %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0) 383fcmovne %st(1), %st(0) // CHECK: fcmovne %st(1), %st(0) 384fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0) 385fcmovnu %st(1), %st(0) // CHECK: fcmovnu %st(1), %st(0) 386 387fcmovnae %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0) 388fcmovna %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0) 389 390fcmovae %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0) 391fcmova %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0) 392 393// rdar://8456417 394.byte 88 + 1 & 15 // CHECK: .byte 9 395 396// rdar://8456412 397mov %rdx, %cr0 398// CHECK: movq %rdx, %cr0 399// CHECK: encoding: [0x0f,0x22,0xc2] 400mov %rdx, %cr4 401// CHECK: movq %rdx, %cr4 402// CHECK: encoding: [0x0f,0x22,0xe2] 403mov %rdx, %cr8 404// CHECK: movq %rdx, %cr8 405// CHECK: encoding: [0x44,0x0f,0x22,0xc2] 406mov %rdx, %cr15 407// CHECK: movq %rdx, %cr15 408// CHECK: encoding: [0x44,0x0f,0x22,0xfa] 409 410// rdar://8456371 - Handle commutable instructions written backward. 411// CHECK: faddp %st(1) 412// CHECK: fmulp %st(2) 413faddp %st, %st(1) 414fmulp %st, %st(2) 415 416// rdar://8468087 - Encode these accurately, they are not synonyms. 417// CHECK: fmul %st(0), %st(1) 418// CHECK: encoding: [0xdc,0xc9] 419// CHECK: fmul %st(1) 420// CHECK: encoding: [0xd8,0xc9] 421fmul %st, %st(1) 422fmul %st(1), %st 423 424// CHECK: fadd %st(0), %st(1) 425// CHECK: encoding: [0xdc,0xc1] 426// CHECK: fadd %st(1) 427// CHECK: encoding: [0xd8,0xc1] 428fadd %st, %st(1) 429fadd %st(1), %st 430 431 432// rdar://8416805 433// CHECK: xorb %al, %al 434// CHECK: encoding: [0x30,0xc0] 435// CHECK: xorw %di, %di 436// CHECK: encoding: [0x66,0x31,0xff] 437// CHECK: xorl %esi, %esi 438// CHECK: encoding: [0x31,0xf6] 439// CHECK: xorq %rsi, %rsi 440// CHECK: encoding: [0x48,0x31,0xf6] 441clrb %al 442clr %di 443clr %esi 444clr %rsi 445 446// rdar://8456378 447cltq // CHECK: cltq 448cdqe // CHECK: cltq 449cwde // CHECK: cwtl 450cwtl // CHECK: cwtl 451 452// rdar://8416805 453cbw // CHECK: cbtw 454cwd // CHECK: cwtd 455cdq // CHECK: cltd 456 457// rdar://8456378 and PR7557 - fstsw 458fstsw %ax 459// CHECK: wait 460// CHECK: fnstsw 461fstsw (%rax) 462// CHECK: wait 463// CHECK: fnstsw (%rax) 464 465// PR8259 466fstcw (%rsp) 467// CHECK: wait 468// CHECK: fnstcw (%rsp) 469 470// PR8259 471fstcw (%rsp) 472// CHECK: wait 473// CHECK: fnstcw (%rsp) 474 475// PR8258 476finit 477// CHECK: wait 478// CHECK: fninit 479 480fsave 32493 481// CHECK: wait 482// CHECK: fnsave 32493 483 484 485// rdar://8456382 - cvtsd2si support. 486cvtsd2si %xmm1, %rax 487// CHECK: cvtsd2siq %xmm1, %rax 488// CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1] 489cvtsd2si %xmm1, %eax 490// CHECK: cvtsd2sil %xmm1, %eax 491// CHECK: encoding: [0xf2,0x0f,0x2d,0xc1] 492 493cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq %xmm0, %rax 494cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil %xmm0, %eax 495cvtsd2si %xmm0, %rax // CHECK: cvtsd2siq %xmm0, %rax 496 497 498cvttpd2dq %xmm1, %xmm0 // CHECK: cvttpd2dq %xmm1, %xmm0 499cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0 500 501cvttps2dq %xmm1, %xmm0 // CHECK: cvttps2dq %xmm1, %xmm0 502cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0 503 504// rdar://8456376 - llvm-mc rejects 'roundss' 505roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e] 506roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e] 507roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e] 508roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e] 509 510 511// rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix) 512leal 8(%eax), %esi 513// CHECK: leal 8(%eax), %esi 514// CHECK: encoding: [0x67,0x8d,0x70,0x08] 515leaq 8(%eax), %rsi 516// CHECK: leaq 8(%eax), %rsi 517// CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08] 518leaq 8(%rax), %rsi 519// CHECK: leaq 8(%rax), %rsi 520// CHECK: encoding: [0x48,0x8d,0x70,0x08] 521 522 523cvttpd2dq 0xdeadbeef(%ebx,%ecx,8),%xmm5 524// CHECK: cvttpd2dq 3735928559(%ebx,%ecx,8), %xmm5 525// CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde] 526 527// rdar://8490728 - llvm-mc rejects 'movmskpd' 528movmskpd %xmm6, %rax 529// CHECK: movmskpd %xmm6, %rax 530// CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6] 531movmskpd %xmm6, %eax 532// CHECK: movmskpd %xmm6, %eax 533// CHECK: encoding: [0x66,0x0f,0x50,0xc6] 534 535// rdar://8491845 - Gas supports commuted forms of non-commutable instructions. 536fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9] 537fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9] 538 539fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9] 540fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9] 541 542// also PR8861 543fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1] 544fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1] 545 546 547movl foo(%rip), %eax 548// CHECK: movl foo(%rip), %eax 549// CHECK: encoding: [0x8b,0x05,A,A,A,A] 550// CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte 551 552movb $12, foo(%rip) 553// CHECK: movb $12, foo(%rip) 554// CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c] 555// CHECK: fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte 556 557movw $12, foo(%rip) 558// CHECK: movw $12, foo(%rip) 559// CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00] 560// CHECK: fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte 561 562movl $12, foo(%rip) 563// CHECK: movl $12, foo(%rip) 564// CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 565// CHECK: fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte 566 567movq $12, foo(%rip) 568// CHECK: movq $12, foo(%rip) 569// CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 570// CHECK: fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte 571 572// CHECK: addq $-424, %rax 573// CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff] 574addq $-424, %rax 575 576 577// CHECK: movq _foo@GOTPCREL(%rip), %rax 578// CHECK: encoding: [0x48,0x8b,0x05,A,A,A,A] 579// CHECK: fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 580movq _foo@GOTPCREL(%rip), %rax 581 582// CHECK: movq _foo@GOTPCREL(%rip), %r14 583// CHECK: encoding: [0x4c,0x8b,0x35,A,A,A,A] 584// CHECK: fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 585movq _foo@GOTPCREL(%rip), %r14 586 587 588// CHECK: movq (%r13,%rax,8), %r13 589// CHECK: encoding: [0x4d,0x8b,0x6c,0xc5,0x00] 590movq 0x00(%r13,%rax,8),%r13 591 592// CHECK: testq %rax, %rbx 593// CHECK: encoding: [0x48,0x85,0xd8] 594testq %rax, %rbx 595 596// CHECK: cmpq %rbx, %r14 597// CHECK: encoding: [0x49,0x39,0xde] 598 cmpq %rbx, %r14 599 600// rdar://7947167 601 602movsq 603// CHECK: movsq 604// CHECK: encoding: [0x48,0xa5] 605 606movsl 607// CHECK: movsd 608// CHECK: encoding: [0xa5] 609 610stosq 611// CHECK: stosq 612// CHECK: encoding: [0x48,0xab] 613stosl 614// CHECK: stosl 615// CHECK: encoding: [0xab] 616 617 618// Not moffset forms of moves, they are x86-32 only! rdar://7947184 619movb 0, %al // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00] 620movw 0, %ax // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00] 621movl 0, %eax // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00] 622 623// CHECK: pushfq # encoding: [0x9c] 624 pushf 625// CHECK: pushfq # encoding: [0x9c] 626 pushfq 627// CHECK: popfq # encoding: [0x9d] 628 popf 629// CHECK: popfq # encoding: [0x9d] 630 popfq 631 632// CHECK: movabsq $-281474976710654, %rax 633// CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff] 634 movabsq $0xFFFF000000000002, %rax 635 636// CHECK: movabsq $-281474976710654, %rax 637// CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff] 638 movq $0xFFFF000000000002, %rax 639 640// CHECK: movq $-65536, %rax 641// CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff] 642 movq $0xFFFFFFFFFFFF0000, %rax 643 644// CHECK: movq $-256, %rax 645// CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff] 646 movq $0xFFFFFFFFFFFFFF00, %rax 647 648// CHECK: movq $10, %rax 649// CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00] 650 movq $10, %rax 651 652// rdar://8014869 653// 654// CHECK: ret 655// CHECK: encoding: [0xc3] 656 retq 657 658// CHECK: sete %al 659// CHECK: encoding: [0x0f,0x94,0xc0] 660 setz %al 661 662// CHECK: setne %al 663// CHECK: encoding: [0x0f,0x95,0xc0] 664 setnz %al 665 666// CHECK: je 0 667// CHECK: encoding: [0x74,A] 668 jz 0 669 670// CHECK: jne 671// CHECK: encoding: [0x75,A] 672 jnz 0 673 674// PR9264 675btl $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01] 676bt $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01] 677 678// rdar://8017515 679btq $0x01,%rdx 680// CHECK: btq $1, %rdx 681// CHECK: encoding: [0x48,0x0f,0xba,0xe2,0x01] 682 683//rdar://8017633 684// CHECK: movzbl %al, %esi 685// CHECK: encoding: [0x0f,0xb6,0xf0] 686 movzx %al, %esi 687 688// CHECK: movzbq %al, %rsi 689// CHECK: encoding: [0x48,0x0f,0xb6,0xf0] 690 movzx %al, %rsi 691 692// CHECK: movsbw %al, %ax 693// CHECK: encoding: [0x66,0x0f,0xbe,0xc0] 694movsx %al, %ax 695 696// CHECK: movsbl %al, %eax 697// CHECK: encoding: [0x0f,0xbe,0xc0] 698movsx %al, %eax 699 700// CHECK: movswl %ax, %eax 701// CHECK: encoding: [0x0f,0xbf,0xc0] 702movsx %ax, %eax 703 704// CHECK: movsbq %bl, %rax 705// CHECK: encoding: [0x48,0x0f,0xbe,0xc3] 706movsx %bl, %rax 707 708// CHECK: movswq %cx, %rax 709// CHECK: encoding: [0x48,0x0f,0xbf,0xc1] 710movsx %cx, %rax 711 712// CHECK: movslq %edi, %rax 713// CHECK: encoding: [0x48,0x63,0xc7] 714movsx %edi, %rax 715 716// CHECK: movzbw %al, %ax 717// CHECK: encoding: [0x66,0x0f,0xb6,0xc0] 718movzx %al, %ax 719 720// CHECK: movzbl %al, %eax 721// CHECK: encoding: [0x0f,0xb6,0xc0] 722movzx %al, %eax 723 724// CHECK: movzwl %ax, %eax 725// CHECK: encoding: [0x0f,0xb7,0xc0] 726movzx %ax, %eax 727 728// CHECK: movzbq %bl, %rax 729// CHECK: encoding: [0x48,0x0f,0xb6,0xc3] 730movzx %bl, %rax 731 732// CHECK: movzwq %cx, %rax 733// CHECK: encoding: [0x48,0x0f,0xb7,0xc1] 734movzx %cx, %rax 735 736// CHECK: movsbw (%rax), %ax 737// CHECK: encoding: [0x66,0x0f,0xbe,0x00] 738movsx (%rax), %ax 739 740// CHECK: movzbw (%rax), %ax 741// CHECK: encoding: [0x66,0x0f,0xb6,0x00] 742movzx (%rax), %ax 743 744 745// rdar://7873482 746// CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00] 747 movl %gs:124, %eax 748 749// CHECK: jmpq *8(%rax) 750// CHECK: encoding: [0xff,0x60,0x08] 751 jmp *8(%rax) 752 753// CHECK: btq $61, -216(%rbp) 754// CHECK: encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d] 755 btq $61, -216(%rbp) 756 757 758// rdar://8061602 759L1: 760 jecxz L1 761// CHECK: jecxz L1 762// CHECK: encoding: [0x67,0xe3,A] 763 jrcxz L1 764// CHECK: jrcxz L1 765// CHECK: encoding: [0xe3,A] 766 767// PR8061 768xchgl 368(%rax),%ecx 769// CHECK: xchgl %ecx, 368(%rax) 770xchgl %ecx, 368(%rax) 771// CHECK: xchgl %ecx, 368(%rax) 772 773// rdar://8407548 774xchg 0xdeadbeef(%rbx,%rcx,8),%bl 775// CHECK: xchgb %bl, 3735928559(%rbx,%rcx,8) 776 777 778 779// PR7254 780lock incl 1(%rsp) 781// CHECK: lock 782// CHECK: incl 1(%rsp) 783 784// rdar://8741045 785lock/incl 1(%rsp) 786// CHECK: lock 787// CHECK: incl 1(%rsp) 788 789// rdar://8033482 790rep movsl 791// CHECK: rep 792// CHECK: encoding: [0xf3] 793// CHECK: movsd 794// CHECK: encoding: [0xa5] 795 796 797// rdar://8403974 798iret 799// CHECK: iretl 800// CHECK: encoding: [0xcf] 801iretw 802// CHECK: iretw 803// CHECK: encoding: [0x66,0xcf] 804iretl 805// CHECK: iretl 806// CHECK: encoding: [0xcf] 807iretq 808// CHECK: iretq 809// CHECK: encoding: [0x48,0xcf] 810 811// rdar://8416805 812// CHECK: retw $31438 813// CHECK: encoding: [0x66,0xc2,0xce,0x7a] 814 retw $0x7ace 815 816// CHECK: lretw $31438 817// CHECK: encoding: [0x66,0xca,0xce,0x7a] 818 lretw $0x7ace 819 820// PR8592 821lretq // CHECK: lretq # encoding: [0x48,0xcb] 822lretl // CHECK: lretl # encoding: [0xcb] 823lret // CHECK: lretl # encoding: [0xcb] 824 825// rdar://8403907 826sysret 827// CHECK: sysretl 828// CHECK: encoding: [0x0f,0x07] 829sysretl 830// CHECK: sysretl 831// CHECK: encoding: [0x0f,0x07] 832sysretq 833// CHECK: sysretq 834// CHECK: encoding: [0x48,0x0f,0x07] 835 836// rdar://8407242 837push %fs 838// CHECK: pushq %fs 839// CHECK: encoding: [0x0f,0xa0] 840push %gs 841// CHECK: pushq %gs 842// CHECK: encoding: [0x0f,0xa8] 843 844pushw %fs 845// CHECK: pushw %fs 846// CHECK: encoding: [0x66,0x0f,0xa0] 847pushw %gs 848// CHECK: pushw %gs 849// CHECK: encoding: [0x66,0x0f,0xa8] 850 851 852pop %fs 853// CHECK: popq %fs 854// CHECK: encoding: [0x0f,0xa1] 855pop %gs 856// CHECK: popq %gs 857// CHECK: encoding: [0x0f,0xa9] 858 859popw %fs 860// CHECK: popw %fs 861// CHECK: encoding: [0x66,0x0f,0xa1] 862popw %gs 863// CHECK: popw %gs 864// CHECK: encoding: [0x66,0x0f,0xa9] 865 866// rdar://8438816 867fildq -8(%rsp) 868fildll -8(%rsp) 869// CHECK: fildll -8(%rsp) 870// CHECK: encoding: [0xdf,0x6c,0x24,0xf8] 871// CHECK: fildll -8(%rsp) 872// CHECK: encoding: [0xdf,0x6c,0x24,0xf8] 873 874// CHECK: callq a 875 callq a 876 877// CHECK: leaq -40(%rbp), %r15 878 leaq -40(%rbp), %r15 879 880 881 882// rdar://8013734 - Alias dr6=db6 883mov %dr6, %rax 884mov %db6, %rax 885// CHECK: movq %dr6, %rax 886// CHECK: movq %dr6, %rax 887 888 889// INC/DEC encodings. 890incb %al // CHECK: incb %al # encoding: [0xfe,0xc0] 891incw %ax // CHECK: incw %ax # encoding: [0x66,0xff,0xc0] 892incl %eax // CHECK: incl %eax # encoding: [0xff,0xc0] 893decb %al // CHECK: decb %al # encoding: [0xfe,0xc8] 894decw %ax // CHECK: decw %ax # encoding: [0x66,0xff,0xc8] 895decl %eax // CHECK: decl %eax # encoding: [0xff,0xc8] 896 897// rdar://8416805 898// CHECK: lgdt 4(%rax) 899// CHECK: encoding: [0x0f,0x01,0x50,0x04] 900 lgdt 4(%rax) 901 902// CHECK: lgdt 4(%rax) 903// CHECK: encoding: [0x0f,0x01,0x50,0x04] 904 lgdtq 4(%rax) 905 906// CHECK: lidt 4(%rax) 907// CHECK: encoding: [0x0f,0x01,0x58,0x04] 908 lidt 4(%rax) 909 910// CHECK: lidt 4(%rax) 911// CHECK: encoding: [0x0f,0x01,0x58,0x04] 912 lidtq 4(%rax) 913 914// CHECK: sgdt 4(%rax) 915// CHECK: encoding: [0x0f,0x01,0x40,0x04] 916 sgdt 4(%rax) 917 918// CHECK: sgdt 4(%rax) 919// CHECK: encoding: [0x0f,0x01,0x40,0x04] 920 sgdtq 4(%rax) 921 922// CHECK: sidt 4(%rax) 923// CHECK: encoding: [0x0f,0x01,0x48,0x04] 924 sidt 4(%rax) 925 926// CHECK: sidt 4(%rax) 927// CHECK: encoding: [0x0f,0x01,0x48,0x04] 928 sidtq 4(%rax) 929 930 931// rdar://8208615 932mov (%rsi), %gs // CHECK: movl (%rsi), %gs # encoding: [0x8e,0x2e] 933mov %gs, (%rsi) // CHECK: movl %gs, (%rsi) # encoding: [0x8c,0x2e] 934 935 936// rdar://8431864 937 div %bl,%al 938 div %bx,%ax 939 div %ecx,%eax 940 div 0xdeadbeef(%ebx,%ecx,8),%eax 941 div 0x45,%eax 942 div 0x7eed,%eax 943 div 0xbabecafe,%eax 944 div 0x12345678,%eax 945 idiv %bl,%al 946 idiv %bx,%ax 947 idiv %ecx,%eax 948 idiv 0xdeadbeef(%ebx,%ecx,8),%eax 949 idiv 0x45,%eax 950 idiv 0x7eed,%eax 951 idiv 0xbabecafe,%eax 952 idiv 0x12345678,%eax 953 954// PR8524 955movd %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8] 956movd %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb] 957movq %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8] 958movq %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb] 959 960rex64 // CHECK: rex64 # encoding: [0x48] 961data16 // CHECK: data16 # encoding: [0x66] 962 963// PR8855 964movq 18446744073709551615,%rbx // CHECK: movq -1, %rbx 965 966// PR8946 967movdqu %xmm0, %xmm1 // CHECK: movdqu %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8] 968 969// PR8935 970xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0] 971xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1] 972 973// CHECK: loope 0 974// CHECK: encoding: [0xe1,A] 975 loopz 0 976 977// CHECK: loopne 0 978// CHECK: encoding: [0xe0,A] 979 loopnz 0 980 981// CHECK: outsb # encoding: [0x6e] 982// CHECK: outsb 983// CHECK: outsb 984 outsb 985 outsb %ds:(%rsi), %dx 986 outsb (%rsi), %dx 987 988// CHECK: outsw # encoding: [0x66,0x6f] 989// CHECK: outsw 990// CHECK: outsw 991 outsw 992 outsw %ds:(%rsi), %dx 993 outsw (%rsi), %dx 994 995// CHECK: outsl # encoding: [0x6f] 996// CHECK: outsl 997 outsl 998 outsl %ds:(%rsi), %dx 999 outsl (%rsi), %dx 1000 1001// CHECK: insb # encoding: [0x6c] 1002// CHECK: insb 1003 insb 1004 insb %dx, %es:(%rdi) 1005 1006// CHECK: insw # encoding: [0x66,0x6d] 1007// CHECK: insw 1008 insw 1009 insw %dx, %es:(%rdi) 1010 1011// CHECK: insl # encoding: [0x6d] 1012// CHECK: insl 1013 insl 1014 insl %dx, %es:(%rdi) 1015 1016// CHECK: movsb # encoding: [0xa4] 1017// CHECK: movsb 1018// CHECK: movsb 1019 movsb 1020 movsb %ds:(%rsi), %es:(%rdi) 1021 movsb (%rsi), %es:(%rdi) 1022 1023// CHECK: movsw # encoding: [0x66,0xa5] 1024// CHECK: movsw 1025// CHECK: movsw 1026 movsw 1027 movsw %ds:(%rsi), %es:(%rdi) 1028 movsw (%rsi), %es:(%rdi) 1029 1030// CHECK: movsd # encoding: [0xa5] 1031// CHECK: movsd 1032// CHECK: movsd 1033 movsl 1034 movsl %ds:(%rsi), %es:(%rdi) 1035 movsl (%rsi), %es:(%rdi) 1036 1037// CHECK: movsq # encoding: [0x48,0xa5] 1038// CHECK: movsq 1039// CHECK: movsq 1040 movsq 1041 movsq %ds:(%rsi), %es:(%rdi) 1042 movsq (%rsi), %es:(%rdi) 1043 1044// CHECK: lodsb # encoding: [0xac] 1045// CHECK: lodsb 1046// CHECK: lodsb 1047// CHECK: lodsb 1048// CHECK: lodsb 1049 lodsb 1050 lodsb %ds:(%rsi), %al 1051 lodsb (%rsi), %al 1052 lods %ds:(%rsi), %al 1053 lods (%rsi), %al 1054 1055// CHECK: lodsw # encoding: [0x66,0xad] 1056// CHECK: lodsw 1057// CHECK: lodsw 1058// CHECK: lodsw 1059// CHECK: lodsw 1060 lodsw 1061 lodsw %ds:(%rsi), %ax 1062 lodsw (%rsi), %ax 1063 lods %ds:(%rsi), %ax 1064 lods (%rsi), %ax 1065 1066// CHECK: lodsl # encoding: [0xad] 1067// CHECK: lodsl 1068// CHECK: lodsl 1069// CHECK: lodsl 1070// CHECK: lodsl 1071 lodsl 1072 lodsl %ds:(%rsi), %eax 1073 lodsl (%rsi), %eax 1074 lods %ds:(%rsi), %eax 1075 lods (%rsi), %eax 1076 1077// CHECK: lodsq # encoding: [0x48,0xad] 1078// CHECK: lodsq 1079// CHECK: lodsq 1080// CHECK: lodsq 1081// CHECK: lodsq 1082 lodsq 1083 lodsq %ds:(%rsi), %rax 1084 lodsq (%rsi), %rax 1085 lods %ds:(%rsi), %rax 1086 lods (%rsi), %rax 1087 1088// CHECK: stosb # encoding: [0xaa] 1089// CHECK: stosb 1090// CHECK: stosb 1091 stosb 1092 stosb %al, %es:(%rdi) 1093 stos %al, %es:(%rdi) 1094 1095// CHECK: stosw # encoding: [0x66,0xab] 1096// CHECK: stosw 1097// CHECK: stosw 1098 stosw 1099 stosw %ax, %es:(%rdi) 1100 stos %ax, %es:(%rdi) 1101 1102// CHECK: stosl # encoding: [0xab] 1103// CHECK: stosl 1104// CHECK: stosl 1105 stosl 1106 stosl %eax, %es:(%rdi) 1107 stos %eax, %es:(%rdi) 1108 1109// CHECK: stosq # encoding: [0x48,0xab] 1110// CHECK: stosq 1111// CHECK: stosq 1112 stosq 1113 stosq %rax, %es:(%rdi) 1114 stos %rax, %es:(%rdi) 1115 1116// CHECK: strw 1117// CHECK: encoding: [0x66,0x0f,0x00,0xc8] 1118 str %ax 1119 1120// CHECK: strl 1121// CHECK: encoding: [0x0f,0x00,0xc8] 1122 str %eax 1123 1124// CHECK: strw 1125// CHECK: encoding: [0x66,0x0f,0x00,0xc8] 1126 str %ax 1127 1128// CHECK: strq 1129// CHECK: encoding: [0x48,0x0f,0x00,0xc8] 1130 str %rax 1131