From: Craig Topper Date: Fri, 7 Oct 2011 05:53:50 +0000 (+0000) Subject: Add X86 disassembler support for XSAVE, XRSTOR, and XSAVEOPT. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1b526a98e367c9a512a082a0d008123206b2a558;p=oota-llvm.git Add X86 disassembler support for XSAVE, XRSTOR, and XSAVEOPT. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141354 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrSystem.td b/lib/Target/X86/X86InstrSystem.td index a22a4c90d14..6c880ed6f91 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 5a16e7d22fd..34d25caba4f 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 1292ed13561..59438f1d27d 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