Add X86 INVPCID instruction. Add 32/64-bit predicates to INVEPT, INVVPID, VMREAD...
[oota-llvm.git] / test / MC / X86 / x86-32.s
index fd0fd750dfd5f2120fe2aebf1a221c6040e62b88..19f14450fee99763c9604768fb92e52dc6d1c5f0 100644 (file)
 // CHECK: encoding: [0x0f,0xae,0xf0]
        monitor
 // CHECK: monitor
+// CHECK: encoding: [0x0f,0x01,0xc8]
+       monitor %eax, %ecx, %edx
+// CHECK: monitor
 // CHECK: encoding: [0x0f,0x01,0xc8]
        mwait
 // CHECK: mwait
+// CHECK: encoding: [0x0f,0x01,0xc9]
+       mwait %eax, %ecx
+// CHECK: mwait
 // CHECK: encoding: [0x0f,0x01,0xc9]
 
        vmcall
@@ -57,6 +63,11 @@ rdtscp
 // CHECK: shrl %eax                    # encoding: [0xd1,0xe8]
         shrl $1, %eax
 
+// CHECK: shll %eax                    # encoding: [0xd1,0xe0]
+        sall $1, %eax
+// CHECK: shll %eax                    # encoding: [0xd1,0xe0]
+        sal $1, %eax
+
 // moffset forms of moves, rdar://7947184
 movb   0, %al    // CHECK: movb 0, %al  # encoding: [0xa0,A,A,A,A]
 movw   0, %ax    // CHECK: movw 0, %ax  # encoding: [0x66,0xa1,A,A,A,A]
@@ -538,7 +549,10 @@ popfl
        setng   %bl
        setnle  %bl
 
-
+// PR8686
+        setneb  %cl // CHECK: setne %cl
+       setcb   %bl // CHECK: setb %bl
+       setnaeb %bl // CHECK: setb %bl
 
 
 // CHECK: lcalll       $31438, $31438
@@ -583,3 +597,368 @@ ljmp      $0x7ace,$0x7ace
 // CHECK:      decl    %eax # encoding: [0x48]
        decl %eax
 
+// CHECK: pshufw $14, %mm4, %mm0 # encoding: [0x0f,0x70,0xc4,0x0e]
+pshufw $14, %mm4, %mm0
+
+// CHECK: pshufw $90, %mm4, %mm0 # encoding: [0x0f,0x70,0xc4,0x5a]
+// PR8288
+pshufw $90, %mm4, %mm0
+
+// rdar://8416805
+// CHECK: aaa
+// CHECK:  encoding: [0x37]
+               aaa
+
+// CHECK: aad  $1
+// CHECK:  encoding: [0xd5,0x01]
+               aad     $1
+
+// CHECK: aad
+// CHECK:  encoding: [0xd5,0x0a]
+               aad     $0xA
+
+// CHECK: aad
+// CHECK:  encoding: [0xd5,0x0a]
+               aad
+
+// CHECK: aam  $2
+// CHECK:  encoding: [0xd4,0x02]
+               aam     $2
+
+// CHECK: aam
+// CHECK:  encoding: [0xd4,0x0a]
+               aam     $0xA
+
+// CHECK: aam
+// CHECK:  encoding: [0xd4,0x0a]
+               aam
+
+// CHECK: aas
+// CHECK:  encoding: [0x3f]
+               aas
+
+// CHECK: daa
+// CHECK:  encoding: [0x27]
+               daa
+
+// CHECK: das
+// CHECK:  encoding: [0x2f]
+               das
+
+// CHECK: retw $31438
+// CHECK:  encoding: [0x66,0xc2,0xce,0x7a]
+               retw    $0x7ace
+
+// CHECK: lretw        $31438
+// CHECK:  encoding: [0x66,0xca,0xce,0x7a]
+               lretw   $0x7ace
+
+// CHECK: bound        2(%eax), %bx
+// CHECK:  encoding: [0x66,0x62,0x58,0x02]
+               bound   2(%eax),%bx
+
+// CHECK: bound        4(%ebx), %ecx
+// CHECK:  encoding: [0x62,0x4b,0x04]
+               bound   4(%ebx),%ecx
+
+// CHECK: arpl %bx, %bx
+// CHECK:  encoding: [0x63,0xdb]
+               arpl    %bx,%bx
+
+// CHECK: arpl %bx, 6(%ecx)
+// CHECK:  encoding: [0x63,0x59,0x06]
+               arpl    %bx,6(%ecx)
+
+// CHECK: lgdtw        4(%eax)
+// CHECK:  encoding: [0x66,0x0f,0x01,0x50,0x04]
+               lgdtw   4(%eax)
+
+// CHECK: lgdt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x50,0x04]
+               lgdt    4(%eax)
+
+// CHECK: lgdt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x50,0x04]
+               lgdtl   4(%eax)
+
+// CHECK: lidtw        4(%eax)
+// CHECK:  encoding: [0x66,0x0f,0x01,0x58,0x04]
+               lidtw   4(%eax)
+
+// CHECK: lidt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x58,0x04]
+               lidt    4(%eax)
+
+// CHECK: lidt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x58,0x04]
+               lidtl   4(%eax)
+
+// CHECK: sgdtw        4(%eax)
+// CHECK:  encoding: [0x66,0x0f,0x01,0x40,0x04]
+               sgdtw   4(%eax)
+
+// CHECK: sgdt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x40,0x04]
+               sgdt    4(%eax)
+
+// CHECK: sgdt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x40,0x04]
+               sgdtl   4(%eax)
+
+// CHECK: sidtw        4(%eax)
+// CHECK:  encoding: [0x66,0x0f,0x01,0x48,0x04]
+               sidtw   4(%eax)
+
+// CHECK: sidt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x48,0x04]
+               sidt    4(%eax)
+
+// CHECK: sidt 4(%eax)
+// CHECK:  encoding: [0x0f,0x01,0x48,0x04]
+               sidtl   4(%eax)
+
+// CHECK: fcompi       %st(2)
+// CHECK:  encoding: [0xdf,0xf2]
+               fcompi  %st(2), %st
+
+// CHECK: fcompi       %st(2)
+// CHECK:  encoding: [0xdf,0xf2]
+               fcompi  %st(2)
+
+// CHECK: fcompi
+// CHECK:  encoding: [0xdf,0xf1]
+               fcompi
+
+// CHECK: fucompi      %st(2)
+// CHECK:  encoding: [0xdf,0xea]
+               fucompi %st(2),%st
+
+// CHECK: fucompi      %st(2)
+// CHECK:  encoding: [0xdf,0xea]
+               fucompi %st(2)
+
+// CHECK: fucompi
+// CHECK:  encoding: [0xdf,0xe9]
+               fucompi
+
+// CHECK: fldcw        32493
+// CHECK:  encoding: [0xd9,0x2d,0xed,0x7e,0x00,0x00]
+               fldcww  0x7eed
+
+// CHECK: fldcw        32493
+// CHECK:  encoding: [0xd9,0x2d,0xed,0x7e,0x00,0x00]
+               fldcw   0x7eed
+
+// CHECK: fnstcw       32493
+// CHECK:  encoding: [0xd9,0x3d,0xed,0x7e,0x00,0x00]
+               fnstcww 0x7eed
+
+// CHECK: fnstcw       32493
+// CHECK:  encoding: [0xd9,0x3d,0xed,0x7e,0x00,0x00]
+               fnstcw  0x7eed
+
+// CHECK: wait
+// CHECK:  encoding: [0x9b]
+               fstcww  0x7eed
+
+// CHECK: wait
+// CHECK:  encoding: [0x9b]
+               fstcw   0x7eed
+
+// CHECK: fnstsw       32493
+// CHECK:  encoding: [0xdd,0x3d,0xed,0x7e,0x00,0x00]
+               fnstsww 0x7eed
+
+// CHECK: fnstsw       32493
+// CHECK:  encoding: [0xdd,0x3d,0xed,0x7e,0x00,0x00]
+               fnstsw  0x7eed
+
+// CHECK: wait
+// CHECK:  encoding: [0x9b]
+               fstsww  0x7eed
+
+// CHECK: wait
+// CHECK:  encoding: [0x9b]
+               fstsw   0x7eed
+
+// CHECK: verr 32493
+// CHECK:  encoding: [0x0f,0x00,0x25,0xed,0x7e,0x00,0x00]
+               verrw   0x7eed
+
+// CHECK: verr 32493
+// CHECK:  encoding: [0x0f,0x00,0x25,0xed,0x7e,0x00,0x00]
+               verr    0x7eed
+
+// CHECK: wait
+// CHECK:  encoding: [0x9b]
+               fclex
+
+// CHECK: fnclex
+// CHECK:  encoding: [0xdb,0xe2]
+               fnclex
+
+// CHECK: ud2
+// CHECK:  encoding: [0x0f,0x0b]
+               ud2
+
+// CHECK: ud2
+// CHECK:  encoding: [0x0f,0x0b]
+               ud2a
+
+// CHECK: ud2b
+// CHECK:  encoding: [0x0f,0xb9]
+               ud2b
+
+// 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:(%esi), %dx
+       outsb   (%esi), %dx
+
+// CHECK: outsw # encoding: [0x66,0x6f]
+// CHECK: outsw
+// CHECK: outsw
+       outsw
+       outsw   %ds:(%esi), %dx
+       outsw   (%esi), %dx
+
+// CHECK: outsl # encoding: [0x6f]
+// CHECK: outsl
+       outsl
+       outsl   %ds:(%esi), %dx
+       outsl   (%esi), %dx
+
+// CHECK: insb # encoding: [0x6c]
+// CHECK: insb
+       insb
+       insb    %dx, %es:(%edi)
+
+// CHECK: insw # encoding: [0x66,0x6d]
+// CHECK: insw
+       insw
+       insw    %dx, %es:(%edi)
+
+// CHECK: insl # encoding: [0x6d]
+// CHECK: insl
+       insl
+       insl    %dx, %es:(%edi)
+
+// CHECK: movsb # encoding: [0xa4]
+// CHECK: movsb
+// CHECK: movsb
+       movsb
+       movsb   %ds:(%esi), %es:(%edi)
+       movsb   (%esi), %es:(%edi)
+
+// CHECK: movsw # encoding: [0x66,0xa5]
+// CHECK: movsw
+// CHECK: movsw
+       movsw
+       movsw   %ds:(%esi), %es:(%edi)
+       movsw   (%esi), %es:(%edi)
+
+// CHECK: movsd # encoding: [0xa5]
+// CHECK: movsd
+// CHECK: movsd
+       movsl
+       movsl   %ds:(%esi), %es:(%edi)
+       movsl   (%esi), %es:(%edi)
+
+// CHECK: lodsb # encoding: [0xac]
+// CHECK: lodsb
+// CHECK: lodsb
+// CHECK: lodsb
+// CHECK: lodsb
+       lodsb
+       lodsb   %ds:(%esi), %al
+       lodsb   (%esi), %al
+       lods    %ds:(%esi), %al
+       lods    (%esi), %al
+
+// CHECK: lodsw # encoding: [0x66,0xad]
+// CHECK: lodsw
+// CHECK: lodsw
+// CHECK: lodsw
+// CHECK: lodsw
+       lodsw
+       lodsw   %ds:(%esi), %ax
+       lodsw   (%esi), %ax
+       lods    %ds:(%esi), %ax
+       lods    (%esi), %ax
+
+// CHECK: lodsl # encoding: [0xad]
+// CHECK: lodsl
+// CHECK: lodsl
+// CHECK: lodsl
+// CHECK: lodsl
+       lodsl
+       lodsl   %ds:(%esi), %eax
+       lodsl   (%esi), %eax
+       lods    %ds:(%esi), %eax
+       lods    (%esi), %eax
+
+// CHECK: stosb # encoding: [0xaa]
+// CHECK: stosb
+// CHECK: stosb
+       stosb
+       stosb   %al, %es:(%edi)
+       stos    %al, %es:(%edi)
+
+// CHECK: stosw # encoding: [0x66,0xab]
+// CHECK: stosw
+// CHECK: stosw
+       stosw
+       stosw   %ax, %es:(%edi)
+       stos    %ax, %es:(%edi)
+
+// CHECK: stosl # encoding: [0xab]
+// CHECK: stosl
+// CHECK: stosl
+       stosl
+       stosl   %eax, %es:(%edi)
+       stos    %eax, %es:(%edi)
+
+// CHECK: strw
+// CHECK: encoding: [0x66,0x0f,0x00,0xc8]
+       str %ax
+
+// CHECK: strl
+// CHECK: encoding: [0x0f,0x00,0xc8]
+       str %eax
+
+
+// PR9378
+// CHECK: fsubp
+// CHECK: encoding: [0xde,0xe1]
+fsubp %st,%st(1)
+
+// PR9164
+// CHECK: fsubp        %st(2)
+// CHECK: encoding: [0xde,0xe2]
+fsubp   %st, %st(2)
+
+// PR10345
+// CHECK: xchgl %eax, %eax
+// CHECK: encoding: [0x90]
+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