Replace all instances of dg.exp file with lit.local.cfg, since all tests are run...
[oota-llvm.git] / test / MC / X86 / x86-64.s
index 32c1e526d02ac1dc3b93bda8587ec85293372d42..4ec579a7a1f039214044606b57a0e900b5771640 100644 (file)
@@ -2,6 +2,18 @@
 // RUN: FileCheck < %t %s
 // RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
 
+       monitor
+// CHECK: monitor
+// CHECK: encoding: [0x0f,0x01,0xc8]
+       monitor %rax, %rcx, %rdx
+// CHECK: monitor
+// CHECK: encoding: [0x0f,0x01,0xc8]
+       mwait
+// CHECK: mwait
+// CHECK: encoding: [0x0f,0x01,0xc9]
+       mwait %rax, %rcx
+// CHECK: mwait
+// CHECK: encoding: [0x0f,0x01,0xc9]
 
 // Suffix inference:
 
 // rdar://8470918
 smovb // CHECK: movsb
 smovw // CHECK: movsw
-smovl // CHECK: movsl
+smovl // CHECK: movsd
 smovq // CHECK: movsq
 
 // rdar://8456361
 // CHECK: rep
-// CHECK: movsl
+// CHECK: movsd
         rep movsd
 
 // CHECK: rep
@@ -178,6 +190,10 @@ fadd %st(7)
 // CHECK: int3
 INT3
 
+// rdar://8735979 - int $3 -> int3
+// CHECK: int3
+int    $3
+
 
 // Allow scale factor without index register.
 // CHECK: movaps       %xmm3, (%esi)
@@ -203,6 +219,12 @@ inb        $161, %al
 // CHECK: pushq        $1
 push $1
 
+// rdar://9716860
+pushq $1
+// CHECK: encoding: [0x6a,0x01]
+pushq $1111111
+// CHECK: encoding: [0x68,0x47,0xf4,0x10,0x00]
+
 // rdar://8017530
 // CHECK: sldtw        4
 sldt   4
@@ -216,10 +238,10 @@ cmovnzq %rbx, %rax
 
 // rdar://8407928
 // CHECK: inb  $127, %al
-// CHECK: inw  %dx, %ax
+// CHECK: inw  %dx
 // CHECK: outb %al, $127
-// CHECK: outw %ax, %dx
-// CHECK: inl  %dx, %eax
+// CHECK: outw %dx
+// CHECK: inl  %dx
 inb    $0x7f
 inw    %dx
 outb   $0x7f
@@ -228,27 +250,46 @@ inl       %dx
 
 
 // PR8114
-// CHECK: outb %al, %dx
-// CHECK: outw %ax, %dx
-// CHECK: outl %eax, %dx
-
-out %al, (%dx)
-out %ax, (%dx)
-outl %eax, (%dx)
-
+// CHECK: outb %dx
+// CHECK: outb %dx
+// CHECK: outw %dx
+// CHECK: outw %dx
+// CHECK: outl %dx
+// CHECK: outl %dx
+
+out    %al, (%dx)
+outb   %al, (%dx)
+out    %ax, (%dx)
+outw   %ax, (%dx)
+out    %eax, (%dx)
+outl   %eax, (%dx)
+
+// CHECK: inb  %dx
+// CHECK: inb  %dx
+// CHECK: inw  %dx
+// CHECK: inw  %dx
+// CHECK: inl  %dx
+// CHECK: inl  %dx
+
+in     (%dx), %al
+inb    (%dx), %al
+in     (%dx), %ax
+inw    (%dx), %ax
+in     (%dx), %eax
+inl    (%dx), %eax
 
 // rdar://8431422
 
-// CHECK: fxch %st(1)
-// CHECK: fucom        %st(1)
-// CHECK: fucomp       %st(1)
-// CHECK: faddp        %st(1)
+// CHECK: fxch
+// CHECK: fucom
+// CHECK: fucomp
+// CHECK: faddp
 // CHECK: faddp        %st(0)
-// CHECK: fsubp        %st(1)
-// CHECK: fsubrp       %st(1)
-// CHECK: fmulp        %st(1)
-// CHECK: fdivp        %st(1)
-// CHECK: fdivrp       %st(1)
+// CHECK: fsubp
+// CHECK: fsubrp
+// CHECK: fmulp
+// CHECK: fdivp
+// CHECK: fdivrp
 
 fxch
 fucom
@@ -261,11 +302,11 @@ fmulp
 fdivp
 fdivrp
 
-// CHECK: fcomi        %st(1), %st(0)
-// CHECK: fcomi        %st(2), %st(0)
-// CHECK: fucomi       %st(1), %st(0)
-// CHECK: fucomi       %st(2), %st(0)
-// CHECK: fucomi       %st(2), %st(0)
+// CHECK: fcomi
+// CHECK: fcomi        %st(2)
+// CHECK: fucomi
+// CHECK: fucomi %st(2)
+// CHECK: fucomi %st(2)
 
 fcomi
 fcomi  %st(2)
@@ -273,10 +314,10 @@ fucomi
 fucomi %st(2)
 fucomi %st(2), %st
 
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
+// CHECK: fnstsw
+// CHECK: fnstsw
+// CHECK: fnstsw
+// CHECK: fnstsw
 
 fnstsw
 fnstsw %ax
@@ -284,16 +325,19 @@ fnstsw %eax
 fnstsw %al
 
 // rdar://8431880
-// CHECK: rclb $1, %bl
-// CHECK: rcll $1, 3735928559(%ebx,%ecx,8)
-// CHECK: rcrl $1, %ecx
-// CHECK: rcrl $1, 305419896
-
+// CHECK: rclb %bl
+// CHECK: rcll 3735928559(%ebx,%ecx,8)
+// CHECK: rcrl %ecx
+// CHECK: rcrl 305419896
 rcl    %bl
 rcll   0xdeadbeef(%ebx,%ecx,8)
 rcr    %ecx
 rcrl   0x12345678
 
+rclb   %bl       // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
+rclb   $1, %bl   // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
+rclb   $2, %bl   // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02]
+
 // rdar://8418316
 // CHECK: shldw        $1, %bx, %bx
 // CHECK: shldw        $1, %bx, %bx
@@ -331,11 +375,6 @@ enter $0x7ace,$1
 enter $0x7ace,$0x7f
 
 
-// rdar://8456389
-// CHECK: fstps        (%eax)
-// CHECK: encoding: [0x67,0xd9,0x18]
-fstp   (%eax)
-
 // rdar://8456364
 // CHECK: movw %cs, %ax
 mov %CS, %ax
@@ -420,11 +459,12 @@ cwtl  // CHECK: cwtl
 cbw   // CHECK: cbtw
 cwd   // CHECK: cwtd
 cdq   // CHECK: cltd
+cqo   // CHECK: cqto
 
 // rdar://8456378 and PR7557 - fstsw
 fstsw %ax
 // CHECK: wait
-// CHECK: fnstsw %ax
+// CHECK: fnstsw
 fstsw (%rax)
 // CHECK: wait
 // CHECK: fnstsw (%rax)
@@ -506,6 +546,10 @@ fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
 
+// also PR8861
+fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
+fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
+
 
 movl   foo(%rip), %eax
 // CHECK: movl foo(%rip), %eax
@@ -567,7 +611,7 @@ movsq
 // CHECK:   encoding: [0x48,0xa5]
 
 movsl
-// CHECK: movsl
+// CHECK: movsd
 // CHECK:   encoding: [0xa5]
 
 stosq
@@ -634,6 +678,10 @@ movl       0, %eax   // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00
 // CHECK: encoding: [0x75,A]
         jnz 0
 
+// PR9264
+btl    $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
+bt     $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
+
 // rdar://8017515
 btq $0x01,%rdx
 // CHECK: btq  $1, %rdx
@@ -648,9 +696,57 @@ btq $0x01,%rdx
 // CHECK:  encoding: [0x48,0x0f,0xb6,0xf0]
         movzx %al, %rsi
 
-// CHECK: movzbq       (%rsp), %rsi
-// CHECK:  encoding: [0x48,0x0f,0xb6,0x34,0x24]
-        movzx 0(%rsp), %rsi
+// CHECK: movsbw       %al, %ax
+// CHECK: encoding: [0x66,0x0f,0xbe,0xc0]
+movsx %al, %ax
+
+// CHECK: movsbl       %al, %eax
+// CHECK: encoding: [0x0f,0xbe,0xc0]
+movsx %al, %eax
+
+// CHECK: movswl       %ax, %eax
+// CHECK: encoding: [0x0f,0xbf,0xc0]
+movsx %ax, %eax
+
+// CHECK: movsbq       %bl, %rax
+// CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
+movsx %bl, %rax
+
+// CHECK: movswq %cx, %rax
+// CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
+movsx %cx, %rax
+
+// CHECK: movslq       %edi, %rax
+// CHECK: encoding: [0x48,0x63,0xc7]
+movsx %edi, %rax
+
+// CHECK: movzbw       %al, %ax
+// CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
+movzx %al, %ax
+
+// CHECK: movzbl       %al, %eax
+// CHECK: encoding: [0x0f,0xb6,0xc0]
+movzx %al, %eax
+
+// CHECK: movzwl       %ax, %eax
+// CHECK: encoding: [0x0f,0xb7,0xc0]
+movzx %ax, %eax
+
+// CHECK: movzbq       %bl, %rax
+// CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
+movzx %bl, %rax
+
+// CHECK: movzwq       %cx, %rax
+// CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
+movzx %cx, %rax
+
+// CHECK: movsbw       (%rax), %ax
+// CHECK: encoding: [0x66,0x0f,0xbe,0x00]
+movsx (%rax), %ax
+
+// CHECK: movzbw       (%rax), %ax
+// CHECK: encoding: [0x66,0x0f,0xb6,0x00]
+movzx (%rax), %ax
 
 
 // rdar://7873482
@@ -692,11 +788,16 @@ lock  incl 1(%rsp)
 // CHECK: lock
 // CHECK: incl 1(%rsp)
 
+// rdar://8741045
+lock/incl 1(%rsp)
+// CHECK: lock
+// CHECK: incl 1(%rsp)
+
 // rdar://8033482
 rep movsl
 // CHECK: rep
 // CHECK: encoding: [0xf3]
-// CHECK: movsl
+// CHECK: movsd
 // CHECK: encoding: [0xa5]
 
 
@@ -723,6 +824,11 @@ iretq
 // CHECK:  encoding: [0x66,0xca,0xce,0x7a]
                lretw   $0x7ace
 
+// PR8592
+lretq  // CHECK: lretq # encoding: [0x48,0xcb]
+lretl  // CHECK: lretl # encoding: [0xcb]
+lret   // CHECK: lretl # encoding: [0xcb]
+
 // rdar://8403907
 sysret
 // CHECK: sysretl
@@ -795,3 +901,306 @@ decb %al  // CHECK:       decb    %al # encoding: [0xfe,0xc8]
 decw %ax  // CHECK:    decw    %ax # encoding: [0x66,0xff,0xc8]
 decl %eax // CHECK:    decl    %eax # encoding: [0xff,0xc8]
 
+// rdar://8416805
+// CHECK: lgdt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x50,0x04]
+               lgdt    4(%rax)
+
+// CHECK: lgdt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x50,0x04]
+               lgdtq   4(%rax)
+
+// CHECK: lidt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x58,0x04]
+               lidt    4(%rax)
+
+// CHECK: lidt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x58,0x04]
+               lidtq   4(%rax)
+
+// CHECK: sgdt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x40,0x04]
+               sgdt    4(%rax)
+
+// CHECK: sgdt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x40,0x04]
+               sgdtq   4(%rax)
+
+// CHECK: sidt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x48,0x04]
+               sidt    4(%rax)
+
+// CHECK: sidt 4(%rax)
+// CHECK:  encoding: [0x0f,0x01,0x48,0x04]
+               sidtq   4(%rax)
+
+
+// rdar://8208615
+mov (%rsi), %gs  // CHECK: movl        (%rsi), %gs # encoding: [0x8e,0x2e]
+mov %gs, (%rsi)  // CHECK: movl        %gs, (%rsi) # encoding: [0x8c,0x2e]
+
+
+// rdar://8431864
+       div     %bl,%al
+       div     %bx,%ax
+       div     %ecx,%eax
+       div     0xdeadbeef(%ebx,%ecx,8),%eax
+       div     0x45,%eax
+       div     0x7eed,%eax
+       div     0xbabecafe,%eax
+       div     0x12345678,%eax
+       idiv    %bl,%al
+       idiv    %bx,%ax
+       idiv    %ecx,%eax
+       idiv    0xdeadbeef(%ebx,%ecx,8),%eax
+       idiv    0x45,%eax
+       idiv    0x7eed,%eax
+       idiv    0xbabecafe,%eax
+       idiv    0x12345678,%eax
+
+// PR8524
+movd   %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
+movd   %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
+movq   %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
+movq   %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
+
+rex64 // CHECK: rex64 # encoding: [0x48]
+data16 // CHECK: data16 # encoding: [0x66]
+
+// PR8855
+movq 18446744073709551615,%rbx   // CHECK: movq        -1, %rbx
+
+// PR8946
+movdqu %xmm0, %xmm1 // CHECK: movdqu   %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
+
+// PR8935
+xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
+xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1]
+
+// CHECK: loope 0
+// CHECK: encoding: [0xe1,A]
+       loopz 0
+
+// CHECK: loopne 0
+// CHECK: encoding: [0xe0,A]
+       loopnz 0
+
+// CHECK: outsb # encoding: [0x6e]
+// CHECK: outsb
+// CHECK: outsb
+       outsb
+       outsb   %ds:(%rsi), %dx
+       outsb   (%rsi), %dx
+
+// CHECK: outsw # encoding: [0x66,0x6f]
+// CHECK: outsw
+// CHECK: outsw
+       outsw
+       outsw   %ds:(%rsi), %dx
+       outsw   (%rsi), %dx
+
+// CHECK: outsl # encoding: [0x6f]
+// CHECK: outsl
+       outsl
+       outsl   %ds:(%rsi), %dx
+       outsl   (%rsi), %dx
+
+// CHECK: insb # encoding: [0x6c]
+// CHECK: insb
+       insb
+       insb    %dx, %es:(%rdi)
+
+// CHECK: insw # encoding: [0x66,0x6d]
+// CHECK: insw
+       insw
+       insw    %dx, %es:(%rdi)
+
+// CHECK: insl # encoding: [0x6d]
+// CHECK: insl
+       insl
+       insl    %dx, %es:(%rdi)
+
+// CHECK: movsb # encoding: [0xa4]
+// CHECK: movsb
+// CHECK: movsb
+       movsb
+       movsb   %ds:(%rsi), %es:(%rdi)
+       movsb   (%rsi), %es:(%rdi)
+
+// CHECK: movsw # encoding: [0x66,0xa5]
+// CHECK: movsw
+// CHECK: movsw
+       movsw
+       movsw   %ds:(%rsi), %es:(%rdi)
+       movsw   (%rsi), %es:(%rdi)
+
+// CHECK: movsd # encoding: [0xa5]
+// CHECK: movsd
+// CHECK: movsd
+       movsl
+       movsl   %ds:(%rsi), %es:(%rdi)
+       movsl   (%rsi), %es:(%rdi)
+
+// CHECK: movsq # encoding: [0x48,0xa5]
+// CHECK: movsq
+// CHECK: movsq
+       movsq
+       movsq   %ds:(%rsi), %es:(%rdi)
+       movsq   (%rsi), %es:(%rdi)
+
+// CHECK: lodsb # encoding: [0xac]
+// CHECK: lodsb
+// CHECK: lodsb
+// CHECK: lodsb
+// CHECK: lodsb
+       lodsb
+       lodsb   %ds:(%rsi), %al
+       lodsb   (%rsi), %al
+       lods    %ds:(%rsi), %al
+       lods    (%rsi), %al
+
+// CHECK: lodsw # encoding: [0x66,0xad]
+// CHECK: lodsw
+// CHECK: lodsw
+// CHECK: lodsw
+// CHECK: lodsw
+       lodsw
+       lodsw   %ds:(%rsi), %ax
+       lodsw   (%rsi), %ax
+       lods    %ds:(%rsi), %ax
+       lods    (%rsi), %ax
+
+// CHECK: lodsl # encoding: [0xad]
+// CHECK: lodsl
+// CHECK: lodsl
+// CHECK: lodsl
+// CHECK: lodsl
+       lodsl
+       lodsl   %ds:(%rsi), %eax
+       lodsl   (%rsi), %eax
+       lods    %ds:(%rsi), %eax
+       lods    (%rsi), %eax
+
+// CHECK: lodsq # encoding: [0x48,0xad]
+// CHECK: lodsq
+// CHECK: lodsq
+// CHECK: lodsq
+// CHECK: lodsq
+       lodsq
+       lodsq   %ds:(%rsi), %rax
+       lodsq   (%rsi), %rax
+       lods    %ds:(%rsi), %rax
+       lods    (%rsi), %rax
+
+// CHECK: stosb # encoding: [0xaa]
+// CHECK: stosb
+// CHECK: stosb
+       stosb
+       stosb   %al, %es:(%rdi)
+       stos    %al, %es:(%rdi)
+
+// CHECK: stosw # encoding: [0x66,0xab]
+// CHECK: stosw
+// CHECK: stosw
+       stosw
+       stosw   %ax, %es:(%rdi)
+       stos    %ax, %es:(%rdi)
+
+// CHECK: stosl # encoding: [0xab]
+// CHECK: stosl
+// CHECK: stosl
+       stosl
+       stosl   %eax, %es:(%rdi)
+       stos    %eax, %es:(%rdi)
+
+// CHECK: stosq # encoding: [0x48,0xab]
+// CHECK: stosq
+// CHECK: stosq
+       stosq
+       stosq   %rax, %es:(%rdi)
+       stos    %rax, %es:(%rdi)
+
+// CHECK: strw
+// CHECK: encoding: [0x66,0x0f,0x00,0xc8]
+       str %ax
+
+// CHECK: strl
+// CHECK: encoding: [0x0f,0x00,0xc8]
+       str %eax
+
+// CHECK: strw
+// CHECK: encoding: [0x66,0x0f,0x00,0xc8]
+       str %ax
+
+// CHECK: strq
+// CHECK: encoding: [0x48,0x0f,0x00,0xc8]
+       str %rax
+
+// CHECK: movd %rdi, %xmm0
+// CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
+       movq %rdi,%xmm0
+
+// CHECK: movd %rdi, %xmm0
+// CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
+       movd %rdi,%xmm0
+
+// CHECK: movntil %eax, (%rdi)
+// CHECK: encoding: [0x0f,0xc3,0x07]
+// CHECK: movntil
+movntil %eax, (%rdi)
+movnti %eax, (%rdi)
+
+// CHECK: movntiq %rax, (%rdi)
+// CHECK: encoding: [0x48,0x0f,0xc3,0x07]
+// CHECK: movntiq
+movntiq %rax, (%rdi)
+movnti %rax, (%rdi)
+
+// CHECK: pclmulqdq    $17, %xmm0, %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x11]
+pclmulhqhqdq %xmm0, %xmm1
+
+// CHECK: pclmulqdq    $1, %xmm0, %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x01]
+pclmulqdq $1, %xmm0, %xmm1
+
+// CHECK: pclmulqdq    $16, (%rdi), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x10]
+pclmullqhqdq (%rdi), %xmm1
+
+// CHECK: pclmulqdq    $0, (%rdi), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x00]
+pclmulqdq $0, (%rdi), %xmm1
+
+// PR10345
+// CHECK: xchgq %rax, %rax
+// CHECK: encoding: [0x48,0x90]
+xchgq %rax, %rax
+
+// CHECK: xchgl %eax, %eax
+// CHECK: encoding: [0x87,0xc0]
+xchgl %eax, %eax
+
+// CHECK: xchgw %ax, %ax
+// CHECK: encoding: [0x66,0x90]
+xchgw %ax, %ax
+
+// CHECK: xchgl %ecx, %eax
+// CHECK: encoding: [0x91]
+xchgl %ecx, %eax
+
+// CHECK: xchgl %ecx, %eax
+// CHECK: encoding: [0x91]
+xchgl %eax, %ecx
+
+// CHECK: sysexit
+// CHECK: encoding: [0x0f,0x35]
+sysexit
+
+// CHECK: sysexitl
+// CHECK: encoding: [0x0f,0x35]
+sysexitl
+
+// CHECK: sysexitq
+// CHECK: encoding: [0x48,0x0f,0x35]
+sysexitq