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-NEXT: movsb 104 rep # comment 105 movsb 106 107 // CHECK: rep 108 // CHECK: insb 109 rep;insb 110 111 // CHECK: rep 112 // CHECK: outsb 113 rep;outsb 114 115 // CHECK: rep 116 // CHECK: movsb 117 rep;movsb 118 119 120 // rdar://8470918 121 smovb // CHECK: movsb 122 smovw // CHECK: movsw 123 smovl // CHECK: movsl 124 smovq // CHECK: movsq 125 126 // rdar://8456361 127 // CHECK: rep 128 // CHECK: movsl 129 rep movsd 130 131 // CHECK: rep 132 // CHECK: lodsb 133 rep;lodsb 134 135 // CHECK: rep 136 // CHECK: stosb 137 rep;stosb 138 139 // NOTE: repz and repe have the same opcode as rep 140 // CHECK: rep 141 // CHECK: cmpsb 142 repz;cmpsb 143 144 // NOTE: repnz has the same opcode as repne 145 // CHECK: repne 146 // CHECK: cmpsb 147 repnz;cmpsb 148 149 // NOTE: repe and repz have the same opcode as rep 150 // CHECK: rep 151 // CHECK: scasb 152 repe;scasb 153 154 // CHECK: repne 155 // CHECK: scasb 156 repne;scasb 157 158 // CHECK: lock 159 // CHECK: cmpxchgb %al, (%ebx) 160 lock;cmpxchgb %al, 0(%ebx) 161 162 // CHECK: cs 163 // CHECK: movb (%eax), %al 164 cs;movb 0(%eax), %al 165 166 // CHECK: ss 167 // CHECK: movb (%eax), %al 168 ss;movb 0(%eax), %al 169 170 // CHECK: ds 171 // CHECK: movb (%eax), %al 172 ds;movb 0(%eax), %al 173 174 // CHECK: es 175 // CHECK: movb (%eax), %al 176 es;movb 0(%eax), %al 177 178 // CHECK: fs 179 // CHECK: movb (%eax), %al 180 fs;movb 0(%eax), %al 181 182 // CHECK: gs 183 // CHECK: movb (%eax), %al 184 gs;movb 0(%eax), %al 185 186 // CHECK: fadd %st(0) 187 // CHECK: fadd %st(1) 188 // CHECK: fadd %st(7) 189 190 fadd %st(0) 191 fadd %st(1) 192 fadd %st(7) 193 194 // CHECK: leal 0, %eax 195 leal 0, %eax 196 197 // rdar://7986634 - Insensitivity on opcodes. 198 // CHECK: int3 199 INT3 200 201 // rdar://8735979 - int $3 -> int3 202 // CHECK: int3 203 int $3 204 205 206 // Allow scale factor without index register. 207 // CHECK: movaps %xmm3, (%esi) 208 // CHECK-STDERR: warning: scale factor without index register is ignored 209 movaps %xmm3, (%esi, 2) 210 211 // CHECK: imull $12, %eax 212 imul $12, %eax 213 214 // CHECK: imull %ecx, %eax 215 imull %ecx, %eax 216 217 218 // rdar://8208481 219 // CHECK: outb %al, $161 220 outb %al, $161 221 // CHECK: outw %ax, $128 222 outw %ax, $128 223 // CHECK: inb $161, %al 224 inb $161, %al 225 226 // rdar://8017621 227 // CHECK: pushq $1 228 push $1 229 230 // rdar://9716860 231 pushq $1 232 // CHECK: encoding: [0x6a,0x01] 233 pushq $1111111 234 // CHECK: encoding: [0x68,0x47,0xf4,0x10,0x00] 235 236 // rdar://8017530 237 // CHECK: sldtw 4 238 sldt 4 239 240 // rdar://8208499 241 // CHECK: cmovnew %bx, %ax 242 cmovnz %bx, %ax 243 // CHECK: cmovneq %rbx, %rax 244 cmovnzq %rbx, %rax 245 246 247 // rdar://8407928 248 // CHECK: inb $127, %al 249 // CHECK: inw %dx, %ax 250 // CHECK: outb %al, $127 251 // CHECK: outw %ax, %dx 252 // CHECK: inl %dx, %eax 253 inb $0x7f 254 inw %dx 255 outb $0x7f 256 outw %dx 257 inl %dx 258 259 260 // PR8114 261 // CHECK: outb %al, %dx 262 // CHECK: outb %al, %dx 263 // CHECK: outw %ax, %dx 264 // CHECK: outw %ax, %dx 265 // CHECK: outl %eax, %dx 266 // CHECK: outl %eax, %dx 267 268 out %al, (%dx) 269 outb %al, (%dx) 270 out %ax, (%dx) 271 outw %ax, (%dx) 272 out %eax, (%dx) 273 outl %eax, (%dx) 274 275 // CHECK: inb %dx, %al 276 // CHECK: inb %dx, %al 277 // CHECK: inw %dx, %ax 278 // CHECK: inw %dx, %ax 279 // CHECK: inl %dx, %eax 280 // CHECK: inl %dx, %eax 281 282 in (%dx), %al 283 inb (%dx), %al 284 in (%dx), %ax 285 inw (%dx), %ax 286 in (%dx), %eax 287 inl (%dx), %eax 288 289 //PR15455 290 291 outsb (%rsi), (%dx) 292 // CHECK: outsb (%rsi), %dx 293 outsw (%rsi), (%dx) 294 // CHECK: outsw (%rsi), %dx 295 outsl (%rsi), (%dx) 296 // CHECK: outsl (%rsi), %dx 297 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 344 fnstsw 345 fnstsw %ax 346 347 // rdar://8431880 348 // CHECK: rclb %bl 349 // CHECK: rcll 3735928559(%ebx,%ecx,8) 350 // CHECK: rcrl %ecx 351 // CHECK: rcrl 305419896 352 rcl %bl 353 rcll 0xdeadbeef(%ebx,%ecx,8) 354 rcr %ecx 355 rcrl 0x12345678 356 357 rclb %bl // CHECK: rclb %bl # encoding: [0xd0,0xd3] 358 rclb $1, %bl // CHECK: rclb %bl # encoding: [0xd0,0xd3] 359 rclb $2, %bl // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02] 360 361 // rdar://8418316 362 // PR12173 363 // CHECK: shldw %cl, %bx, %dx 364 // CHECK: shldw %cl, %bx, %dx 365 // CHECK: shldw $1, %bx, %dx 366 // CHECK: shldw %cl, %bx, (%rax) 367 // CHECK: shldw %cl, %bx, (%rax) 368 // CHECK: shrdw %cl, %bx, %dx 369 // CHECK: shrdw %cl, %bx, %dx 370 // CHECK: shrdw $1, %bx, %dx 371 // CHECK: shrdw %cl, %bx, (%rax) 372 // CHECK: shrdw %cl, %bx, (%rax) 373 374 shld %bx, %dx 375 shld %cl, %bx, %dx 376 shld $1, %bx, %dx 377 shld %bx, (%rax) 378 shld %cl, %bx, (%rax) 379 shrd %bx, %dx 380 shrd %cl, %bx, %dx 381 shrd $1, %bx, %dx 382 shrd %bx, (%rax) 383 shrd %cl, %bx, (%rax) 384 385 // CHECK: sldtl %ecx 386 // CHECK: encoding: [0x0f,0x00,0xc1] 387 // CHECK: sldtw %cx 388 // CHECK: encoding: [0x66,0x0f,0x00,0xc1] 389 390 sldt %ecx 391 sldt %cx 392 393 // CHECK: lcalll *3135175374 394 // CHECK: ljmpl *3135175374 395 // CHECK: lcalll *(%rax) 396 // CHECK: ljmpl *(%rax) 397 lcall *0xbadeface 398 ljmp *0xbadeface 399 lcall *(%rax) 400 ljmpl *(%rax) 401 402 // rdar://8444631 403 // CHECK: enter $31438, $0 404 // CHECK: encoding: [0xc8,0xce,0x7a,0x00] 405 // CHECK: enter $31438, $1 406 // CHECK: encoding: [0xc8,0xce,0x7a,0x01] 407 // CHECK: enter $31438, $127 408 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f] 409 enter $0x7ace,$0 410 enter $0x7ace,$1 411 enter $0x7ace,$0x7f 412 413 414 // rdar://8456364 415 // CHECK: movw %cs, %ax 416 mov %cs, %ax 417 418 // rdar://8456391 419 fcmovb %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0) 420 fcmove %st(1), %st(0) // CHECK: fcmove %st(1), %st(0) 421 fcmovbe %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0) 422 fcmovu %st(1), %st(0) // CHECK: fcmovu %st(1), %st(0) 423 424 fcmovnb %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0) 425 fcmovne %st(1), %st(0) // CHECK: fcmovne %st(1), %st(0) 426 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0) 427 fcmovnu %st(1), %st(0) // CHECK: fcmovnu %st(1), %st(0) 428 429 fcmovnae %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0) 430 fcmovna %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0) 431 432 fcmovae %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0) 433 fcmova %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0) 434 435 // rdar://8456417 436 .byte (88 + 1) & 15 // CHECK: .byte 9 437 438 // rdar://8456412 439 mov %rdx, %cr0 440 // CHECK: movq %rdx, %cr0 441 // CHECK: encoding: [0x0f,0x22,0xc2] 442 mov %rdx, %cr4 443 // CHECK: movq %rdx, %cr4 444 // CHECK: encoding: [0x0f,0x22,0xe2] 445 mov %rdx, %cr8 446 // CHECK: movq %rdx, %cr8 447 // CHECK: encoding: [0x44,0x0f,0x22,0xc2] 448 mov %rdx, %cr15 449 // CHECK: movq %rdx, %cr15 450 // CHECK: encoding: [0x44,0x0f,0x22,0xfa] 451 mov %rdx, %dr15 452 // CHECK: movq %rdx, %dr15 453 // CHECK: encoding: [0x44,0x0f,0x23,0xfa] 454 mov %rdx, %db15 455 // CHECK: movq %rdx, %dr15 456 // CHECK: encoding: [0x44,0x0f,0x23,0xfa] 457 458 // rdar://8456371 - Handle commutable instructions written backward. 459 // CHECK: faddp %st(1) 460 // CHECK: fmulp %st(2) 461 faddp %st, %st(1) 462 fmulp %st, %st(2) 463 464 // rdar://8468087 - Encode these accurately, they are not synonyms. 465 // CHECK: fmul %st(0), %st(1) 466 // CHECK: encoding: [0xdc,0xc9] 467 // CHECK: fmul %st(1) 468 // CHECK: encoding: [0xd8,0xc9] 469 fmul %st, %st(1) 470 fmul %st(1), %st 471 472 // CHECK: fadd %st(0), %st(1) 473 // CHECK: encoding: [0xdc,0xc1] 474 // CHECK: fadd %st(1) 475 // CHECK: encoding: [0xd8,0xc1] 476 fadd %st, %st(1) 477 fadd %st(1), %st 478 479 480 // rdar://8416805 481 // CHECK: xorb %al, %al 482 // CHECK: encoding: [0x30,0xc0] 483 // CHECK: xorw %di, %di 484 // CHECK: encoding: [0x66,0x31,0xff] 485 // CHECK: xorl %esi, %esi 486 // CHECK: encoding: [0x31,0xf6] 487 // CHECK: xorq %rsi, %rsi 488 // CHECK: encoding: [0x48,0x31,0xf6] 489 clrb %al 490 clr %di 491 clr %esi 492 clr %rsi 493 494 // rdar://8456378 495 cltq // CHECK: cltq 496 cdqe // CHECK: cltq 497 cwde // CHECK: cwtl 498 cwtl // CHECK: cwtl 499 500 // rdar://8416805 501 cbw // CHECK: cbtw 502 cwd // CHECK: cwtd 503 cdq // CHECK: cltd 504 cqo // CHECK: cqto 505 506 // rdar://8456378 and PR7557 - fstsw 507 fstsw %ax 508 // CHECK: wait 509 // CHECK: fnstsw 510 fstsw (%rax) 511 // CHECK: wait 512 // CHECK: fnstsw (%rax) 513 514 // PR8259 515 fstcw (%rsp) 516 // CHECK: wait 517 // CHECK: fnstcw (%rsp) 518 519 // PR8259 520 fstcw (%rsp) 521 // CHECK: wait 522 // CHECK: fnstcw (%rsp) 523 524 // PR8258 525 finit 526 // CHECK: wait 527 // CHECK: fninit 528 529 fsave 32493 530 // CHECK: wait 531 // CHECK: fnsave 32493 532 533 534 // rdar://8456382 - cvtsd2si support. 535 cvtsd2si %xmm1, %rax 536 // CHECK: cvtsd2si %xmm1, %rax 537 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1] 538 cvtsd2si %xmm1, %eax 539 // CHECK: cvtsd2si %xmm1, %eax 540 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1] 541 542 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2si %xmm0, %rax 543 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2si %xmm0, %eax 544 cvtsd2si %xmm0, %rax // CHECK: cvtsd2si %xmm0, %rax 545 546 547 cvttpd2dq %xmm1, %xmm0 // CHECK: cvttpd2dq %xmm1, %xmm0 548 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0 549 550 cvttps2dq %xmm1, %xmm0 // CHECK: cvttps2dq %xmm1, %xmm0 551 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0 552 553 // rdar://8456376 - llvm-mc rejects 'roundss' 554 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e] 555 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e] 556 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e] 557 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e] 558 559 560 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix) 561 leal 8(%eax), %esi 562 // CHECK: leal 8(%eax), %esi 563 // CHECK: encoding: [0x67,0x8d,0x70,0x08] 564 leaq 8(%eax), %rsi 565 // CHECK: leaq 8(%eax), %rsi 566 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08] 567 leaq 8(%rax), %rsi 568 // CHECK: leaq 8(%rax), %rsi 569 // CHECK: encoding: [0x48,0x8d,0x70,0x08] 570 571 572 cvttpd2dq 0xdeadbeef(%ebx,%ecx,8),%xmm5 573 // CHECK: cvttpd2dq 3735928559(%ebx,%ecx,8), %xmm5 574 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde] 575 576 // rdar://8490728 - llvm-mc rejects 'movmskpd' 577 movmskpd %xmm6, %rax 578 // CHECK: movmskpd %xmm6, %eax 579 // CHECK: encoding: [0x66,0x0f,0x50,0xc6] 580 movmskpd %xmm6, %eax 581 // CHECK: movmskpd %xmm6, %eax 582 // CHECK: encoding: [0x66,0x0f,0x50,0xc6] 583 584 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions. 585 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9] 586 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9] 587 588 fsubrp %st(0), %st(1) // CHECK: encoding: [0xde,0xe9] 589 fsubrp %st(1), %st(0) // CHECK: encoding: [0xde,0xe9] 590 591 // also PR8861 592 fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1] 593 fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1] 594 595 596 movl foo(%rip), %eax 597 // CHECK: movl foo(%rip), %eax 598 // CHECK: encoding: [0x8b,0x05,A,A,A,A] 599 // CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte 600 601 movb $12, foo(%rip) 602 // CHECK: movb $12, foo(%rip) 603 // CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c] 604 // CHECK: fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte 605 606 movw $12, foo(%rip) 607 // CHECK: movw $12, foo(%rip) 608 // CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00] 609 // CHECK: fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte 610 611 movl $12, foo(%rip) 612 // CHECK: movl $12, foo(%rip) 613 // CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 614 // CHECK: fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte 615 616 // rdar://37247000 617 movl $12, 1024(%rip) 618 // CHECK: movl $12, 1024(%rip) 619 // CHECK: encoding: [0xc7,0x05,0x00,0x04,0x00,0x00,0x0c,0x00,0x00,0x00] 620 621 movq $12, foo(%rip) 622 // CHECK: movq $12, foo(%rip) 623 // CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 624 // CHECK: fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte 625 626 movl foo(%eip), %eax 627 // CHECK: movl foo(%eip), %eax 628 // CHECK: encoding: [0x67,0x8b,0x05,A,A,A,A] 629 // CHECK: fixup A - offset: 3, value: foo-4, kind: reloc_riprel_4byte 630 631 movb $12, foo(%eip) 632 // CHECK: movb $12, foo(%eip) 633 // CHECK: encoding: [0x67,0xc6,0x05,A,A,A,A,0x0c] 634 // CHECK: fixup A - offset: 3, value: foo-5, kind: reloc_riprel_4byte 635 636 movw $12, foo(%eip) 637 // CHECK: movw $12, foo(%eip) 638 // CHECK: encoding: [0x67,0x66,0xc7,0x05,A,A,A,A,0x0c,0x00] 639 // CHECK: fixup A - offset: 4, value: foo-6, kind: reloc_riprel_4byte 640 641 movl $12, foo(%eip) 642 // CHECK: movl $12, foo(%eip) 643 // CHECK: encoding: [0x67,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 644 // CHECK: fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte 645 646 movq $12, foo(%eip) 647 // CHECK: movq $12, foo(%eip) 648 // CHECK: encoding: [0x67,0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00] 649 // CHECK: fixup A - offset: 4, value: foo-8, kind: reloc_riprel_4byte 650 651 // CHECK: addq $-424, %rax 652 // CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff] 653 addq $-424, %rax 654 655 656 // CHECK: movq _foo@GOTPCREL(%rip), %rax 657 // CHECK: encoding: [0x48,0x8b,0x05,A,A,A,A] 658 // CHECK: fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 659 movq _foo@GOTPCREL(%rip), %rax 660 661 // CHECK: movq _foo@GOTPCREL(%rip), %r14 662 // CHECK: encoding: [0x4c,0x8b,0x35,A,A,A,A] 663 // CHECK: fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 664 movq _foo@GOTPCREL(%rip), %r14 665 666 // CHECK: movq _foo@GOTPCREL(%eip), %rax 667 // CHECK: encoding: [0x67,0x48,0x8b,0x05,A,A,A,A] 668 // CHECK: fixup A - offset: 4, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 669 movq _foo@GOTPCREL(%eip), %rax 670 671 // CHECK: movq _foo@GOTPCREL(%eip), %r14 672 // CHECK: encoding: [0x67,0x4c,0x8b,0x35,A,A,A,A] 673 // CHECK: fixup A - offset: 4, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load 674 movq _foo@GOTPCREL(%eip), %r14 675 676 // CHECK: movq (%r13,%rax,8), %r13 677 // CHECK: encoding: [0x4d,0x8b,0x6c,0xc5,0x00] 678 movq 0x00(%r13,%rax,8),%r13 679 680 // CHECK: testq %rax, %rbx 681 // CHECK: encoding: [0x48,0x85,0xc3] 682 testq %rax, %rbx 683 684 // CHECK: cmpq %rbx, %r14 685 // CHECK: encoding: [0x49,0x39,0xde] 686 cmpq %rbx, %r14 687 688 // rdar://7947167 689 690 movsq 691 // CHECK: movsq 692 // CHECK: encoding: [0x48,0xa5] 693 694 movsl 695 // CHECK: movsl 696 // CHECK: encoding: [0xa5] 697 698 stosq 699 // CHECK: stosq 700 // CHECK: encoding: [0x48,0xab] 701 stosl 702 // CHECK: stosl 703 // CHECK: encoding: [0xab] 704 705 706 // Not moffset forms of moves, they are x86-32 only! rdar://7947184 707 movb 0, %al // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00] 708 movw 0, %ax // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00] 709 movl 0, %eax // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00] 710 711 // CHECK: pushfq # encoding: [0x9c] 712 pushf 713 // CHECK: pushfq # encoding: [0x9c] 714 pushfq 715 // CHECK: popfq # encoding: [0x9d] 716 popf 717 // CHECK: popfq # encoding: [0x9d] 718 popfq 719 720 // CHECK: movabsq $-281474976710654, %rax 721 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff] 722 movabsq $0xFFFF000000000002, %rax 723 724 // CHECK: movabsq $-281474976710654, %rax 725 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff] 726 movq $0xFFFF000000000002, %rax 727 728 // CHECK: movq $-65536, %rax 729 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff] 730 movq $0xFFFFFFFFFFFF0000, %rax 731 732 // CHECK: movq $-256, %rax 733 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff] 734 movq $0xFFFFFFFFFFFFFF00, %rax 735 736 // CHECK: movq $10, %rax 737 // CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00] 738 movq $10, %rax 739 740 // CHECK: movabsb -6066930261531658096, %al 741 // CHECK: encoding: [0xa0,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 742 movabsb 0xabcdef1234567890,%al 743 744 // CHECK: movabsw -6066930261531658096, %ax 745 // CHECK: encoding: [0x66,0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 746 movabsw 0xabcdef1234567890,%ax 747 748 // CHECK: movabsl -6066930261531658096, %eax 749 // CHECK: encoding: [0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 750 movabsl 0xabcdef1234567890,%eax 751 752 // CHECK: movabsq -6066930261531658096, %rax 753 // CHECK: encoding: [0x48,0xa1,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 754 movabsq 0xabcdef1234567890, %rax 755 756 // CHECK: movabsb %al, -6066930261531658096 757 // CHECK: encoding: [0xa2,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 758 movabsb %al,0xabcdef1234567890 759 760 // CHECK: movabsw %ax, -6066930261531658096 761 // CHECK: encoding: [0x66,0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 762 movabsw %ax,0xabcdef1234567890 763 764 // CHECK: movabsl %eax, -6066930261531658096 765 // CHECK: encoding: [0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 766 movabsl %eax,0xabcdef1234567890 767 768 // CHECK: movabsq %rax, -6066930261531658096 769 // CHECK: encoding: [0x48,0xa3,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab] 770 movabsq %rax,0xabcdef1234567890 771 772 // rdar://8014869 773 // 774 // CHECK: ret 775 // CHECK: encoding: [0xc3] 776 retq 777 778 // CHECK: sete %al 779 // CHECK: encoding: [0x0f,0x94,0xc0] 780 setz %al 781 782 // CHECK: setne %al 783 // CHECK: encoding: [0x0f,0x95,0xc0] 784 setnz %al 785 786 // CHECK: je 0 787 // CHECK: encoding: [0x74,A] 788 jz 0 789 790 // CHECK: jne 791 // CHECK: encoding: [0x75,A] 792 jnz 0 793 794 // PR9264 795 btl $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01] 796 bt $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01] 797 798 // rdar://8017515 799 btq $0x01,%rdx 800 // CHECK: btq $1, %rdx 801 // CHECK: encoding: [0x48,0x0f,0xba,0xe2,0x01] 802 803 //rdar://8017633 804 // CHECK: movzbl %al, %esi 805 // CHECK: encoding: [0x0f,0xb6,0xf0] 806 movzx %al, %esi 807 808 // CHECK: movzbq %al, %rsi 809 // CHECK: encoding: [0x48,0x0f,0xb6,0xf0] 810 movzx %al, %rsi 811 812 // CHECK: movsbw %al, %ax 813 // CHECK: encoding: [0x66,0x0f,0xbe,0xc0] 814 movsx %al, %ax 815 816 // CHECK: movsbl %al, %eax 817 // CHECK: encoding: [0x0f,0xbe,0xc0] 818 movsx %al, %eax 819 820 // CHECK: movswl %ax, %eax 821 // CHECK: encoding: [0x0f,0xbf,0xc0] 822 movsx %ax, %eax 823 824 // CHECK: movsbq %bl, %rax 825 // CHECK: encoding: [0x48,0x0f,0xbe,0xc3] 826 movsx %bl, %rax 827 828 // CHECK: movswq %cx, %rax 829 // CHECK: encoding: [0x48,0x0f,0xbf,0xc1] 830 movsx %cx, %rax 831 832 // CHECK: movslq %edi, %rax 833 // CHECK: encoding: [0x48,0x63,0xc7] 834 movsx %edi, %rax 835 836 // CHECK: movzbw %al, %ax 837 // CHECK: encoding: [0x66,0x0f,0xb6,0xc0] 838 movzx %al, %ax 839 840 // CHECK: movzbl %al, %eax 841 // CHECK: encoding: [0x0f,0xb6,0xc0] 842 movzx %al, %eax 843 844 // CHECK: movzwl %ax, %eax 845 // CHECK: encoding: [0x0f,0xb7,0xc0] 846 movzx %ax, %eax 847 848 // CHECK: movzbq %bl, %rax 849 // CHECK: encoding: [0x48,0x0f,0xb6,0xc3] 850 movzx %bl, %rax 851 852 // CHECK: movzwq %cx, %rax 853 // CHECK: encoding: [0x48,0x0f,0xb7,0xc1] 854 movzx %cx, %rax 855 856 // CHECK: movsbw (%rax), %ax 857 // CHECK: encoding: [0x66,0x0f,0xbe,0x00] 858 movsx (%rax), %ax 859 860 // CHECK: movzbw (%rax), %ax 861 // CHECK: encoding: [0x66,0x0f,0xb6,0x00] 862 movzx (%rax), %ax 863 864 865 // rdar://7873482 866 // CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00] 867 movl %gs:124, %eax 868 869 // CHECK: jmpq *8(%rax) 870 // CHECK: encoding: [0xff,0x60,0x08] 871 jmp *8(%rax) 872 873 // CHECK: btq $61, -216(%rbp) 874 // CHECK: encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d] 875 btq $61, -216(%rbp) 876 877 878 // rdar://8061602 879 L1: 880 jecxz L1 881 // CHECK: jecxz L1 882 // CHECK: encoding: [0x67,0xe3,A] 883 jrcxz L1 884 // CHECK: jrcxz L1 885 // CHECK: encoding: [0xe3,A] 886 887 // PR8061 888 xchgl 368(%rax),%ecx 889 // CHECK: xchgl %ecx, 368(%rax) 890 xchgl %ecx, 368(%rax) 891 // CHECK: xchgl %ecx, 368(%rax) 892 893 // rdar://8407548 894 xchg 0xdeadbeef(%rbx,%rcx,8),%bl 895 // CHECK: xchgb %bl, 3735928559(%rbx,%rcx,8) 896 897 898 899 // PR7254 900 lock incl 1(%rsp) 901 // CHECK: lock 902 // CHECK: incl 1(%rsp) 903 904 // rdar://8741045 905 lock/incl 1(%rsp) 906 // CHECK: lock 907 // CHECK: incl 1(%rsp) 908 909 910 lock addq %rsi, (%rdi) 911 // CHECK: lock 912 // CHECK: addq %rsi, (%rdi) 913 // CHECK: encoding: [0xf0,0x48,0x01,0x37] 914 915 lock subq %rsi, (%rdi) 916 // CHECK: lock 917 // CHECK: subq %rsi, (%rdi) 918 // CHECK: encoding: [0xf0,0x48,0x29,0x37] 919 920 lock andq %rsi, (%rdi) 921 // CHECK: lock 922 // CHECK: andq %rsi, (%rdi) 923 // CHECK: encoding: [0xf0,0x48,0x21,0x37] 924 925 lock orq %rsi, (%rdi) 926 // CHECK: lock 927 // CHECK: orq %rsi, (%rdi) 928 // CHECK: encoding: [0xf0,0x48,0x09,0x37] 929 930 lock xorq %rsi, (%rdi) 931 // CHECK: lock 932 // CHECK: xorq %rsi, (%rdi) 933 // CHECK: encoding: [0xf0,0x48,0x31,0x37] 934 935 xacquire lock addq %rax, (%rax) 936 // CHECK: xacquire 937 // CHECK: encoding: [0xf2] 938 // CHECK: lock 939 // CHECK: addq %rax, (%rax) 940 // CHECK: encoding: [0xf0,0x48,0x01,0x00] 941 942 xrelease lock addq %rax, (%rax) 943 // CHECK: xrelease 944 // CHECK: encoding: [0xf3] 945 // CHECK: lock 946 // CHECK: addq %rax, (%rax) 947 // CHECK: encoding: [0xf0,0x48,0x01,0x00] 948 949 // rdar://8033482 950 rep movsl 951 // CHECK: rep 952 // CHECK: movsl 953 // CHECK: encoding: [0xf3,0xa5] 954 955 956 // rdar://8403974 957 iret 958 // CHECK: iretl 959 // CHECK: encoding: [0xcf] 960 iretw 961 // CHECK: iretw 962 // CHECK: encoding: [0x66,0xcf] 963 iretl 964 // CHECK: iretl 965 // CHECK: encoding: [0xcf] 966 iretq 967 // CHECK: iretq 968 // CHECK: encoding: [0x48,0xcf] 969 970 // rdar://8416805 971 // CHECK: retw $31438 972 // CHECK: encoding: [0x66,0xc2,0xce,0x7a] 973 retw $0x7ace 974 975 // CHECK: lretw $31438 976 // CHECK: encoding: [0x66,0xca,0xce,0x7a] 977 lretw $0x7ace 978 979 // PR8592 980 lretq // CHECK: lretq # encoding: [0x48,0xcb] 981 lretl // CHECK: lretl # encoding: [0xcb] 982 lret // CHECK: lretl # encoding: [0xcb] 983 lretw // CHECK: lretw # encoding: [0x66,0xcb] 984 985 // rdar://8403907 986 sysret 987 // CHECK: sysretl 988 // CHECK: encoding: [0x0f,0x07] 989 sysretl 990 // CHECK: sysretl 991 // CHECK: encoding: [0x0f,0x07] 992 sysretq 993 // CHECK: sysretq 994 // CHECK: encoding: [0x48,0x0f,0x07] 995 996 // rdar://8407242 997 push %fs 998 // CHECK: pushq %fs 999 // CHECK: encoding: [0x0f,0xa0] 1000 push %gs 1001 // CHECK: pushq %gs 1002 // CHECK: encoding: [0x0f,0xa8] 1003 1004 pushw %fs 1005 // CHECK: pushw %fs 1006 // CHECK: encoding: [0x66,0x0f,0xa0] 1007 pushw %gs 1008 // CHECK: pushw %gs 1009 // CHECK: encoding: [0x66,0x0f,0xa8] 1010 1011 1012 pop %fs 1013 // CHECK: popq %fs 1014 // CHECK: encoding: [0x0f,0xa1] 1015 pop %gs 1016 // CHECK: popq %gs 1017 // CHECK: encoding: [0x0f,0xa9] 1018 1019 popw %fs 1020 // CHECK: popw %fs 1021 // CHECK: encoding: [0x66,0x0f,0xa1] 1022 popw %gs 1023 // CHECK: popw %gs 1024 // CHECK: encoding: [0x66,0x0f,0xa9] 1025 1026 // rdar://8438816 1027 fildq -8(%rsp) 1028 fildll -8(%rsp) 1029 // CHECK: fildll -8(%rsp) 1030 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8] 1031 // CHECK: fildll -8(%rsp) 1032 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8] 1033 1034 // CHECK: callq a 1035 callq a 1036 1037 // CHECK: leaq -40(%rbp), %r15 1038 leaq -40(%rbp), %r15 1039 1040 1041 1042 // rdar://8013734 - Alias dr6=db6 1043 mov %dr6, %rax 1044 mov %db6, %rax 1045 // CHECK: movq %dr6, %rax 1046 // CHECK: movq %dr6, %rax 1047 1048 1049 // INC/DEC encodings. 1050 incb %al // CHECK: incb %al # encoding: [0xfe,0xc0] 1051 incw %ax // CHECK: incw %ax # encoding: [0x66,0xff,0xc0] 1052 incl %eax // CHECK: incl %eax # encoding: [0xff,0xc0] 1053 decb %al // CHECK: decb %al # encoding: [0xfe,0xc8] 1054 decw %ax // CHECK: decw %ax # encoding: [0x66,0xff,0xc8] 1055 decl %eax // CHECK: decl %eax # encoding: [0xff,0xc8] 1056 1057 // rdar://8416805 1058 // CHECK: lgdtq 4(%rax) 1059 // CHECK: encoding: [0x0f,0x01,0x50,0x04] 1060 lgdt 4(%rax) 1061 1062 // CHECK: lgdtq 4(%rax) 1063 // CHECK: encoding: [0x0f,0x01,0x50,0x04] 1064 lgdtq 4(%rax) 1065 1066 // CHECK: lidtq 4(%rax) 1067 // CHECK: encoding: [0x0f,0x01,0x58,0x04] 1068 lidt 4(%rax) 1069 1070 // CHECK: lidtq 4(%rax) 1071 // CHECK: encoding: [0x0f,0x01,0x58,0x04] 1072 lidtq 4(%rax) 1073 1074 // CHECK: sgdtq 4(%rax) 1075 // CHECK: encoding: [0x0f,0x01,0x40,0x04] 1076 sgdt 4(%rax) 1077 1078 // CHECK: sgdtq 4(%rax) 1079 // CHECK: encoding: [0x0f,0x01,0x40,0x04] 1080 sgdtq 4(%rax) 1081 1082 // CHECK: sidtq 4(%rax) 1083 // CHECK: encoding: [0x0f,0x01,0x48,0x04] 1084 sidt 4(%rax) 1085 1086 // CHECK: sidtq 4(%rax) 1087 // CHECK: encoding: [0x0f,0x01,0x48,0x04] 1088 sidtq 4(%rax) 1089 1090 1091 // rdar://8208615 1092 mov (%rsi), %gs // CHECK: movw (%rsi), %gs # encoding: [0x8e,0x2e] 1093 mov %gs, (%rsi) // CHECK: movw %gs, (%rsi) # encoding: [0x8c,0x2e] 1094 1095 1096 // rdar://8431864 1097 //CHECK: divb %bl 1098 //CHECK: divw %bx 1099 //CHECK: divl %ecx 1100 //CHECK: divl 3735928559(%ebx,%ecx,8) 1101 //CHECK: divl 69 1102 //CHECK: divl 32493 1103 //CHECK: divl 3133065982 1104 //CHECK: divl 305419896 1105 //CHECK: idivb %bl 1106 //CHECK: idivw %bx 1107 //CHECK: idivl %ecx 1108 //CHECK: idivl 3735928559(%ebx,%ecx,8) 1109 //CHECK: idivl 69 1110 //CHECK: idivl 32493 1111 //CHECK: idivl 3133065982 1112 //CHECK: idivl 305419896 1113 div %bl,%al 1114 div %bx,%ax 1115 div %ecx,%eax 1116 div 0xdeadbeef(%ebx,%ecx,8),%eax 1117 div 0x45,%eax 1118 div 0x7eed,%eax 1119 div 0xbabecafe,%eax 1120 div 0x12345678,%eax 1121 idiv %bl,%al 1122 idiv %bx,%ax 1123 idiv %ecx,%eax 1124 idiv 0xdeadbeef(%ebx,%ecx,8),%eax 1125 idiv 0x45,%eax 1126 idiv 0x7eed,%eax 1127 idiv 0xbabecafe,%eax 1128 idiv 0x12345678,%eax 1129 1130 // PR8524 1131 movd %rax, %mm5 // CHECK: movq %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8] 1132 movd %mm5, %rbx // CHECK: movq %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb] 1133 movq %rax, %mm5 // CHECK: movq %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8] 1134 movq %mm5, %rbx // CHECK: movq %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb] 1135 1136 rex64 // CHECK: rex64 # encoding: [0x48] 1137 data16 // CHECK: data16 # encoding: [0x66] 1138 1139 // CHECK: data16 1140 // CHECK: encoding: [0x66] 1141 // CHECK: lgdtq 4(%rax) 1142 // CHECK: encoding: [0x0f,0x01,0x50,0x04] 1143 data16 lgdt 4(%rax) 1144 1145 // PR8855 1146 movq 18446744073709551615,%rbx // CHECK: movq -1, %rbx 1147 1148 // PR8946 1149 movdqu %xmm0, %xmm1 // CHECK: movdqu %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8] 1150 1151 // PR8935 1152 xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0] 1153 xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1] 1154 1155 // CHECK: loope 0 1156 // CHECK: encoding: [0xe1,A] 1157 loopz 0 1158 1159 // CHECK: loopne 0 1160 // CHECK: encoding: [0xe0,A] 1161 loopnz 0 1162 1163 // CHECK: outsb (%rsi), %dx # encoding: [0x6e] 1164 // CHECK: outsb 1165 // CHECK: outsb 1166 outsb 1167 outsb %ds:(%rsi), %dx 1168 outsb (%rsi), %dx 1169 1170 // CHECK: outsw (%rsi), %dx # encoding: [0x66,0x6f] 1171 // CHECK: outsw 1172 // CHECK: outsw 1173 outsw 1174 outsw %ds:(%rsi), %dx 1175 outsw (%rsi), %dx 1176 1177 // CHECK: outsl (%rsi), %dx # encoding: [0x6f] 1178 // CHECK: outsl 1179 outsl 1180 outsl %ds:(%rsi), %dx 1181 outsl (%rsi), %dx 1182 1183 // CHECK: insb %dx, %es:(%rdi) # encoding: [0x6c] 1184 // CHECK: insb 1185 insb 1186 insb %dx, %es:(%rdi) 1187 1188 // CHECK: insw %dx, %es:(%rdi) # encoding: [0x66,0x6d] 1189 // CHECK: insw 1190 insw 1191 insw %dx, %es:(%rdi) 1192 1193 // CHECK: insl %dx, %es:(%rdi) # encoding: [0x6d] 1194 // CHECK: insl 1195 insl 1196 insl %dx, %es:(%rdi) 1197 1198 // CHECK: movsb (%rsi), %es:(%rdi) # encoding: [0xa4] 1199 // CHECK: movsb 1200 // CHECK: movsb 1201 movsb 1202 movsb %ds:(%rsi), %es:(%rdi) 1203 movsb (%rsi), %es:(%rdi) 1204 1205 // CHECK: movsw (%rsi), %es:(%rdi) # encoding: [0x66,0xa5] 1206 // CHECK: movsw 1207 // CHECK: movsw 1208 movsw 1209 movsw %ds:(%rsi), %es:(%rdi) 1210 movsw (%rsi), %es:(%rdi) 1211 1212 // CHECK: movsl (%rsi), %es:(%rdi) # encoding: [0xa5] 1213 // CHECK: movsl 1214 // CHECK: movsl 1215 movsl 1216 movsl %ds:(%rsi), %es:(%rdi) 1217 movsl (%rsi), %es:(%rdi) 1218 // rdar://10883092 1219 // CHECK: movsl 1220 movsl (%rsi), (%rdi) 1221 1222 // CHECK: movsq (%rsi), %es:(%rdi) # encoding: [0x48,0xa5] 1223 // CHECK: movsq 1224 // CHECK: movsq 1225 movsq 1226 movsq %ds:(%rsi), %es:(%rdi) 1227 movsq (%rsi), %es:(%rdi) 1228 1229 // CHECK: lodsb (%rsi), %al # encoding: [0xac] 1230 // CHECK: lodsb 1231 // CHECK: lodsb 1232 // CHECK: lodsb 1233 // CHECK: lodsb 1234 lodsb 1235 lodsb %ds:(%rsi), %al 1236 lodsb (%rsi), %al 1237 lods %ds:(%rsi), %al 1238 lods (%rsi), %al 1239 1240 // CHECK: lodsw (%rsi), %ax # encoding: [0x66,0xad] 1241 // CHECK: lodsw 1242 // CHECK: lodsw 1243 // CHECK: lodsw 1244 // CHECK: lodsw 1245 lodsw 1246 lodsw %ds:(%rsi), %ax 1247 lodsw (%rsi), %ax 1248 lods %ds:(%rsi), %ax 1249 lods (%rsi), %ax 1250 1251 // CHECK: lodsl (%rsi), %eax # encoding: [0xad] 1252 // CHECK: lodsl 1253 // CHECK: lodsl 1254 // CHECK: lodsl 1255 // CHECK: lodsl 1256 lodsl 1257 lodsl %ds:(%rsi), %eax 1258 lodsl (%rsi), %eax 1259 lods %ds:(%rsi), %eax 1260 lods (%rsi), %eax 1261 1262 // CHECK: lodsq (%rsi), %rax # encoding: [0x48,0xad] 1263 // CHECK: lodsq 1264 // CHECK: lodsq 1265 // CHECK: lodsq 1266 // CHECK: lodsq 1267 lodsq 1268 lodsq %ds:(%rsi), %rax 1269 lodsq (%rsi), %rax 1270 lods %ds:(%rsi), %rax 1271 lods (%rsi), %rax 1272 1273 // CHECK: stosb %al, %es:(%rdi) # encoding: [0xaa] 1274 // CHECK: stosb 1275 // CHECK: stosb 1276 stosb 1277 stosb %al, %es:(%rdi) 1278 stos %al, %es:(%rdi) 1279 1280 // CHECK: stosw %ax, %es:(%rdi) # encoding: [0x66,0xab] 1281 // CHECK: stosw 1282 // CHECK: stosw 1283 stosw 1284 stosw %ax, %es:(%rdi) 1285 stos %ax, %es:(%rdi) 1286 1287 // CHECK: stosl %eax, %es:(%rdi) # encoding: [0xab] 1288 // CHECK: stosl 1289 // CHECK: stosl 1290 stosl 1291 stosl %eax, %es:(%rdi) 1292 stos %eax, %es:(%rdi) 1293 1294 // CHECK: stosq %rax, %es:(%rdi) # encoding: [0x48,0xab] 1295 // CHECK: stosq 1296 // CHECK: stosq 1297 stosq 1298 stosq %rax, %es:(%rdi) 1299 stos %rax, %es:(%rdi) 1300 1301 // CHECK: strw 1302 // CHECK: encoding: [0x66,0x0f,0x00,0xc8] 1303 str %ax 1304 1305 // CHECK: strl 1306 // CHECK: encoding: [0x0f,0x00,0xc8] 1307 str %eax 1308 1309 // CHECK: strw 1310 // CHECK: encoding: [0x66,0x0f,0x00,0xc8] 1311 str %ax 1312 1313 // CHECK: strq 1314 // CHECK: encoding: [0x48,0x0f,0x00,0xc8] 1315 str %rax 1316 1317 // CHECK: movq %rdi, %xmm0 1318 // CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7] 1319 movq %rdi,%xmm0 1320 1321 // CHECK: movq %xmm0, %rax 1322 // CHECK: encoding: [0x66,0x48,0x0f,0x7e,0xc0] 1323 movq %xmm0, %rax 1324 1325 // CHECK: movntil %eax, (%rdi) 1326 // CHECK: encoding: [0x0f,0xc3,0x07] 1327 // CHECK: movntil 1328 movntil %eax, (%rdi) 1329 movnti %eax, (%rdi) 1330 1331 // CHECK: movntiq %rax, (%rdi) 1332 // CHECK: encoding: [0x48,0x0f,0xc3,0x07] 1333 // CHECK: movntiq 1334 movntiq %rax, (%rdi) 1335 movnti %rax, (%rdi) 1336 1337 // CHECK: pclmulqdq $17, %xmm0, %xmm1 1338 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x11] 1339 pclmulhqhqdq %xmm0, %xmm1 1340 1341 // CHECK: pclmulqdq $1, %xmm0, %xmm1 1342 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x01] 1343 pclmulqdq $1, %xmm0, %xmm1 1344 1345 // CHECK: pclmulqdq $16, (%rdi), %xmm1 1346 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x10] 1347 pclmullqhqdq (%rdi), %xmm1 1348 1349 // CHECK: pclmulqdq $0, (%rdi), %xmm1 1350 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x00] 1351 pclmulqdq $0, (%rdi), %xmm1 1352 1353 // PR10345 1354 // CHECK: nop 1355 // CHECK: encoding: [0x90] 1356 xchgq %rax, %rax 1357 1358 // CHECK: xchgl %eax, %eax 1359 // CHECK: encoding: [0x87,0xc0] 1360 xchgl %eax, %eax 1361 1362 // CHECK: xchgw %ax, %ax 1363 // CHECK: encoding: [0x66,0x90] 1364 xchgw %ax, %ax 1365 1366 // CHECK: xchgl %ecx, %eax 1367 // CHECK: encoding: [0x91] 1368 xchgl %ecx, %eax 1369 1370 // CHECK: xchgl %ecx, %eax 1371 // CHECK: encoding: [0x91] 1372 xchgl %eax, %ecx 1373 1374 // CHECK: sysexit 1375 // CHECK: encoding: [0x0f,0x35] 1376 sysexit 1377 1378 // CHECK: sysexitl 1379 // CHECK: encoding: [0x0f,0x35] 1380 sysexitl 1381 1382 // CHECK: sysexitq 1383 // CHECK: encoding: [0x48,0x0f,0x35] 1384 sysexitq 1385 1386 // CHECK: clac 1387 // CHECK: encoding: [0x0f,0x01,0xca] 1388 clac 1389 1390 // CHECK: stac 1391 // CHECK: encoding: [0x0f,0x01,0xcb] 1392 stac 1393 1394 // CHECK: faddp %st(1) 1395 // CHECK: fmulp %st(1) 1396 // CHECK: fsubp %st(1) 1397 // CHECK: fsubrp %st(1) 1398 // CHECK: fdivp %st(1) 1399 // CHECK: fdivrp %st(1) 1400 faddp %st(0), %st(1) 1401 fmulp %st(0), %st(1) 1402 fsubp %st(0), %st(1) 1403 fsubrp %st(0), %st(1) 1404 fdivp %st(0), %st(1) 1405 fdivrp %st(0), %st(1) 1406 1407 // CHECK: faddp %st(1) 1408 // CHECK: fmulp %st(1) 1409 // CHECK: fsubp %st(1) 1410 // CHECK: fsubrp %st(1) 1411 // CHECK: fdivp %st(1) 1412 // CHECK: fdivrp %st(1) 1413 faddp %st(1), %st(0) 1414 fmulp %st(1), %st(0) 1415 fsubp %st(1), %st(0) 1416 fsubrp %st(1), %st(0) 1417 fdivp %st(1), %st(0) 1418 fdivrp %st(1), %st(0) 1419 1420 // CHECK: faddp %st(1) 1421 // CHECK: fmulp %st(1) 1422 // CHECK: fsubp %st(1) 1423 // CHECK: fsubrp %st(1) 1424 // CHECK: fdivp %st(1) 1425 // CHECK: fdivrp %st(1) 1426 faddp %st(1) 1427 fmulp %st(1) 1428 fsubp %st(1) 1429 fsubrp %st(1) 1430 fdivp %st(1) 1431 fdivrp %st(1) 1432 1433 // CHECK: faddp %st(1) 1434 // CHECK: fmulp %st(1) 1435 // CHECK: fsubp %st(1) 1436 // CHECK: fsubrp %st(1) 1437 // CHECK: fdivp %st(1) 1438 // CHECK: fdivrp %st(1) 1439 faddp 1440 fmulp 1441 fsubp 1442 fsubrp 1443 fdivp 1444 fdivrp 1445 1446 // CHECK: fadd %st(1) 1447 // CHECK: fmul %st(1) 1448 // CHECK: fsub %st(1) 1449 // CHECK: fsubr %st(1) 1450 // CHECK: fdiv %st(1) 1451 // CHECK: fdivr %st(1) 1452 fadd %st(1), %st(0) 1453 fmul %st(1), %st(0) 1454 fsub %st(1), %st(0) 1455 fsubr %st(1), %st(0) 1456 fdiv %st(1), %st(0) 1457 fdivr %st(1), %st(0) 1458 1459 // CHECK: fadd %st(0), %st(1) 1460 // CHECK: fmul %st(0), %st(1) 1461 // CHECK: fsub %st(0), %st(1) 1462 // CHECK: fsubr %st(0), %st(1) 1463 // CHECK: fdiv %st(0), %st(1) 1464 // CHECK: fdivr %st(0), %st(1) 1465 fadd %st(0), %st(1) 1466 fmul %st(0), %st(1) 1467 fsub %st(0), %st(1) 1468 fsubr %st(0), %st(1) 1469 fdiv %st(0), %st(1) 1470 fdivr %st(0), %st(1) 1471 1472 // CHECK: fadd %st(1) 1473 // CHECK: fmul %st(1) 1474 // CHECK: fsub %st(1) 1475 // CHECK: fsubr %st(1) 1476 // CHECK: fdiv %st(1) 1477 // CHECK: fdivr %st(1) 1478 fadd %st(1) 1479 fmul %st(1) 1480 fsub %st(1) 1481 fsubr %st(1) 1482 fdiv %st(1) 1483 fdivr %st(1) 1484 1485 // CHECK: movd %xmm0, %eax 1486 // CHECK: movq %xmm0, %rax 1487 // CHECK: movq %xmm0, %rax 1488 // CHECK: vmovd %xmm0, %eax 1489 // CHECK: vmovq %xmm0, %rax 1490 // CHECK: vmovq %xmm0, %rax 1491 movd %xmm0, %eax 1492 movq %xmm0, %rax 1493 movq %xmm0, %rax 1494 vmovd %xmm0, %eax 1495 vmovd %xmm0, %rax 1496 vmovq %xmm0, %rax 1497 1498 // CHECK: seto 3735928559(%r10,%r9,8) 1499 // CHECK: encoding: [0x43,0x0f,0x90,0x84,0xca,0xef,0xbe,0xad,0xde] 1500 seto 0xdeadbeef(%r10,%r9,8) 1501 1502 // CHECK: monitorx 1503 // CHECK: encoding: [0x0f,0x01,0xfa] 1504 monitorx 1505 1506 // CHECK: monitorx 1507 // CHECK: encoding: [0x0f,0x01,0xfa] 1508 monitorx %rax, %rcx, %rdx 1509 1510 // CHECK: mwaitx 1511 // CHECK: encoding: [0x0f,0x01,0xfb] 1512 mwaitx 1513 1514 // CHECK: mwaitx 1515 // CHECK: encoding: [0x0f,0x01,0xfb] 1516 mwaitx %rax, %rcx, %rbx 1517 1518 // CHECK: clzero 1519 // CHECK: encoding: [0x0f,0x01,0xfc] 1520 clzero 1521 1522 // CHECK: clzero 1523 // CHECK: encoding: [0x0f,0x01,0xfc] 1524 clzero %rax 1525 1526 // CHECK: movl %r15d, (%r15,%r15) 1527 // CHECK: encoding: [0x47,0x89,0x3c,0x3f] 1528 movl %r15d, (%r15,%r15) 1529 1530 // CHECK: nopq 3735928559(%rbx,%rcx,8) 1531 // CHECK: encoding: [0x48,0x0f,0x1f,0x84,0xcb,0xef,0xbe,0xad,0xde] 1532 nopq 0xdeadbeef(%rbx,%rcx,8) 1533 1534 // CHECK: nopq %rax 1535 // CHECK: encoding: [0x48,0x0f,0x1f,0xc0] 1536 nopq %rax 1537 1538 // CHECK: rdpid %rax 1539 // CHECK: encoding: [0xf3,0x0f,0xc7,0xf8] 1540 rdpid %rax 1541 1542 // CHECK: ptwritel 3735928559(%rbx,%rcx,8) 1543 // CHECK: encoding: [0xf3,0x0f,0xae,0xa4,0xcb,0xef,0xbe,0xad,0xde] 1544 ptwritel 0xdeadbeef(%rbx,%rcx,8) 1545 1546 // CHECK: ptwritel %eax 1547 // CHECK: encoding: [0xf3,0x0f,0xae,0xe0] 1548 ptwritel %eax 1549 1550 // CHECK: ptwriteq 3735928559(%rbx,%rcx,8) 1551 // CHECK: encoding: [0xf3,0x48,0x0f,0xae,0xa4,0xcb,0xef,0xbe,0xad,0xde] 1552 ptwriteq 0xdeadbeef(%rbx,%rcx,8) 1553 1554 // CHECK: ptwriteq %rax 1555 // CHECK: encoding: [0xf3,0x48,0x0f,0xae,0xe0] 1556 ptwriteq %rax 1557 1558 // CHECK: wbnoinvd 1559 // CHECK: encoding: [0xf3,0x0f,0x09] 1560 wbnoinvd 1561 1562 // CHECK: cldemote 4(%rax) 1563 // CHECK: encoding: [0x0f,0x1c,0x40,0x04] 1564 cldemote 4(%rax) 1565 1566 // CHECK: cldemote 3735928559(%rbx,%rcx,8) 1567 // CHECK: encoding: [0x0f,0x1c,0x84,0xcb,0xef,0xbe,0xad,0xde] 1568 cldemote 0xdeadbeef(%rbx,%rcx,8) 1569 1570 // CHECK: umonitor %r13 1571 // CHECK: encoding: [0xf3,0x41,0x0f,0xae,0xf5] 1572 umonitor %r13 1573 1574 // CHECK: umonitor %rax 1575 // CHECK: encoding: [0xf3,0x0f,0xae,0xf0] 1576 umonitor %rax 1577 1578 // CHECK: umonitor %eax 1579 // CHECK: encoding: [0x67,0xf3,0x0f,0xae,0xf0] 1580 umonitor %eax 1581 1582 // CHECK: umwait %r15 1583 // CHECK: encoding: [0xf2,0x41,0x0f,0xae,0xf7] 1584 umwait %r15 1585 1586 // CHECK: umwait %ebx 1587 // CHECK: encoding: [0xf2,0x0f,0xae,0xf3] 1588 umwait %ebx 1589 1590 // CHECK: tpause %r15 1591 // CHECK: encoding: [0x66,0x41,0x0f,0xae,0xf7] 1592 tpause %r15 1593 1594 // CHECK: tpause %ebx 1595 // CHECK: encoding: [0x66,0x0f,0xae,0xf3] 1596 tpause %ebx 1597 1598 // CHECK: movdiri %r15, 485498096 1599 // CHECK: # encoding: [0x4c,0x0f,0x38,0xf9,0x3c,0x25,0xf0,0x1c,0xf0,0x1c] 1600 movdiri %r15, 485498096 1601 1602 // CHECK: movdiri %r15, (%rdx) 1603 // CHECK: # encoding: [0x4c,0x0f,0x38,0xf9,0x3a] 1604 movdiri %r15, (%rdx) 1605 1606 // CHECK: movdiri %r15, 64(%rdx) 1607 // CHECK: # encoding: [0x4c,0x0f,0x38,0xf9,0x7a,0x40] 1608 movdiri %r15, 64(%rdx) 1609 1610 // CHECK: movdir64b 485498096, %rax 1611 // CHECK: # encoding: [0x66,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c] 1612 movdir64b 485498096, %rax 1613 1614 // CHECK: movdir64b 485498096, %eax 1615 // CHECK: # encoding: [0x67,0x66,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c] 1616 movdir64b 485498096, %eax 1617 1618 // CHECK: movdir64b (%rdx), %r15 1619 // CHECK: # encoding: [0x66,0x44,0x0f,0x38,0xf8,0x3a] 1620 movdir64b (%rdx), %r15 1621 1622 // CHECK: pconfig 1623 // CHECK: # encoding: [0x0f,0x01,0xc5] 1624 pconfig 1625 1626 // CHECK: encls 1627 // CHECK: encoding: [0x0f,0x01,0xcf] 1628 encls 1629 1630 // CHECK: enclu 1631 // CHECK: encoding: [0x0f,0x01,0xd7] 1632 enclu 1633 1634 // CHECK: enclv 1635 // CHECK: encoding: [0x0f,0x01,0xc0] 1636 enclv 1637 1638 // CHECK: movq %rax, %rbx 1639 // CHECK: encoding: [0x48,0x8b,0xd8] 1640 movq.s %rax, %rbx 1641 1642 // CHECK: movq %rax, %rbx 1643 // CHECK: encoding: [0x48,0x8b,0xd8] 1644 mov.s %rax, %rbx 1645 1646 // CHECK: movl %eax, %ebx 1647 // CHECK: encoding: [0x8b,0xd8] 1648 movl.s %eax, %ebx 1649 1650 // CHECK: movl %eax, %ebx 1651 // CHECK: encoding: [0x8b,0xd8] 1652 mov.s %eax, %ebx 1653 1654 // CHECK: movw %ax, %bx 1655 // CHECK: encoding: [0x66,0x8b,0xd8] 1656 movw.s %ax, %bx 1657 1658 // CHECK: movw %ax, %bx 1659 // CHECK: encoding: [0x66,0x8b,0xd8] 1660 mov.s %ax, %bx 1661 1662 // CHECK: movb %al, %bl 1663 // CHECK: encoding: [0x8a,0xd8] 1664 movb.s %al, %bl 1665 1666 // CHECK: movb %al, %bl 1667 // CHECK: encoding: [0x8a,0xd8] 1668 mov.s %al, %bl 1669 1670 // CHECK: movq %mm0, %mm1 1671 // CHECK: encoding: [0x0f,0x7f,0xc1] 1672 movq.s %mm0, %mm1 1673 1674 // CHECK: movq %xmm0, %xmm1 1675 // CHECK: encoding: [0x66,0x0f,0xd6,0xc1] 1676 movq.s %xmm0, %xmm1 1677 1678 // CHECK: movdqa %xmm0, %xmm1 1679 // CHECK: encoding: [0x66,0x0f,0x7f,0xc1] 1680 movdqa.s %xmm0, %xmm1 1681 1682 // CHECK: movdqu %xmm0, %xmm1 1683 // CHECK: encoding: [0xf3,0x0f,0x7f,0xc1] 1684 movdqu.s %xmm0, %xmm1 1685 1686 // CHECK: movaps %xmm0, %xmm1 1687 // CHECK: encoding: [0x0f,0x29,0xc1] 1688 movaps.s %xmm0, %xmm1 1689 1690 // CHECK: movups %xmm0, %xmm1 1691 // CHECK: encoding: [0x0f,0x11,0xc1] 1692 movups.s %xmm0, %xmm1 1693 1694 // CHECK: movapd %xmm0, %xmm1 1695 // CHECK: encoding: [0x66,0x0f,0x29,0xc1] 1696 movapd.s %xmm0, %xmm1 1697 1698 // CHECK: movupd %xmm0, %xmm1 1699 // CHECK: encoding: [0x66,0x0f,0x11,0xc1] 1700 movupd.s %xmm0, %xmm1 1701 1702 // CHECK: vmovq %xmm0, %xmm8 1703 // CHECK: encoding: [0xc4,0xc1,0x79,0xd6,0xc0] 1704 vmovq.s %xmm0, %xmm8 1705 1706 // CHECK: vmovq %xmm8, %xmm0 1707 // CHECK: encoding: [0xc5,0x79,0xd6,0xc0] 1708 vmovq.s %xmm8, %xmm0 1709 1710 // CHECK: vmovdqa %xmm0, %xmm8 1711 // CHECK: encoding: [0xc4,0xc1,0x79,0x7f,0xc0] 1712 vmovdqa.s %xmm0, %xmm8 1713 1714 // CHECK: vmovdqa %xmm8, %xmm0 1715 // CHECK: encoding: [0xc5,0x79,0x7f,0xc0] 1716 vmovdqa.s %xmm8, %xmm0 1717 1718 // CHECK: vmovdqu %xmm0, %xmm8 1719 // CHECK: encoding: [0xc4,0xc1,0x7a,0x7f,0xc0] 1720 vmovdqu.s %xmm0, %xmm8 1721 1722 // CHECK: vmovdqu %xmm8, %xmm0 1723 // CHECK: encoding: [0xc5,0x7a,0x7f,0xc0] 1724 vmovdqu.s %xmm8, %xmm0 1725 1726 // CHECK: vmovaps %xmm0, %xmm8 1727 // CHECK: encoding: [0xc4,0xc1,0x78,0x29,0xc0] 1728 vmovaps.s %xmm0, %xmm8 1729 1730 // CHECK: vmovaps %xmm8, %xmm0 1731 // CHECK: encoding: [0xc5,0x78,0x29,0xc0] 1732 vmovaps.s %xmm8, %xmm0 1733 1734 // CHECK: vmovups %xmm0, %xmm8 1735 // CHECK: encoding: [0xc4,0xc1,0x78,0x11,0xc0] 1736 vmovups.s %xmm0, %xmm8 1737 1738 // CHECK: vmovups %xmm8, %xmm0 1739 // CHECK: encoding: [0xc5,0x78,0x11,0xc0] 1740 vmovups.s %xmm8, %xmm0 1741 1742 // CHECK: vmovapd %xmm0, %xmm8 1743 // CHECK: encoding: [0xc4,0xc1,0x79,0x29,0xc0] 1744 vmovapd.s %xmm0, %xmm8 1745 1746 // CHECK: vmovapd %xmm8, %xmm0 1747 // CHECK: encoding: [0xc5,0x79,0x29,0xc0] 1748 vmovapd.s %xmm8, %xmm0 1749 1750 // CHECK: vmovupd %xmm0, %xmm8 1751 // CHECK: encoding: [0xc4,0xc1,0x79,0x11,0xc0] 1752 vmovupd.s %xmm0, %xmm8 1753 1754 // CHECK: vmovupd %xmm8, %xmm0 1755 // CHECK: encoding: [0xc5,0x79,0x11,0xc0] 1756 vmovupd.s %xmm8, %xmm0 1757 1758 // __asm __volatile( 1759 // "pushf \n\t" 1760 // "popf \n\t" 1761 // "rep \n\t" 1762 // ".byte 0x0f, 0xa7, 0xd0" 1763 // ); 1764 // CHECK: pushfq 1765 // CHECK-NEXT: popfq 1766 // CHECK-NEXT: rep 1767 // CHECK-NEXT: .byte 15 1768 // CHECK-NEXT: .byte 167 1769 // CHECK-NEXT: .byte 208 1770 pushfq 1771 popfq 1772 rep 1773 .byte 15 1774 .byte 167 1775 .byte 208 1776 1777 // CHECK: lock 1778 // CHECK: cmpxchgl 1779 cmp $0, %edx 1780 je 1f 1781 lock 1782 1: cmpxchgl %ecx,(%rdi) 1783 1784 // CHECK: rep 1785 // CHECK-NEXT: byte 1786 rep 1787 .byte 0xa4 # movsb 1788 1789 // CHECK: lock 1790 // This line has to be the last one in the file 1791 lock 1792