Fixed encodings for invlpg, invept, and invvpid.
[oota-llvm.git] / utils / TableGen / X86RecognizableInstr.cpp
index f53927ded7ca5768659e56d604ed8b34c5916ee8..0a85eb8380e517dd938c6cdff96a461dd247e760 100644 (file)
@@ -26,10 +26,14 @@ using namespace llvm;
 
 #define MRM_MAPPING     \
   MAP(C1, 33)           \
-  MAP(C8, 34)           \
-  MAP(C9, 35)           \
-  MAP(E8, 36)           \
-  MAP(F0, 37)
+  MAP(C2, 34)           \
+  MAP(C3, 35)           \
+  MAP(C4, 36)           \
+  MAP(C8, 37)           \
+  MAP(C9, 38)           \
+  MAP(E8, 39)           \
+  MAP(F0, 40)           \
+  MAP(F8, 41)
 
 // A clone of X86 since we can't depend on something that is generated.
 namespace X86Local {
@@ -579,34 +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, "SWPGS",    0xf8)
-  EXACTCASE(TWOBYTE, "INVEPT",   0x80)
-  EXACTCASE(TWOBYTE, "INVVPID",  0x81)
-  EXACTCASE(TWOBYTE, "VMLAUNCH", 0xc2)
-  EXACTCASE(TWOBYTE, "VMRESUME", 0xc3)
-  EXACTCASE(TWOBYTE, "VMXOFF",   0xc4)
-
-  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: