1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

Fixed encodings for invlpg, invept, and invvpid.

llvm-svn: 96065
This commit is contained in:
Sean Callanan 2010-02-13 01:48:34 +00:00
parent 09733841aa
commit 9806eade6e
2 changed files with 10 additions and 35 deletions

View File

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

View File

@ -584,30 +584,6 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
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;
ModRMFilter* filter = NULL;
@ -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: