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
This commit is contained in:
Craig Topper 2011-10-07 07:02:24 +00:00
parent e8deca83c1
commit 75fe5f3bab
2 changed files with 47 additions and 0 deletions

View File

@ -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;
}

View File

@ -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