mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 23:48:56 +00:00
Fixed encodings for invlpg, invept, and invvpid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96065 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e9a60eb498
commit
95a5a7d570
@ -4077,7 +4077,7 @@ def LSL32rm : I<0x03, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
|
||||
def LSL32rr : I<0x03, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"lsl{l}\t{$src, $dst|$dst, $src}", []>, TB;
|
||||
|
||||
def INVLPG : I<0x01, RawFrm, (outs), (ins), "invlpg", []>, TB;
|
||||
def INVLPG : I<0x01, MRM7m, (outs), (ins i8mem:$addr), "invlpg\t$addr", []>, TB;
|
||||
|
||||
def STRr : I<0x00, MRM1r, (outs GR16:$dst), (ins),
|
||||
"str{w}\t{$dst}", []>, TB;
|
||||
@ -4239,9 +4239,9 @@ def WBINVD : I<0x09, RawFrm, (outs), (ins), "wbinvd", []>, TB;
|
||||
// VMX instructions
|
||||
|
||||
// 66 0F 38 80
|
||||
def INVEPT : I<0x38, RawFrm, (outs), (ins), "invept", []>, OpSize, TB;
|
||||
def INVEPT : I<0x80, RawFrm, (outs), (ins), "invept", []>, OpSize, T8;
|
||||
// 66 0F 38 81
|
||||
def INVVPID : I<0x38, RawFrm, (outs), (ins), "invvpid", []>, OpSize, TB;
|
||||
def INVVPID : I<0x81, RawFrm, (outs), (ins), "invvpid", []>, OpSize, T8;
|
||||
// 0F 01 C1
|
||||
def VMCALL : I<0x01, MRM_C1, (outs), (ins), "vmcall", []>, TB;
|
||||
def VMCLEARm : I<0xC7, MRM6m, (outs), (ins i64mem:$vmcs),
|
||||
|
@ -583,30 +583,6 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
|
||||
case X86Local::MRM_##from: \
|
||||
filter = new ExactFilter(0x##from); \
|
||||
break;
|
||||
|
||||
#define EXACTCASE(class, name, lastbyte) \
|
||||
if (Name == name) { \
|
||||
tables.setTableFields(class, \
|
||||
insnContext(), \
|
||||
Opcode, \
|
||||
ExactFilter(lastbyte), \
|
||||
UID); \
|
||||
Spec->modifierBase = Opcode; \
|
||||
return; \
|
||||
}
|
||||
|
||||
EXACTCASE(TWOBYTE, "INVEPT", 0x80)
|
||||
EXACTCASE(TWOBYTE, "INVVPID", 0x81)
|
||||
|
||||
if (Name == "INVLPG") {
|
||||
tables.setTableFields(TWOBYTE,
|
||||
insnContext(),
|
||||
Opcode,
|
||||
ExtendedFilter(false, 7),
|
||||
UID);
|
||||
Spec->modifierBase = Opcode;
|
||||
return;
|
||||
}
|
||||
|
||||
OpcodeType opcodeType = (OpcodeType)-1;
|
||||
|
||||
@ -621,6 +597,12 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
|
||||
opcodeType = TWOBYTE;
|
||||
|
||||
switch (Opcode) {
|
||||
default:
|
||||
if (needsModRMForDecode(Form))
|
||||
filter = new ModFilter(isRegFormat(Form));
|
||||
else
|
||||
filter = new DumbFilter();
|
||||
break;
|
||||
#define EXTENSION_TABLE(n) case 0x##n:
|
||||
TWO_BYTE_EXTENSION_TABLES
|
||||
#undef EXTENSION_TABLE
|
||||
@ -650,14 +632,7 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
|
||||
MRM_MAPPING
|
||||
} // switch (Form)
|
||||
break;
|
||||
default:
|
||||
if (needsModRMForDecode(Form))
|
||||
filter = new ModFilter(isRegFormat(Form));
|
||||
else
|
||||
filter = new DumbFilter();
|
||||
|
||||
break;
|
||||
} // switch (opcode)
|
||||
} // switch (Opcode)
|
||||
opcodeToSet = Opcode;
|
||||
break;
|
||||
case X86Local::T8:
|
||||
|
Loading…
Reference in New Issue
Block a user