1// RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel %s > %t 2> %t.err 2// RUN: FileCheck < %t %s 3// RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s 4 5_test: 6 xor EAX, EAX 7 ret 8 9.set number, 8 10.global _foo 11 12.text 13 .global main 14main: 15 16// CHECK: leaq _foo(%rbx,%rax,8), %rdx 17 lea RDX, [8 * RAX + RBX + _foo] 18// CHECK: leaq _foo(%rbx,%rax,8), %rdx 19 lea RDX, [_foo + 8 * RAX + RBX] 20// CHECK: leaq 8(%rcx,%rax,8), %rdx 21 lea RDX, [8 + RAX * 8 + RCX] 22// CHECK: leaq 8(%rcx,%rax,8), %rdx 23 lea RDX, [number + 8 * RAX + RCX] 24// CHECK: leaq _foo(,%rax,8), %rdx 25 lea RDX, [_foo + RAX * 8] 26// CHECK: leaq _foo(%rbx,%rax,8), %rdx 27 lea RDX, [_foo + RAX * 8 + RBX] 28// CHECK: leaq -8(%rax), %rdx 29 lea RDX, [RAX - number] 30// CHECK: leaq -8(%rax), %rdx 31 lea RDX, [RAX - 8] 32// CHECK: leaq _foo(%rax), %rdx 33 lea RDX, [RAX + _foo] 34// CHECK: leaq 8(%rax), %rdx 35 lea RDX, [RAX + number] 36// CHECK: leaq 8(%rax), %rdx 37 lea RDX, [RAX + 8] 38// CHECK: leaq _foo(%rbx,%rax,8), %rdx 39 lea RDX, [RAX * number + RBX + _foo] 40// CHECK: leaq _foo(%rbx,%rax,8), %rdx 41 lea RDX, [_foo + RAX * number + RBX] 42// CHECK: leaq 8(%rcx,%rax,8), %rdx 43 lea RDX, [number + RAX * number + RCX] 44// CHECK: leaq _foo(,%rax,8), %rdx 45 lea RDX, [_foo + RAX * number] 46// CHECK: leaq _foo(%rbx,%rax,8), %rdx 47 lea RDX, [number * RAX + RBX + _foo] 48// CHECK: leaq _foo(%rbx,%rax,8), %rdx 49 lea RDX, [_foo + number * RAX + RBX] 50// CHECK: leaq 8(%rcx,%rax,8), %rdx 51 lea RDX, [8 + number * RAX + RCX] 52// CHECK: leaq _foo(%rax), %rdx 53 lea RDX, [_foo + RAX] 54// CHECK: leaq 8(%rax), %rdx 55 lea RDX, [number + RAX] 56// CHECK: leaq 8(%rax), %rdx 57 lea RDX, [8 + RAX] 58 59// CHECK: lcalll *(%rax) 60 call FWORD ptr [rax] 61// CHECK: lcalll *(%rax) 62 lcall [rax] 63// CHECK: ljmpl *(%rax) 64 jmp FWORD ptr [rax] 65// CHECK: ljmpq *(%rax) 66 ljmp [rax] 67 68// CHECK: movl $257, -4(%rsp) 69 mov DWORD PTR [RSP - 4], 257 70// CHECK: movl $258, 4(%rsp) 71 mov DWORD PTR [RSP + 4], 258 72// CHECK: movq $123, -16(%rsp) 73 mov QWORD PTR [RSP - 16], 123 74// CHECK: movb $97, -17(%rsp) 75 mov BYTE PTR [RSP - 17], 97 76// CHECK: movl -4(%rsp), %eax 77 mov EAX, DWORD PTR [RSP - 4] 78// CHECK: movq (%rsp), %rax 79 mov RAX, QWORD PTR [RSP] 80// CHECK: movabsq $4294967289, %rax 81 mov RAX, 4294967289 82// CHECK: movl $-4, -4(%rsp) 83 mov DWORD PTR [RSP - 4], -4 84// CHECK: movq 0, %rcx 85 mov RCX, QWORD PTR [0] 86// CHECK: movl -24(%rsp,%rax,4), %eax 87 mov EAX, DWORD PTR [RSP + 4*RAX - 24] 88// CHECK: movb %dil, (%rdx,%rcx) 89 mov BYTE PTR [RDX + RCX], DIL 90// CHECK: movzwl 2(%rcx), %edi 91 movzx EDI, WORD PTR [RCX + 2] 92// CHECK: callq _test 93 call _test 94// CHECK: andw $12, %ax 95 and ax, 12 96// CHECK: andw $-12, %ax 97 and ax, -12 98// CHECK: andw $257, %ax 99 and ax, 257 100// CHECK: andw $-257, %ax 101 and ax, -257 102// CHECK: andl $12, %eax 103 and eax, 12 104// CHECK: andl $-12, %eax 105 and eax, -12 106// CHECK: andl $257, %eax 107 and eax, 257 108// CHECK: andl $-257, %eax 109 and eax, -257 110// CHECK: andq $12, %rax 111 and rax, 12 112// CHECK: andq $-12, %rax 113 and rax, -12 114// CHECK: andq $257, %rax 115 and rax, 257 116// CHECK: andq $-257, %rax 117 and rax, -257 118// CHECK: fld %st(0) 119 fld ST(0) 120// CHECK: movl %fs:(%rdi), %eax 121 mov EAX, DWORD PTR FS:[RDI] 122// CHECK: leal (,%rdi,4), %r8d 123 lea R8D, DWORD PTR [4*RDI] 124// CHECK: movl _fnan(,%ecx,4), %ecx 125 mov ECX, DWORD PTR [4*ECX + _fnan] 126// CHECK: movq %fs:320, %rax 127 mov RAX, QWORD PTR FS:[320] 128// CHECK: movq %fs:320, %rax 129 mov RAX, QWORD PTR FS:320 130// CHECK: movq %rax, %fs:320 131 mov QWORD PTR FS:320, RAX 132// CHECK: movq %rax, %fs:20(%rbx) 133 mov QWORD PTR FS:20[rbx], RAX 134// CHECK: vshufpd $1, %xmm2, %xmm1, %xmm0 135 vshufpd XMM0, XMM1, XMM2, 1 136// CHECK: vpgatherdd %xmm8, (%r15,%xmm9,2), %xmm1 137 vpgatherdd XMM10, XMMWORD PTR [R15 + 2*XMM9], XMM8 138// CHECK: movsd -8, %xmm5 139 movsd XMM5, QWORD PTR [-8] 140// CHECK: movsl (%rsi), %es:(%rdi) 141 movsd 142// CHECK: movl %ecx, (%eax) 143 mov [eax], ecx 144// CHECK: movl %ecx, (,%ebx,4) 145 mov [4*ebx], ecx 146 // CHECK: movl %ecx, (,%ebx,4) 147 mov [ebx*4], ecx 148// CHECK: movl %ecx, 1024 149 mov [1024], ecx 150// CHECK: movl %ecx, 4132 151 mov [0x1024], ecx 152// CHECK: movl %ecx, 32 153 mov [16 + 16], ecx 154// CHECK: movl %ecx, 0 155 mov [16 - 16], ecx 156// CHECK: movl %ecx, 32 157 mov [16][16], ecx 158// CHECK: movl %ecx, (%eax,%ebx,4) 159 mov [eax + 4*ebx], ecx 160// CHECK: movl %ecx, (%eax,%ebx,4) 161 mov [eax + ebx*4], ecx 162// CHECK: movl %ecx, (%eax,%ebx,4) 163 mov [4*ebx + eax], ecx 164// CHECK: movl %ecx, (%eax,%ebx,4) 165 mov [ebx*4 + eax], ecx 166// CHECK: movl %ecx, (%eax,%ebx,4) 167 mov [eax][4*ebx], ecx 168// CHECK: movl %ecx, (%eax,%ebx,4) 169 mov [eax][ebx*4], ecx 170// CHECK: movl %ecx, (%eax,%ebx,4) 171 mov [4*ebx][eax], ecx 172// CHECK: movl %ecx, (%eax,%ebx,4) 173 mov [ebx*4][eax], ecx 174// CHECK: movl %ecx, 12(%eax) 175 mov [eax + 12], ecx 176// CHECK: movl %ecx, 12(%eax) 177 mov [12 + eax], ecx 178// CHECK: movl %ecx, 32(%eax) 179 mov [eax + 16 + 16], ecx 180// CHECK: movl %ecx, 32(%eax) 181 mov [16 + eax + 16], ecx 182// CHECK: movl %ecx, 32(%eax) 183 mov [16 + 16 + eax], ecx 184// CHECK: movl %ecx, 12(%eax) 185 mov [eax][12], ecx 186// CHECK: movl %ecx, 12(%eax) 187 mov [12][eax], ecx 188// CHECK: movl %ecx, 32(%eax) 189 mov [eax][16 + 16], ecx 190// CHECK: movl %ecx, 32(%eax) 191 mov [eax + 16][16], ecx 192// CHECK: movl %ecx, 32(%eax) 193 mov [eax][16][16], ecx 194// CHECK: movl %ecx, 32(%eax) 195 mov [16][eax + 16], ecx 196// CHECK: movl %ecx, 32(%eax) 197 mov [16 + eax][16], ecx 198// CHECK: movl %ecx, 32(%eax) 199 mov [16][16 + eax], ecx 200// CHECK: movl %ecx, 32(%eax) 201 mov [16 + 16][eax], ecx 202// CHECK: movl %ecx, 32(%eax) 203 mov [eax][16][16], ecx 204// CHECK: movl %ecx, 32(%eax) 205 mov [16][eax][16], ecx 206// CHECK: movl %ecx, 32(%eax) 207 mov [16][16][eax], ecx 208// CHECK: movl %ecx, 16(,%ebx,4) 209 mov [4*ebx + 16], ecx 210// CHECK: movl %ecx, 16(,%ebx,4) 211 mov [ebx*4 + 16], ecx 212// CHECK: movl %ecx, 16(,%ebx,4) 213 mov [4*ebx][16], ecx 214// CHECK: movl %ecx, 16(,%ebx,4) 215 mov [ebx*4][16], ecx 216// CHECK: movl %ecx, 16(,%ebx,4) 217 mov [16 + 4*ebx], ecx 218// CHECK: movl %ecx, 16(,%ebx,4) 219 mov [16 + ebx*4], ecx 220// CHECK: movl %ecx, 16(,%ebx,4) 221 mov [16][4*ebx], ecx 222// CHECK: movl %ecx, 16(,%ebx,4) 223 mov [16][ebx*4], ecx 224// CHECK: movl %ecx, 16(%eax,%ebx,4) 225 mov [eax + 4*ebx + 16], ecx 226// CHECK: movl %ecx, 16(%eax,%ebx,4) 227 mov [eax + 16 + 4*ebx], ecx 228// CHECK: movl %ecx, 16(%eax,%ebx,4) 229 mov [4*ebx + eax + 16], ecx 230// CHECK: movl %ecx, 16(%eax,%ebx,4) 231 mov [4*ebx + 16 + eax], ecx 232// CHECK: movl %ecx, 16(%eax,%ebx,4) 233 mov [16 + eax + 4*ebx], ecx 234// CHECK: movl %ecx, 16(%eax,%ebx,4) 235 mov [16 + eax + 4*ebx], ecx 236// CHECK: movl %ecx, 16(%eax,%ebx,4) 237 mov [eax][4*ebx + 16], ecx 238// CHECK: movl %ecx, 16(%eax,%ebx,4) 239 mov [eax][16 + 4*ebx], ecx 240// CHECK: movl %ecx, 16(%eax,%ebx,4) 241 mov [4*ebx][eax + 16], ecx 242// CHECK: movl %ecx, 16(%eax,%ebx,4) 243 mov [4*ebx][16 + eax], ecx 244// CHECK: movl %ecx, 16(%eax,%ebx,4) 245 mov [16][eax + 4*ebx], ecx 246// CHECK: movl %ecx, 16(%eax,%ebx,4) 247 mov [16][eax + 4*ebx], ecx 248// CHECK: movl %ecx, 16(%eax,%ebx,4) 249 mov [eax + 4*ebx][16], ecx 250// CHECK: movl %ecx, 16(%eax,%ebx,4) 251 mov [eax + 16][4*ebx], ecx 252// CHECK: movl %ecx, 16(%eax,%ebx,4) 253 mov [4*ebx + eax][16], ecx 254// CHECK: movl %ecx, 16(%eax,%ebx,4) 255 mov [4*ebx + 16][eax], ecx 256// CHECK: movl %ecx, 16(%eax,%ebx,4) 257 mov [16 + eax][4*ebx], ecx 258// CHECK: movl %ecx, 16(%eax,%ebx,4) 259 mov [16 + eax][4*ebx], ecx 260// CHECK: movl %ecx, 16(%eax,%ebx,4) 261 mov [eax][4*ebx][16], ecx 262// CHECK: movl %ecx, 16(%eax,%ebx,4) 263 mov [eax][16][4*ebx], ecx 264// CHECK: movl %ecx, 16(%eax,%ebx,4) 265 mov [4*ebx][eax][16], ecx 266// CHECK: movl %ecx, 16(%eax,%ebx,4) 267 mov [4*ebx][16][eax], ecx 268// CHECK: movl %ecx, 16(%eax,%ebx,4) 269 mov [16][eax][4*ebx], ecx 270// CHECK: movl %ecx, 16(%eax,%ebx,4) 271 mov [16][eax][4*ebx], ecx 272// CHECK: movl %ecx, 16(%eax,%ebx,4) 273 mov [eax + ebx*4 + 16], ecx 274// CHECK: movl %ecx, 16(%eax,%ebx,4) 275 mov [eax + 16 + ebx*4], ecx 276// CHECK: movl %ecx, 16(%eax,%ebx,4) 277 mov [ebx*4 + eax + 16], ecx 278// CHECK: movl %ecx, 16(%eax,%ebx,4) 279 mov [ebx*4 + 16 + eax], ecx 280// CHECK: movl %ecx, 16(%eax,%ebx,4) 281 mov [16 + eax + ebx*4], ecx 282// CHECK: movl %ecx, 16(%eax,%ebx,4) 283 mov [16 + eax + ebx*4], ecx 284// CHECK: movl %ecx, 16(%eax,%ebx,4) 285 mov [eax][ebx*4 + 16], ecx 286// CHECK: movl %ecx, 16(%eax,%ebx,4) 287 mov [eax][16 + ebx*4], ecx 288// CHECK: movl %ecx, 16(%eax,%ebx,4) 289 mov [ebx*4][eax + 16], ecx 290// CHECK: movl %ecx, 16(%eax,%ebx,4) 291 mov [ebx*4][16 + eax], ecx 292// CHECK: movl %ecx, 16(%eax,%ebx,4) 293 mov [16][eax + ebx*4], ecx 294// CHECK: movl %ecx, 16(%eax,%ebx,4) 295 mov [16][eax + ebx*4], ecx 296// CHECK: movl %ecx, 16(%eax,%ebx,4) 297 mov [eax + ebx*4][16], ecx 298// CHECK: movl %ecx, 16(%eax,%ebx,4) 299 mov [eax + 16][ebx*4], ecx 300// CHECK: movl %ecx, 16(%eax,%ebx,4) 301 mov [ebx*4 + eax][16], ecx 302// CHECK: movl %ecx, 16(%eax,%ebx,4) 303 mov [ebx*4 + 16][eax], ecx 304// CHECK: movl %ecx, 16(%eax,%ebx,4) 305 mov [16 + eax][ebx*4], ecx 306// CHECK: movl %ecx, 16(%eax,%ebx,4) 307 mov [16 + eax][ebx*4], ecx 308// CHECK: movl %ecx, 16(%eax,%ebx,4) 309 mov [eax][ebx*4][16], ecx 310// CHECK: movl %ecx, 16(%eax,%ebx,4) 311 mov [eax][16][ebx*4], ecx 312// CHECK: movl %ecx, 16(%eax,%ebx,4) 313 mov [ebx*4][eax][16], ecx 314// CHECK: movl %ecx, 16(%eax,%ebx,4) 315 mov [ebx*4][16][eax], ecx 316// CHECK: movl %ecx, 16(%eax,%ebx,4) 317 mov [16][eax][ebx*4], ecx 318// CHECK: movl %ecx, 16(%eax,%ebx,4) 319 mov [16][eax][ebx*4], ecx 320// CHECK: movl %ecx, -16(%eax,%ebx,4) 321 mov [eax][ebx*4 - 16], ecx 322 323// CHECK: prefetchnta 12800(%esi) 324 prefetchnta [esi + (200*64)] 325// CHECK: prefetchnta 32(%esi) 326 prefetchnta [esi + (64/2)] 327// CHECK: prefetchnta 128(%esi) 328 prefetchnta [esi + (64/2*4)] 329// CHECK: prefetchnta 8(%esi) 330 prefetchnta [esi + (64/(2*4))] 331// CHECK: prefetchnta 48(%esi) 332 prefetchnta [esi + (64/(2*4)+40)] 333 334// CHECK: movl %ecx, -16(%eax,%ebx,4) 335 mov [eax][ebx*4 - 2*8], ecx 336// CHECK: movl %ecx, -16(%eax,%ebx,4) 337 mov [eax][4*ebx - 2*8], ecx 338// CHECK: movl %ecx, -16(%eax,%ebx,4) 339 mov [eax + 4*ebx - 2*8], ecx 340// CHECK: movl %ecx, -16(%eax,%ebx,4) 341 mov [12 + eax + (4*ebx) - 2*14], ecx 342// CHECK: movl %ecx, -16(%eax,%ebx,4) 343 mov [eax][ebx*4 - 2*2*2*2], ecx 344// CHECK: movl %ecx, -16(%eax,%ebx,4) 345 mov [eax][ebx*4 - (2*8)], ecx 346// CHECK: movl %ecx, -16(%eax,%ebx,4) 347 mov [eax][ebx*4 - 2 * 8 + 4 - 4], ecx 348// CHECK: movl %ecx, -16(%eax,%ebx,4) 349 mov [eax + ebx*4 - 2 * 8 + 4 - 4], ecx 350// CHECK: movl %ecx, -16(%eax,%ebx,4) 351 mov [eax + ebx*4 - 2 * ((8 + 4) - 4)], ecx 352// CHECK: movl %ecx, -16(%eax,%ebx,4) 353 mov [-2 * ((8 + 4) - 4) + eax + ebx*4], ecx 354// CHECK: movl %ecx, -16(%eax,%ebx,4) 355 mov [((-2) * ((8 + 4) - 4)) + eax + ebx*4], ecx 356// CHECK: movl %ecx, -16(%eax,%ebx,4) 357 mov [eax + ((-2) * ((8 + 4) - 4)) + ebx*4], ecx 358// CHECK: movl %ecx, 96(%eax,%ebx,4) 359 mov [eax + ((-2) * ((8 + 4) * -4)) + ebx*4], ecx 360// CHECK: movl %ecx, -8(%eax,%ebx,4) 361 mov [eax][-8][ebx*4], ecx 362// CHECK: movl %ecx, -2(%eax,%ebx,4) 363 mov [eax][16/-8][ebx*4], ecx 364// CHECK: movl %ecx, -2(%eax,%ebx,4) 365 mov [eax][(16)/-8][ebx*4], ecx 366 367// CHECK: setb %al 368 setc al 369// CHECK: sete %al 370 setz al 371// CHECK: setbe %al 372 setna al 373// CHECK: setae %al 374 setnb al 375// CHECK: setae %al 376 setnc al 377// CHECK: setle %al 378 setng al 379// CHECK: setge %al 380 setnl al 381// CHECK: setne %al 382 setnz al 383// CHECK: setp %al 384 setpe al 385// CHECK: setnp %al 386 setpo al 387// CHECK: setb %al 388 setnae al 389// CHECK: seta %al 390 setnbe al 391// CHECK: setl %al 392 setnge al 393// CHECK: setg %al 394 setnle al 395// CHECK: jne _foo 396 jnz _foo 397// CHECK: outb %al, $4 398 out 4, al 399 ret 400 401// CHECK: cmovbl %ebx, %eax 402 cmovc eax, ebx 403// CHECK: cmovel %ebx, %eax 404 cmovz eax, ebx 405// CHECK: cmovbel %ebx, %eax 406 cmovna eax, ebx 407// CHECK: cmovael %ebx, %eax 408 cmovnb eax, ebx 409// CHECK: cmovael %ebx, %eax 410 cmovnc eax, ebx 411// CHECK: cmovlel %ebx, %eax 412 cmovng eax, ebx 413// CHECK: cmovgel %ebx, %eax 414 cmovnl eax, ebx 415// CHECK: cmovnel %ebx, %eax 416 cmovnz eax, ebx 417// CHECK: cmovpl %ebx, %eax 418 cmovpe eax, ebx 419// CHECK: cmovnpl %ebx, %eax 420 cmovpo eax, ebx 421// CHECK: cmovbl %ebx, %eax 422 cmovnae eax, ebx 423// CHECK: cmoval %ebx, %eax 424 cmovnbe eax, ebx 425// CHECK: cmovll %ebx, %eax 426 cmovnge eax, ebx 427// CHECK: cmovgl %ebx, %eax 428 cmovnle eax, ebx 429 430// CHECK: shldw %cl, %bx, %dx 431// CHECK: shldw %cl, %bx, %dx 432// CHECK: shldw $1, %bx, %dx 433// CHECK: shldw %cl, %bx, (%rax) 434// CHECK: shldw %cl, %bx, (%rax) 435// CHECK: shrdw %cl, %bx, %dx 436// CHECK: shrdw %cl, %bx, %dx 437// CHECK: shrdw $1, %bx, %dx 438// CHECK: shrdw %cl, %bx, (%rax) 439// CHECK: shrdw %cl, %bx, (%rax) 440 441shld DX, BX 442shld DX, BX, CL 443shld DX, BX, 1 444shld [RAX], BX 445shld [RAX], BX, CL 446shrd DX, BX 447shrd DX, BX, CL 448shrd DX, BX, 1 449shrd [RAX], BX 450shrd [RAX], BX, CL 451 452// CHECK: btl $1, (%eax) 453// CHECK: btsl $1, (%eax) 454// CHECK: btrl $1, (%eax) 455// CHECK: btcl $1, (%eax) 456 bt DWORD PTR [EAX], 1 457 bt DWORD PTR [EAX], 1 458 bts DWORD PTR [EAX], 1 459 btr DWORD PTR [EAX], 1 460 btc DWORD PTR [EAX], 1 461 462//CHECK: divb %bl 463//CHECK: divw %bx 464//CHECK: divl %ecx 465//CHECK: divl 3735928559(%ebx,%ecx,8) 466//CHECK: divl 69 467//CHECK: divl 32493 468//CHECK: divl 3133065982 469//CHECK: divl 305419896 470//CHECK: idivb %bl 471//CHECK: idivw %bx 472//CHECK: idivl %ecx 473//CHECK: idivl 3735928559(%ebx,%ecx,8) 474//CHECK: idivl 69 475//CHECK: idivl 32493 476//CHECK: idivl 3133065982 477//CHECK: idivl 305419896 478 div AL, BL 479 div AX, BX 480 div EAX, ECX 481 div EAX, [ECX*8+EBX+0xdeadbeef] 482 div EAX, [0x45] 483 div EAX, [0x7eed] 484 div EAX, [0xbabecafe] 485 div EAX, [0x12345678] 486 idiv AL, BL 487 idiv AX, BX 488 idiv EAX, ECX 489 idiv EAX, [ECX*8+EBX+0xdeadbeef] 490 idiv EAX, [0x45] 491 idiv EAX, [0x7eed] 492 idiv EAX, [0xbabecafe] 493 idiv EAX, [0x12345678] 494 495 496// CHECK: inb %dx, %al 497// CHECK: inw %dx, %ax 498// CHECK: inl %dx, %eax 499// CHECK: outb %al, %dx 500// CHECK: outw %ax, %dx 501// CHECK: outl %eax, %dx 502 inb DX 503 inw DX 504 inl DX 505 outb DX 506 outw DX 507 outl DX 508 509// CHECK: xchgq %rcx, %rax 510// CHECK: xchgq %rcx, %rax 511// CHECK: xchgl %ecx, %eax 512// CHECK: xchgl %ecx, %eax 513// CHECK: xchgw %cx, %ax 514// CHECK: xchgw %cx, %ax 515xchg RAX, RCX 516xchg RCX, RAX 517xchg EAX, ECX 518xchg ECX, EAX 519xchg AX, CX 520xchg CX, AX 521 522// CHECK: xchgq %rax, (%ecx) 523// CHECK: xchgq %rax, (%ecx) 524// CHECK: xchgl %eax, (%ecx) 525// CHECK: xchgl %eax, (%ecx) 526// CHECK: xchgw %ax, (%ecx) 527// CHECK: xchgw %ax, (%ecx) 528xchg RAX, [ECX] 529xchg [ECX], RAX 530xchg EAX, [ECX] 531xchg [ECX], EAX 532xchg AX, [ECX] 533xchg [ECX], AX 534 535// CHECK: testq %rax, (%ecx) 536// CHECK: testq %rax, (%ecx) 537// CHECK: testl %eax, (%ecx) 538// CHECK: testl %eax, (%ecx) 539// CHECK: testw %ax, (%ecx) 540// CHECK: testw %ax, (%ecx) 541// CHECK: testb %al, (%ecx) 542// CHECK: testb %al, (%ecx) 543test RAX, [ECX] 544test [ECX], RAX 545test EAX, [ECX] 546test [ECX], EAX 547test AX, [ECX] 548test [ECX], AX 549test AL, [ECX] 550test [ECX], AL 551 552// CHECK: fnstsw %ax 553// CHECK: fnstsw %ax 554// CHECK: fnstsw (%eax) 555fnstsw 556fnstsw AX 557fnstsw WORD PTR [EAX] 558 559// CHECK: faddp %st(1) 560// CHECK: fmulp %st(1) 561// CHECK: fsubrp %st(1) 562// CHECK: fsubp %st(1) 563// CHECK: fdivrp %st(1) 564// CHECK: fdivp %st(1) 565faddp ST(1), ST(0) 566fmulp ST(1), ST(0) 567fsubp ST(1), ST(0) 568fsubrp ST(1), ST(0) 569fdivp ST(1), ST(0) 570fdivrp ST(1), ST(0) 571 572// CHECK: faddp %st(1) 573// CHECK: fmulp %st(1) 574// CHECK: fsubrp %st(1) 575// CHECK: fsubp %st(1) 576// CHECK: fdivrp %st(1) 577// CHECK: fdivp %st(1) 578faddp ST(0), ST(1) 579fmulp ST(0), ST(1) 580fsubp ST(0), ST(1) 581fsubrp ST(0), ST(1) 582fdivp ST(0), ST(1) 583fdivrp ST(0), ST(1) 584 585// CHECK: faddp %st(1) 586// CHECK: fmulp %st(1) 587// CHECK: fsubrp %st(1) 588// CHECK: fsubp %st(1) 589// CHECK: fdivrp %st(1) 590// CHECK: fdivp %st(1) 591faddp ST(1) 592fmulp ST(1) 593fsubp ST(1) 594fsubrp ST(1) 595fdivp ST(1) 596fdivrp ST(1) 597 598 599// CHECK: faddp %st(1) 600// CHECK: fmulp %st(1) 601// CHECK: fsubrp %st(1) 602// CHECK: fsubp %st(1) 603// CHECK: fdivrp %st(1) 604// CHECK: fdivp %st(1) 605fadd 606fmul 607fsub 608fsubr 609fdiv 610fdivr 611 612// CHECK: faddp %st(1) 613// CHECK: fmulp %st(1) 614// CHECK: fsubrp %st(1) 615// CHECK: fsubp %st(1) 616// CHECK: fdivrp %st(1) 617// CHECK: fdivp %st(1) 618faddp 619fmulp 620fsubp 621fsubrp 622fdivp 623fdivrp 624 625// CHECK: fadd %st(1) 626// CHECK: fmul %st(1) 627// CHECK: fsub %st(1) 628// CHECK: fsubr %st(1) 629// CHECK: fdiv %st(1) 630// CHECK: fdivr %st(1) 631fadd ST(0), ST(1) 632fmul ST(0), ST(1) 633fsub ST(0), ST(1) 634fsubr ST(0), ST(1) 635fdiv ST(0), ST(1) 636fdivr ST(0), ST(1) 637 638// CHECK: fadd %st(0), %st(1) 639// CHECK: fmul %st(0), %st(1) 640// CHECK: fsubr %st(0), %st(1) 641// CHECK: fsub %st(0), %st(1) 642// CHECK: fdivr %st(0), %st(1) 643// CHECK: fdiv %st(0), %st(1) 644fadd ST(1), ST(0) 645fmul ST(1), ST(0) 646fsub ST(1), ST(0) 647fsubr ST(1), ST(0) 648fdiv ST(1), ST(0) 649fdivr ST(1), ST(0) 650 651// CHECK: fadd %st(1) 652// CHECK: fmul %st(1) 653// CHECK: fsub %st(1) 654// CHECK: fsubr %st(1) 655// CHECK: fdiv %st(1) 656// CHECK: fdivr %st(1) 657fadd ST(1) 658fmul ST(1) 659fsub ST(1) 660fsubr ST(1) 661fdiv ST(1) 662fdivr ST(1) 663 664 665// CHECK: fxsave64 (%rax) 666// CHECK: fxrstor64 (%rax) 667fxsave64 [rax] 668fxrstor64 [rax] 669 670.bss 671.globl _g0 672.text 673 674// CHECK: movq _g0, %rbx 675// CHECK: movq _g0+8, %rcx 676// CHECK: movq _g0+18(%rbp), %rax 677// CHECK: movq _g0(,%rsi,4), %rax 678mov rbx, qword ptr [_g0] 679mov rcx, qword ptr [_g0 + 8] 680mov rax, QWORD PTR _g0[rbp + 1 + (2 * 5) - 3 + 1<<1] 681mov rax, QWORD PTR _g0[rsi*4] 682 683"?half@?0??bar@@YAXXZ@4NA": 684 .quad 4602678819172646912 685 686fadd dword ptr "?half@?0??bar@@YAXXZ@4NA" 687fadd dword ptr "?half@?0??bar@@YAXXZ@4NA"@IMGREL 688// CHECK: fadds "?half@?0??bar@@YAXXZ@4NA" 689// CHECK: fadds "?half@?0??bar@@YAXXZ@4NA"@IMGREL 690 691inc qword ptr [rax] 692inc long ptr [rax] 693inc dword ptr [rax] 694inc word ptr [rax] 695inc byte ptr [rax] 696// CHECK: incq (%rax) 697// CHECK: incl (%rax) 698// CHECK: incl (%rax) 699// CHECK: incw (%rax) 700// CHECK: incb (%rax) 701 702dec qword ptr [rax] 703dec dword ptr [rax] 704dec word ptr [rax] 705dec byte ptr [rax] 706// CHECK: decq (%rax) 707// CHECK: decl (%rax) 708// CHECK: decw (%rax) 709// CHECK: decb (%rax) 710 711add qword ptr [rax], 1 712add dword ptr [rax], 1 713add word ptr [rax], 1 714add byte ptr [rax], 1 715// CHECK: addq $1, (%rax) 716// CHECK: addl $1, (%rax) 717// CHECK: addw $1, (%rax) 718// CHECK: addb $1, (%rax) 719 720fstp tbyte ptr [rax] 721fstp xword ptr [rax] 722fstp qword ptr [rax] 723fstp dword ptr [rax] 724// CHECK: fstpt (%rax) 725// CHECK: fstpt (%rax) 726// CHECK: fstpl (%rax) 727// CHECK: fstps (%rax) 728 729fxsave [eax] 730fsave [eax] 731fxrstor [eax] 732frstor [eax] 733// CHECK: fxsave (%eax) 734// CHECK: wait 735// CHECK: fnsave (%eax) 736// CHECK: fxrstor (%eax) 737// CHECK: frstor (%eax) 738 739// FIXME: Should we accept this? Masm accepts it, but gas does not. 740fxsave dword ptr [eax] 741fsave dword ptr [eax] 742fxrstor dword ptr [eax] 743frstor dword ptr [eax] 744// CHECK: fxsave (%eax) 745// CHECK: wait 746// CHECK: fnsave (%eax) 747// CHECK: fxrstor (%eax) 748// CHECK: frstor (%eax) 749 750// CHECK: cmpnless %xmm1, %xmm0 751cmpnless xmm0, xmm1 752 753insb 754insw 755insd 756// CHECK: insb %dx, %es:(%rdi) 757// CHECK: insw %dx, %es:(%rdi) 758// CHECK: insl %dx, %es:(%rdi) 759 760outsb 761outsw 762outsd 763// CHECK: outsb (%rsi), %dx 764// CHECK: outsw (%rsi), %dx 765// CHECK: outsl (%rsi), %dx 766 767imul bx, 123 768imul ebx, 123 769imul rbx, 123 770// CHECK: imulw $123, %bx 771// CHECK: imull $123, %ebx 772// CHECK: imulq $123, %rbx 773 774repe cmpsb 775repz cmpsb 776repne cmpsb 777repnz cmpsb 778// CHECK: rep 779// CHECK: cmpsb %es:(%rdi), (%rsi) 780// CHECK: rep 781// CHECK: cmpsb %es:(%rdi), (%rsi) 782// CHECK: repne 783// CHECK: cmpsb %es:(%rdi), (%rsi) 784// CHECK: repne 785// CHECK: cmpsb %es:(%rdi), (%rsi) 786 787sal eax, 123 788// CHECK: shll $123, %eax 789 790psignw mm0, MMWORD PTR t2 791// CHECK: psignw t2, %mm0 792 793comisd xmm0, QWORD PTR [eax] 794comiss xmm0, DWORD PTR [eax] 795vcomisd xmm0, QWORD PTR [eax] 796vcomiss xmm0, DWORD PTR [eax] 797 798// CHECK: comisd (%eax), %xmm0 799// CHECK: comiss (%eax), %xmm0 800// CHECK: vcomisd (%eax), %xmm0 801// CHECK: vcomiss (%eax), %xmm0 802 803fbld tbyte ptr [eax] 804fbstp tbyte ptr [eax] 805// CHECK: fbld (%eax) 806// CHECK: fbstp (%eax) 807 808fld float ptr [rax] 809fld double ptr [rax] 810// CHECK: flds (%rax) 811// CHECK: fldl (%rax) 812 813fcomip st, st(2) 814fucomip st, st(2) 815// CHECK: fcompi %st(2) 816// CHECK: fucompi %st(2) 817 818loopz _foo 819loopnz _foo 820// CHECK: loope _foo 821// CHECK: loopne _foo 822 823sidt fword ptr [eax] 824// CHECK: sidtq (%eax) 825 826ins byte ptr [eax], dx 827// CHECK: insb %dx, %es:(%edi) 828// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location 829// CHECK-STDERR-NEXT: ins byte ptr [eax], dx 830outs dx, word ptr [eax] 831// CHECK: outsw (%esi), %dx 832// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location 833// CHECK-STDERR-NEXT: outs dx, word ptr [eax] 834lods dword ptr [eax] 835// CHECK: lodsl (%esi), %eax 836// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location 837// CHECK-STDERR-NEXT: lods dword ptr [eax] 838stos qword ptr [eax] 839// CHECK: stosq %rax, %es:(%edi) 840// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location 841// CHECK-STDERR-NEXT: stos qword ptr [eax] 842scas byte ptr [eax] 843// CHECK: scasb %es:(%edi), %al 844// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location 845// CHECK-STDERR-NEXT: scas byte ptr [eax] 846cmps word ptr [eax], word ptr [ebx] 847// CHECK: cmpsw %es:(%edi), (%esi) 848// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location 849// CHECK-STDERR-NEXT: cmps word ptr [eax], word ptr [ebx] 850// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location 851// CHECK-STDERR-NEXT: cmps word ptr [eax], word ptr [ebx] 852movs dword ptr [eax], dword ptr [ebx] 853// CHECK: movsl (%esi), %es:(%edi) 854// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)DI will be used for the location 855// CHECK-STDERR-NEXT: movs dword ptr [eax], dword ptr [ebx] 856// CHECK-STDERR: memory operand is only for determining the size, ES:(R|E)SI will be used for the location 857// CHECK-STDERR-NEXT: movs dword ptr [eax], dword ptr [ebx] 858 859movsd qword ptr [rax], xmm0 860// CHECK: movsd %xmm0, (%rax) 861// CHECK-STDERR-NOT: movsd qword ptr [rax], xmm0 862 863xlat byte ptr [eax] 864// CHECK: xlatb 865// CHECK-STDERR: memory operand is only for determining the size, (R|E)BX will be used for the location 866 867// CHECK: punpcklbw 868punpcklbw mm0, dword ptr [rsp] 869// CHECK: punpcklwd 870punpcklwd mm0, dword ptr [rsp] 871// CHECK: punpckldq 872punpckldq mm0, dword ptr [rsp] 873 874// CHECK: lslq (%eax), %rbx 875lsl rbx, word ptr [eax] 876 877// CHECK: lsll (%eax), %ebx 878lsl ebx, word ptr [eax] 879 880// CHECK: lslw (%eax), %bx 881lsl bx, word ptr [eax] 882 883// CHECK: sysexitl 884sysexit 885// CHECK: sysexitq 886sysexitq 887// CHECK: sysretl 888sysret 889// CHECK: sysretq 890sysretq 891 892// CHECK: leaq (%rsp,%rax), %rax 893lea rax, [rax+rsp] 894// CHECK: leaq (%rsp,%rax), %rax 895lea rax, [rsp+rax] 896// CHECK: leal (%esp,%eax), %eax 897lea eax, [eax+esp] 898// CHECK: leal (%esp,%eax), %eax 899lea eax, [esp+eax] 900 901// CHECK: vpgatherdq %ymm2, (%rdi,%xmm1), %ymm0 902vpgatherdq ymm0, [rdi+xmm1], ymm2 903// CHECK: vpgatherdq %ymm2, (%rdi,%xmm1), %ymm0 904vpgatherdq ymm0, [xmm1+rdi], ymm2 905