diff options
-rw-r--r-- | lib/Target/X86/X86InstrSystem.td | 15 | ||||
-rw-r--r-- | test/MC/Disassembler/X86/simple-tests.txt | 9 | ||||
-rw-r--r-- | test/MC/Disassembler/X86/x86-32.txt | 9 |
3 files changed, 33 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrSystem.td b/lib/Target/X86/X86InstrSystem.td index a22a4c90d1..6c880ed6f9 100644 --- a/lib/Target/X86/X86InstrSystem.td +++ b/lib/Target/X86/X86InstrSystem.td @@ -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 diff --git a/test/MC/Disassembler/X86/simple-tests.txt b/test/MC/Disassembler/X86/simple-tests.txt index 5a16e7d22f..34d25caba4 100644 --- a/test/MC/Disassembler/X86/simple-tests.txt +++ b/test/MC/Disassembler/X86/simple-tests.txt @@ -422,3 +422,12 @@ # 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 diff --git a/test/MC/Disassembler/X86/x86-32.txt b/test/MC/Disassembler/X86/x86-32.txt index 1292ed1356..59438f1d27 100644 --- a/test/MC/Disassembler/X86/x86-32.txt +++ b/test/MC/Disassembler/X86/x86-32.txt @@ -432,3 +432,12 @@ # 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 |