From 75fe5f3bab7c33c14e5f7956e01a9d95d2712cc5 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 7 Oct 2011 07:02:24 +0000 Subject: [PATCH] Add X86 disassembler support for RDFSBASE, RDGSBASE, WRFSBASE, and WRGSBASE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141358 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrSystem.td | 23 ++++++++++++++++++++++ test/MC/Disassembler/X86/simple-tests.txt | 24 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/lib/Target/X86/X86InstrSystem.td b/lib/Target/X86/X86InstrSystem.td index 6c880ed6f91..05a5b36b95e 100644 --- a/lib/Target/X86/X86InstrSystem.td +++ b/lib/Target/X86/X86InstrSystem.td @@ -400,6 +400,8 @@ def CPUID : I<0xA2, RawFrm, (outs), (ins), "cpuid", []>, TB; def INVD : I<0x08, RawFrm, (outs), (ins), "invd", []>, TB; def WBINVD : I<0x09, RawFrm, (outs), (ins), "wbinvd", []>, TB; +//===----------------------------------------------------------------------===// +// XSAVE instructions let Defs = [RDX, RAX], Uses = [RCX] in def XGETBV : I<0x01, MRM_D0, (outs), (ins), "xgetbv", []>, TB; @@ -442,3 +444,24 @@ let Defs = [RAX, RSI, RDI], Uses = [RAX, RSI, RDI] in { } let Defs = [RAX, RDX, RSI], Uses = [RAX, RSI] in def MONTMUL : I<0xc0, RawFrm, (outs), (ins), "montmul", []>, A6; + +//===----------------------------------------------------------------------===// +// FS/GS Base Instructions +let Predicates = [In64BitMode] in { + def RDFSBASE : I<0xAE, MRM0r, (outs GR32:$dst), (ins), + "rdfsbase{l}\t$dst", []>, TB, XS; + def RDFSBASE64 : RI<0xAE, MRM0r, (outs GR64:$dst), (ins), + "rdfsbase{q}\t$dst", []>, TB, XS; + def RDGSBASE : I<0xAE, MRM1r, (outs GR32:$dst), (ins), + "rdgsbase{l}\t$dst", []>, TB, XS; + def RDGSBASE64 : RI<0xAE, MRM1r, (outs GR64:$dst), (ins), + "rdgsbase{q}\t$dst", []>, TB, XS; + def WRFSBASE : I<0xAE, MRM2r, (outs), (ins GR32:$dst), + "wrfsbase{l}\t$dst", []>, TB, XS; + def WRFSBASE64 : RI<0xAE, MRM2r, (outs), (ins GR64:$dst), + "wrfsbase{q}\t$dst", []>, TB, XS; + def WRGSBASE : I<0xAE, MRM3r, (outs), (ins GR32:$dst), + "wrgsbase{l}\t$dst", []>, TB, XS; + def WRGSBASE64 : RI<0xAE, MRM3r, (outs), (ins GR64:$dst), + "wrgsbase{q}\t$dst", []>, TB, XS; +} diff --git a/test/MC/Disassembler/X86/simple-tests.txt b/test/MC/Disassembler/X86/simple-tests.txt index 34d25caba4f..39e641b18bf 100644 --- a/test/MC/Disassembler/X86/simple-tests.txt +++ b/test/MC/Disassembler/X86/simple-tests.txt @@ -431,3 +431,27 @@ # CHECK: xsaveopt (%rax) 0x0f 0xae 0x30 + +# CHECK rdfsbasel %eax +0xf3 0x0f 0xae 0xc0 + +# CHECK rdgsbasel %eax +0xf3 0x0f 0xae 0xc8 + +# CHECK wrfsbasel %eax +0xf3 0x0f 0xae 0xd0 + +# CHECK wrgsbasel %eax +0xf3 0x0f 0xae 0xd8 + +# CHECK rdfsbaseq %rax +0xf3 0x48 0x0f 0xae 0xc0 + +# CHECK rdgsbaseq %rax +0xf3 0x48 0x0f 0xae 0xc8 + +# CHECK wrfsbaseq %rax +0xf3 0x48 0x0f 0xae 0xd0 + +# CHECK wrgsbaseq %rax +0xf3 0x48 0x0f 0xae 0xd8