Implement major new fastisel functionality: the matcher can now handle immediates...
[oota-llvm.git] / test / MC / X86 / x86-64.s
index a285c6f6456640becbd4ec3fc99ad7bd719dc834..fe08559be6f6c435c82907ad2c83332f87d00dee 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)
@@ -216,10 +232,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 +244,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 +296,11 @@ fmulp
 fdivp
 fdivrp
 
-// CHECK: fcomi        %st(1)
+// CHECK: fcomi
 // CHECK: fcomi        %st(2)
-// CHECK: fucomi       %st(1)
-// CHECK: fucomi       %st(2)
-// CHECK: fucomi       %st(2)
+// CHECK: fucomi
+// CHECK: fucomi %st(2)
+// CHECK: fucomi %st(2)
 
 fcomi
 fcomi  %st(2)
@@ -504,6 +539,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
@@ -565,7 +604,7 @@ movsq
 // CHECK:   encoding: [0x48,0xa5]
 
 movsl
-// CHECK: movsl
+// CHECK: movsd
 // CHECK:   encoding: [0xa5]
 
 stosq
@@ -632,6 +671,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
@@ -747,7 +790,7 @@ lock/incl 1(%rsp)
 rep movsl
 // CHECK: rep
 // CHECK: encoding: [0xf3]
-// CHECK: movsl
+// CHECK: movsd
 // CHECK: encoding: [0xa5]
 
 
@@ -916,3 +959,172 @@ 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