1# RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s 2 3# Coverage 4 5# CHECK: vcmptrue_usps 60xc5 0x04 0xc2 0xc7 0x1f 7 8# CHECK: vcmptrue_uspd 90xc5 0x05 0xc2 0xc7 0x1f 10 11# CHECK: vcmptrue_usss 120xc5 0x06 0xc2 0xc7 0x1f 13 14# CHECK: vcmptrue_ussd 150xc5 0x07 0xc2 0xc7 0x1f 16 17# CHECK: vcmpeq_uqps 180xc5 0x04 0xc2 0xc7 0x08 19 20# CHECK: vcmpeq_uqpd 210xc5 0x05 0xc2 0xc7 0x08 22 23# CHECK: vcmpeq_uqss 240xc5 0x06 0xc2 0xc7 0x08 25 26# CHECK: vcmpeq_uqsd 270xc5 0x07 0xc2 0xc7 0x08 28 29# CHECK: vcmpeqps 300xc5 0x04 0xc2 0xc7 0x00 31 32# CHECK: vcmpeqpd 330xc5 0x05 0xc2 0xc7 0x00 34 35# CHECK: vcmpeqss 360xc5 0x06 0xc2 0xc7 0x00 37 38# CHECK: vcmpeqsd 390xc5 0x07 0xc2 0xc7 0x00 40 41# CHECK: vcmptrue_usps %ymm7, %ymm15, %ymm0 420xc4 0xe1 0x84 0xc2 0xc7 0x1f 43 44# CHECK: vcmptrue_uspd %ymm7, %ymm15, %ymm0 450xc4 0xe1 0x85 0xc2 0xc7 0x1f 46 47# CHECK: cmpeqps 480x0f 0xc2 0xc7 0x00 49 50# CHECK: cmpeqpd 510x66 0x0f 0xc2 0xc7 0x00 52 53# CHECK: cmpeqss 540xf3 0x0f 0xc2 0xc7 0x00 55 56# CHECK: cmpeqsd 570xf2 0x0f 0xc2 0xc7 0x00 58 59# CHECK: cmpordps 600x0f 0xc2 0xc7 0x07 61 62# CHECK: cmpordpd 630x66 0x0f 0xc2 0xc7 0x07 64 65# CHECK: cmpordss 660xf3 0x0f 0xc2 0xc7 0x07 67 68# CHECK: cmpordsd 690xf2 0x0f 0xc2 0xc7 0x07 70 71# CHECK: extrq $2, $3, %xmm0 720x66 0x0f 0x78 0xc0 0x03 0x02 73 74# CHECK: extrq %xmm1, %xmm0 750x66 0x0f 0x79 0xc1 76 77# CHECK: insertq $6, $5, %xmm1, %xmm0 780xf2 0x0f 0x78 0xc1 0x05 0x06 79 80# CHECK: insertq %xmm1, %xmm0 810xf2 0x0f 0x79 0xc1 82 83# CHECK: movntsd %xmm0, (%rdi) 840xf2 0x0f 0x2b 0x07 85 86# CHECK: movntss %xmm0, (%rdi) 870xf3 0x0f 0x2b 0x07 88 89# CHECK: adcxl %eax, %eax 900x66 0x0f 0x38 0xf6 0xc0 91 92# CHECK: adcxl (%rax), %eax 930x66 0x0f 0x38 0xf6 0x00 94 95# CHECK: adcxq %rax, %rax 960x66 0x48 0x0f 0x38 0xf6 0xc0 97 98# CHECK: adcxq (%rax), %rax 990x66 0x48 0x0f 0x38 0xf6 0x00 100 101# CHECK: adoxl %eax, %eax 1020xf3 0x0f 0x38 0xf6 0xc0 103 104# CHECK: adoxl (%rax), %eax 1050xf3 0x0f 0x38 0xf6 0x00 106 107# CHECK: adoxq %rax, %rax 1080xf3 0x48 0x0f 0x38 0xf6 0xc0 109 110# CHECK: adoxq (%rax), %rax 1110xf3 0x48 0x0f 0x38 0xf6 0x00 112 113# CHECK: xbegin 53 1140xc7 0xf8 0x35 0x00 0x00 0x00 115 116# CHECK: xbegin 53 1170x66 0xc7 0xf8 0x35 0x00 118 119# CHECK: xend 1200x0f 0x01 0xd5 121 122# CHECK: xabort $13 1230xc6 0xf8 0x0d 124 125# CHECK: xsave64 (%rax) 1260x48 0x0f 0xae 0x20 127 128# CHECK: xrstor64 (%rax) 1290x48 0x0f 0xae 0x28 130 131# CHECK: xsaveopt64 (%rax) 1320x48 0x0f 0xae 0x30 133 134# CHECK: clac 1350x0f 0x01 0xca 136 137# CHECK: stac 1380x0f 0x01 0xcb 139 140# CHECK: movabsb -6066930261531658096, %al 1410xa0 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 142 143# CHECK: movabsb -6066930261531658096, %al 1440x48 0xa0 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 145 146# CHECK: movabsw -6066930261531658096, %ax 1470x66 0xa1 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 148 149# CHECK: movabsl -6066930261531658096, %eax 1500xa1 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 151 152# CHECK: movabsq -6066930261531658096, %rax 1530x48 0xa1 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 154 155# CHECK: movabsb %al, -6066930261531658096 1560xa2 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 157 158# CHECK: movabsb %al, -6066930261531658096 1590x48 0xa2 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 160 161# CHECK: movabsw %ax, -6066930261531658096 1620x66 0xa3 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 163 164# CHECK: movabsl %eax, -6066930261531658096 1650xa3 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 166 167# CHECK: movabsq %rax, -6066930261531658096 1680x48 0xa3 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab 169 170# CHECK: sha1rnds4 $1, %xmm1, %xmm2 1710x0f 0x3a 0xcc 0xd1 0x01 172 173# CHECK: sha1rnds4 $1, (%rax), %xmm2 1740x0f 0x3a 0xcc 0x10 0x01 175 176# CHECK: sha1nexte %xmm1, %xmm2 1770x0f 0x38 0xc8 0xd1 178 179# CHECK: sha1nexte (%rax), %xmm2 1800x0f 0x38 0xc8 0x10 181 182# CHECK: sha1msg1 %xmm1, %xmm2 1830x0f 0x38 0xc9 0xd1 184 185# CHECK: sha1msg1 (%rax), %xmm2 1860x0f 0x38 0xc9 0x10 187 188# CHECK: sha1msg2 %xmm1, %xmm2 1890x0f 0x38 0xca 0xd1 190 191# CHECK: sha1msg2 (%rax), %xmm2 1920x0f 0x38 0xca 0x10 193 194# CHECK: sha256rnds2 %xmm0, (%rax), %xmm2 1950x0f 0x38 0xcb 0x10 196 197# CHECK: sha256rnds2 %xmm0, %xmm1, %xmm2 1980x0f 0x38 0xcb 0xd1 199 200# CHECK: sha256msg1 %xmm1, %xmm2 2010x0f 0x38 0xcc 0xd1 202 203# CHECK: sha256msg1 (%rax), %xmm2 2040x0f 0x38 0xcc 0x10 205 206# CHECK: sha256msg2 %xmm1, %xmm2 2070x0f 0x38 0xcd 0xd1 208 209# CHECK: sha256msg2 (%rax), %xmm2 2100x0f 0x38 0xcd 0x10 211 212# CHECK: incl %ecx 2130xff 0xc1 214 215# CHECK: decl %ecx 2160xff 0xc9 217 218# CHECK: incw %cx 2190x66 0xff 0xc1 220 221# CHECK: decw %cx 2220x66 0xff 0xc9 223 224# CHECK: incb %cl 2250xfe 0xc1 226 227# CHECK: decb %cl 2280xfe 0xc9 229 230# CHECK: incq %rcx 2310x48 0xff 0xc1 232 233# CHECK: decq %rcx 2340x48 0xff 0xc9 235 236# CHECK: movq %xmm0, %xmm0 2370xf3 0x0f 0x7e 0xc0 238 239# CHECK: vmovq %xmm0, %xmm0 2400xc5 0xfa 0x7e 0xc0 241 242# CHECK: vmovq %xmm0, %rax 2430xc4 0xe1 0xf9 0x7e 0xc0 244 245# CHECK: movq (%rax), %mm0 2460x48 0x0f 0x6e 0x00 247 248# CHECK: movq %rax, %mm0 2490x48 0x0f 0x6e 0xc0 250 251# CHECK: movq %mm0, (%rax) 2520x48 0x0f 0x7e 0x00 253 254# CHECK: movq %mm0, %rax 2550x48 0x0f 0x7e 0xc0 256 257# CHECK: movq (%rax), %xmm0 2580x66 0x48 0x0f 0x6e 0x00 259 260# CHECK: movq %rax, %xmm0 2610x66 0x48 0x0f 0x6e 0xc0 262 263# CHECK: movq %xmm0, (%rax) 2640x66 0x48 0x0f 0x7e 0x00 265 266# CHECK: movq %xmm0, %rax 2670x66 0x48 0x0f 0x7e 0xc0 268 269# CHECK: pextrw $3, %xmm3, %ecx 2700x66 0x0f 0x3a 0x15 0xd9 0x03 271 272# CHECK: pextrw $3, %xmm3, (%rax) 2730x66 0x0f 0x3a 0x15 0x18 0x03 274 275# CHECK: addb $0, 305419896(,%r8) 2760x43 0x80 0x04 0x05 0x78 0x56 0x34 0x12 0x00 277 278# CHECK: addb $0, 305419896(%r13,%r8) 2790x43 0x80 0x84 0x05 0x78 0x56 0x34 0x12 0x00 280 281# CHECK: addb $0, 305419896(,%r8) 2820x42 0x80 0x04 0x05 0x78 0x56 0x34 0x12 0x00 283 284# CHECK: addb $0, 305419896(%rbp,%r8) 2850x42 0x80 0x84 0x05 0x78 0x56 0x34 0x12 0x00 286 287# CHECK: addb $0, 305419896(,%r12) 2880x42 0x80 0x04 0x25 0x78 0x56 0x34 0x12 0x00 289 290# CHECK: addb $0, 305419896(%rbp,%r12) 2910x42 0x80 0x84 0x25 0x78 0x56 0x34 0x12 0x00 292 293# CHECK: addb $0, 305419896 2940x80 0x04 0x25 0x78 0x56 0x34 0x12 0x00 295 296# CHECK: addb $0, 305419896(%rbp) 2970x80 0x85 0x78 0x56 0x34 0x12 0x00 298 299# CHECK: addb $0, 305419896(%rbp,%riz) 3000x80 0x84 0x25 0x78 0x56 0x34 0x12 0x00 301 302# CHECK: addb $0, 305419896(%rbp,%riz,2) 3030x80 0x84 0x65 0x78 0x56 0x34 0x12 0x00 304 305# CHECK: addb $0, 305419896(%rsp,%riz,2) 3060x80 0x84 0x64 0x78 0x56 0x34 0x12 0x00 307 308# CHECK: addb $0, 305419896(%r12,%riz,2) 3090x41 0x80 0x84 0x64 0x78 0x56 0x34 0x12 0x00 310 311# CHECK: addb $0, 305419896(%esp,%eiz,2) 3120x67 0x80 0x84 0x64 0x78 0x56 0x34 0x12 0x00 313 314# CHECK: addb $0, 305419896(%r12d,%eiz,2) 3150x67 0x41 0x80 0x84 0x64 0x78 0x56 0x34 0x12 0x00 316 317# CHECK: movabsq 6510615555426900570, %rax 3180x48 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 319 320# CHECK: movq 1515870810, %rax 3210x67, 0x48 0xa1 0x5a 0x5a 0x5a 0x5a 322 323# CHECK: movabsq %rax, 6510615555426900570 3240x48 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 325 326# CHECK: movq %rax, 1515870810 3270x67, 0x48 0xa3 0x5a 0x5a 0x5a 0x5a 328 329# CHECK: callq -32769 3300x66 0xe8 0xff 0x7f 0xff 0xff 331 332# CHECK: callq -32769 3330x66 0x66 0x48 0xe8 0xff 0x7f 0xff 0xff 334 335# CHECK: jmp -32769 3360xe9 0xff 0x7f 0xff 0xff 337 338# CHECK: jmp -32769 3390x66 0xe9 0xff 0x7f 0xff 0xff 340 341# CHECK: jmp -32769 3420x66 0x66 0x48 0xe9 0xff 0x7f 0xff 0xff 343 344# CHECK: jb -32769 3450x0f 0x82 0xff 0x7f 0xff 0xff 346 347# CHECK: jb -32769 3480x66 0x0f 0x82 0xff 0x7f 0xff 0xff 349 350# CHECK: jae -32769 3510x0f 0x83 0xff 0x7f 0xff 0xff 352 353# CHECK: jae -32769 3540x66 0x0f 0x83 0xff 0x7f 0xff 0xff 355 356# CHECK: je -32769 3570x0f 0x84 0xff 0x7f 0xff 0xff 358 359# CHECK: je -32769 3600x66 0x0f 0x84 0xff 0x7f 0xff 0xff 361 362# CHECK: jne -32769 3630x0f 0x85 0xff 0x7f 0xff 0xff 364 365# CHECK: jne -32769 3660x66 0x0f 0x85 0xff 0x7f 0xff 0xff 367 368# CHECK: jbe -32769 3690x0f 0x86 0xff 0x7f 0xff 0xff 370 371# CHECK: jbe -32769 3720x66 0x0f 0x86 0xff 0x7f 0xff 0xff 373 374# CHECK: ja -32769 3750x0f 0x87 0xff 0x7f 0xff 0xff 376 377# CHECK: ja -32769 3780x66 0x0f 0x87 0xff 0x7f 0xff 0xff 379 380# CHECK: js -32769 3810x0f 0x88 0xff 0x7f 0xff 0xff 382 383# CHECK: js -32769 3840x66 0x0f 0x88 0xff 0x7f 0xff 0xff 385 386# CHECK: jns -32769 3870x0f 0x89 0xff 0x7f 0xff 0xff 388 389# CHECK: jns -32769 3900x66 0x0f 0x89 0xff 0x7f 0xff 0xff 391 392# CHECK: jp -32769 3930x0f 0x8a 0xff 0x7f 0xff 0xff 394 395# CHECK: jp -32769 3960x66 0x0f 0x8a 0xff 0x7f 0xff 0xff 397 398# CHECK: jnp -32769 3990x0f 0x8b 0xff 0x7f 0xff 0xff 400 401# CHECK: jnp -32769 4020x66 0x0f 0x8b 0xff 0x7f 0xff 0xff 403 404# CHECK: jl -32769 4050x0f 0x8c 0xff 0x7f 0xff 0xff 406 407# CHECK: jl -32769 4080x66 0x0f 0x8c 0xff 0x7f 0xff 0xff 409 410# CHECK: jge -32769 4110x0f 0x8d 0xff 0x7f 0xff 0xff 412 413# CHECK: jge -32769 4140x66 0x0f 0x8d 0xff 0x7f 0xff 0xff 415 416# CHECK: jle -32769 4170x0f 0x8e 0xff 0x7f 0xff 0xff 418 419# CHECK: jle -32769 4200x66 0x0f 0x8e 0xff 0x7f 0xff 0xff 421 422# CHECK: jg -32769 4230x0f 0x8f 0xff 0x7f 0xff 0xff 424 425# CHECK: jg -32769 4260x66 0x0f 0x8f 0xff 0x7f 0xff 0xff 427 428# CHECK: lcallw *-32769(%rip) 4290x66 0xff 0x1d 0xff 0x7f 0xff 0xff 430 431# CHECK: ljmpw *-32769(%rip) 4320x66 0xff 0x2d 0xff 0x7f 0xff 0xff 433 434# CHECK: psubsb (%rdx), %mm3 4350x0f 0xe8 0x1a 436 437# CHECK: psubsb (%rdx), %xmm3 4380x66 0x0f 0xe8 0x1a 439 440# CHECK: addq 255(%rip), %rbx 4410x49, 0x03, 0x1d, 0xff, 0x00, 0x00, 0x00 442 443# The following 4 encodings are equivalent, as confirmed by the 'xed64' 444# decoder tool provided by Intel, which we assume to be canonical even 445# if the real silicon does something different. If that should happen, 446# then we'll all have disassembler bugs to repair. 447 448# Try all combinations of EVEX.x and REX.b: 449# CHECK: vaddps 287453952(%rip), %zmm20, %zmm15 4500x62 0x11 0x5c 0x40 0x58 0x3d 0x00 0x33 0x22 0x11 451# CHECK: vaddps 287453952(%rip), %zmm20, %zmm15 4520x62 0x31 0x5c 0x40 0x58 0x3d 0x00 0x33 0x22 0x11 453# CHECK: vaddps 287453952(%rip), %zmm20, %zmm15 4540x62 0x51 0x5c 0x40 0x58 0x3d 0x00 0x33 0x22 0x11 455# CHECK: vaddps 287453952(%rip), %zmm20, %zmm15 4560x62 0x71 0x5c 0x40 0x58 0x3d 0x00 0x33 0x22 0x11 457 458# CHECK: vaddps (%r10,%r9), %zmm20, %zmm15 4590x62 0x11 0x5c 0x40 0x58 0x3c 0x0a 460 461# CHECK: vaddps (%rdx,%r9), %zmm20, %zmm15 4620x62 0x31 0x5c 0x40 0x58 0x3c 0x0a 463 464# CHECK: vaddps (%r10,%rcx), %zmm20, %zmm15 4650x62 0x51 0x5c 0x40 0x58 0x3c 0x0a 466 467# CHECK: vaddps (%rdx,%rcx), %zmm20, %zmm15 4680x62 0x71 0x5c 0x40 0x58 0x3c 0x0a 469 470# CHECK: vpandd 32(%rsi,%r14,4){1to16}, %zmm26, %zmm21 {%k4} {z} 4710x62 0xa1 0x2d 0xd4 0xdb 0x6c 0xb6 0x08 472 473# CHECK: callq 32767 4740xe8 0xff 0x7f 0x00 0x00 475 476# CHECK: callq -32769 4770xe8 0xff 0x7f 0xff 0xff 478 479# CHECK: llwpcb %rax 4800x8f 0xe9 0xf8 0x12 0xc0 481 482# CHECK: slwpcb %rax 4830x8f 0xe9 0xf8 0x12 0xc8 484 485# CHECK: lwpins $305419896, %ebx, %rax 4860x8f 0xea 0xf8 0x12 0xc3 0x78 0x56 0x34 0x12 487 488# CHECK: lwpins $591751049, (%rsp), %rdx 4890x8f 0xea 0xe8 0x12 0x04 0x24 0x89 0x67 0x45 0x23 490 491# CHECK: lwpins $591751049, (%esp), %edx 4920x67 0x8f 0xea 0x68 0x12 0x04 0x24 0x89 0x67 0x45 0x23 493 494# CHECK: lwpval $1737075661, %ebx, %rax 4950x8f 0xea 0xf8 0x12 0xcb 0xcd 0xab 0x89 0x67 496 497# CHECK: lwpval $2309737967, (%rsp), %rdx 4980x8f 0xea 0xe8 0x12 0x0c 0x24 0xef 0xcd 0xab 0x89 499 500# CHECK: lwpval $2309737967, (%esp), %edx 5010x67 0x8f 0xea 0x68 0x12 0x0c 0x24 0xef 0xcd 0xab 0x89 502 503# CHECK: nopq -559038737(%rbx,%rcx,8) 5040x48 0x0f 0x1f 0x84 0xcb 0xef 0xbe 0xad 0xde 505 506# CHECK: nopq %rax 5070x48 0x0f 0x1f 0xC0 508 509# CHECK: popq %r14 5100x67 0x49 0x5e 511 512# CHECK: pushq %r14 5130x67 0x49 0x56 514 515# CHECK: xchgw %di, %ax 5160x66 0x3e 0x97 517 518# CHECK: movq %rdx, %cs 5190x4c 0x8e 0xca 520 521# CHECK: movw %bx, %cs:(%rsi,%rbp) 5220x2e 0x66 0x89 0x1c 0x2e 523# CHECK: movl %ebx, %cs:(%esi,%ebp) 5240x2e 0x67 0x89 0x1c 0x2e 525# CHECK: movl %ebx, %cs:(%rsi,%rbp) 5260x2e 0x89 0x1c 0x2e 527# CHECK: movw %bx, %cs:(%esi,%ebp) 5280x2e 0x67 0x66 0x89 0x1c 0x2e 529# CHECK: movw %bx, %cs:(%esi,%ebp) 5300x2e 0x66 0x67 0x89 0x1c 0x2e 531 532# CHECK: ptwritel -559038737(%rbx,%rcx,8) 5330xf3 0x0f 0xae 0xa4 0xcb 0xef 0xbe 0xad 0xde 534 535# CHECK: ptwritel %eax 5360xf3 0x0f 0xae 0xe0 537 538# CHECK: ptwriteq -559038737(%rbx,%rcx,8) 5390xf3 0x48 0x0f 0xae 0xa4 0xcb 0xef 0xbe 0xad 0xde 540 541# CHECK: ptwriteq %rax 5420xf3 0x48 0x0f 0xae 0xe0 543 544# CHECK: wbnoinvd 5450xf3 0x0f 0x09 546 547# CHECK: cldemote 4(%rax) 5480x0f 0x1c 0x40 0x04 549 550# CHECK: cldemote -559038737(%rbx,%rcx,8) 5510x0f,0x1c,0x84,0xcb,0xef,0xbe,0xad,0xde 552 553# CHECK: umonitor %rax 5540xf3 0x0f 0xae 0xf0 555 556# CHECK: umonitor %eax 5570x67 0xf3 0x0f 0xae 0xf0 558 559# CHECK: umonitor %r13 5600xf3 0x41 0x0f 0xae 0xf5 561 562# CHECK: umwait %r15 5630xf2 0x41 0x0f 0xae 0xf7 564 565# CHECK: tpause %r15 5660x66 0x41 0x0f 0xae 0xf7 567 568# CHECK: bswapw %bx 5690x66 0x0f 0xcb 570 571# CHECK: bswapl %ebx 5720x0f 0xcb 573 574# CHECK: bswapq %rbx 5750x48 0x0f 0xcb 576 577#CHECK: movdiri %r13d, 64(%rdx,%rax,4) 5780x44 0x0f 0x38 0xf9 0x6c 0x82 0x40 579 580#CHECK: movdir64b 485498096, %rax 5810x66 0x0f 0x38 0xf8 0x04 0x25 0xf0 0x1c 0xf0 0x1c 582 583#CHECK: movdir64b 485498096, %eax 5840x67 0x66 0x0f 0x38 0xf8 0x04 0x25 0xf0 0x1c 0xf0 0x1c 585 586#CHECK: pconfig 5870x0f 0x01 0xc5 588 589#CHECK: encls 5900x0f 0x01 0xcf 591 592#CHECK: enclu 5930x0f 0x01 0xd7 594 595#CHECK: enclv 5960x0f 0x01 0xc0 597 598# Make sure we ignore EVEX.X when the index register isn't being used. 599#CHECK: vaddps (%rax), %xmm16, %xmm1 6000x62 0xb1 0x7c 0x00 0x58 0x08 601 602# Make sure we ignore EVEX.X when modrm.rm encodes a GPR. 603#CHECK: vcvtusi2sdq %rax, %xmm1, %xmm1 6040x62 0xb1 0xf7 0x08 0x7b 0xc8 605 606# Make sure we ignore EVEX.X when modrm.rm encodes a k-register. 607#CHECK: vpmovm2b %k0, %xmm0 6080x62,0xb2,0x7e,0x08,0x28,0xc0 609 610# 0x67 prefix prints %eip instead of %rip 611#CHECK: addb %al, (%eip) 6120x67,0x00,0x05,0x00,0x00,0x00,0x00 613