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