Add X86 disassembler support for XSAVE, XRSTOR, and XSAVEOPT.
authorCraig Topper <craig.topper@gmail.com>
Fri, 7 Oct 2011 05:53:50 +0000 (05:53 +0000)
committerCraig Topper <craig.topper@gmail.com>
Fri, 7 Oct 2011 05:53:50 +0000 (05:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141354 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrSystem.td
test/MC/Disassembler/X86/simple-tests.txt
test/MC/Disassembler/X86/x86-32.txt

index a22a4c90d14b637e0e84089b1a77dab4793489e7..6c880ed6f9159a7b5cb5a498dad425acc33902d3 100644 (file)
@@ -406,6 +406,21 @@ let Defs = [RDX, RAX], Uses = [RCX] in
 let Uses = [RDX, RAX, RCX] in
   def XSETBV : I<0x01, MRM_D1, (outs), (ins), "xsetbv", []>, TB;
 
+let Uses = [RDX, RAX] in {
+  def XSAVE : I<0xAE, MRM4m, (outs opaque512mem:$dst), (ins),
+               "xsave\t$dst", []>, TB;
+  def XSAVE64 : I<0xAE, MRM4m, (outs opaque512mem:$dst), (ins),
+                 "xsaveq\t$dst", []>, TB, REX_W, Requires<[In64BitMode]>;
+  def XRSTOR : I<0xAE, MRM5m, (outs), (ins opaque512mem:$dst),
+               "xrstor\t$dst", []>, TB;
+  def XRSTOR64 : I<0xAE, MRM5m, (outs), (ins opaque512mem:$dst),
+                 "xrstorq\t$dst", []>, TB, REX_W, Requires<[In64BitMode]>;
+  def XSAVEOPT : I<0xAE, MRM6m, (outs opaque512mem:$dst), (ins),
+                  "xsaveopt\t$dst", []>, TB;
+  def XSAVEOPT64 : I<0xAE, MRM6m, (outs opaque512mem:$dst), (ins),
+                    "xsaveoptq\t$dst", []>, TB, REX_W, Requires<[In64BitMode]>;
+}
+
 //===----------------------------------------------------------------------===//
 // VIA PadLock crypto instructions
 let Defs = [RAX, RDI], Uses = [RDX, RDI] in
index 5a16e7d22fd794cb9b87df637357b93ab5823067..34d25caba4f18df1362c4d6cd0aa69ead5c1a0e6 100644 (file)
 
 # CHECK: vaddss %xmm1, %xmm0, %xmm0
 0xc5 0xfe 0x58 0xc1
+
+# CHECK: xsave (%rax)
+0x0f 0xae 0x20
+
+# CHECK: xrstor (%rax)
+0x0f 0xae 0x28
+
+# CHECK: xsaveopt (%rax)
+0x0f 0xae 0x30
index 1292ed1356158cc8b9759ad18bc6ba500269b952..59438f1d27d82b8b25c52839e8b09e4802eda650 100644 (file)
 
 # CHECK: vaddss %xmm1, %xmm0, %xmm0
 0xc5 0xfe 0x58 0xc1
+
+# CHECK: xsave (%eax)
+0x0f 0xae 0x20
+
+# CHECK: xrstor (%eax)
+0x0f 0xae 0x28
+
+# CHECK: xsaveopt (%eax)
+0x0f 0xae 0x30