remove special cases for vmlaunch, vmresume, vmxoff, and swapgs
authorChris Lattner <sabre@nondot.org>
Sat, 13 Feb 2010 00:41:14 +0000 (00:41 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 13 Feb 2010 00:41:14 +0000 (00:41 +0000)
fix swapgs to be spelled right.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96058 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86Instr64bit.td
lib/Target/X86/X86InstrFormats.td
lib/Target/X86/X86InstrInfo.h
lib/Target/X86/X86InstrInfo.td
lib/Target/X86/X86MCCodeEmitter.cpp
test/MC/AsmParser/X86/x86_32-new-encoder.s
test/MC/Disassembler/simple-tests.txt
utils/TableGen/X86RecognizableInstr.cpp

index 0d7bfeb81b27aff0003141fbc3929e46bc5f55e0..4ea3739629a9817a92d1615c217e51cee7ab2319 100644 (file)
@@ -1774,7 +1774,7 @@ def LSL64rm : RI<0x03, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
 def LSL64rr : RI<0x03, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
                  "lsl{q}\t{$src, $dst|$dst, $src}", []>, TB;
 
-def SWPGS : I<0x01, RawFrm, (outs), (ins), "swpgs", []>, TB;
+def SWAPGS : I<0x01, MRM_F8, (outs), (ins), "swapgs", []>, TB;
 
 def PUSHFS64 : I<0xa0, RawFrm, (outs), (ins),
                  "push{q}\t%fs", []>, TB;
index 8e3e514d58d917ac5230b15b15db41ec981fb4b9..8b934e0f86fbde3a1b2839cc6a519c8e9245f5c6 100644 (file)
@@ -30,10 +30,14 @@ def MRM3m  : Format<27>; def MRM4m  : Format<28>; def MRM5m  : Format<29>;
 def MRM6m  : Format<30>; def MRM7m  : Format<31>;
 def MRMInitReg : Format<32>;
 def MRM_C1 : Format<33>;
-def MRM_C8 : Format<34>;
-def MRM_C9 : Format<35>;
-def MRM_E8 : Format<36>;
-def MRM_F0 : Format<37>;
+def MRM_C2 : Format<34>;
+def MRM_C3 : Format<35>;
+def MRM_C4 : Format<36>;
+def MRM_C8 : Format<37>;
+def MRM_C9 : Format<38>;
+def MRM_E8 : Format<39>;
+def MRM_F0 : Format<40>;
+def MRM_F8 : Format<41>;
 
 
 // ImmType - This specifies the immediate type used by an instruction. This is
index 38721609429b5265fb987ba422ff4f5cf0ef08c1..9f50178fe6708c84c6e375e5b17675289aa37b6d 100644 (file)
@@ -271,10 +271,14 @@ namespace X86II {
     
     //// MRM_C1 - A mod/rm byte of exactly 0xC1.
     MRM_C1 = 33,
-    MRM_C8 = 34,
-    MRM_C9 = 35,
-    MRM_E8 = 36,
-    MRM_F0 = 37,
+    MRM_C2 = 34,
+    MRM_C3 = 35,
+    MRM_C4 = 36,
+    MRM_C8 = 37,
+    MRM_C9 = 38,
+    MRM_E8 = 39,
+    MRM_F0 = 40,
+    MRM_F8 = 41,
 
     FormMask       = 63,
 
index 7ef495711fc99faa1c77dceeba77adf9a2d06b69..47ddf024214892769ef0c13b9fbca49b41e35d06 100644 (file)
@@ -4247,9 +4247,9 @@ def VMCALL : I<0x01, MRM_C1, (outs), (ins), "vmcall", []>, TB;
 def VMCLEARm : I<0xC7, MRM6m, (outs), (ins i64mem:$vmcs),
   "vmclear\t$vmcs", []>, OpSize, TB;
 // 0F 01 C2
-def VMLAUNCH : I<0x01, RawFrm, (outs), (ins), "vmlaunch", []>, TB;
+def VMLAUNCH : I<0x01, MRM_C2, (outs), (ins), "vmlaunch", []>, TB;
 // 0F 01 C3
-def VMRESUME : I<0x01, RawFrm, (outs), (ins), "vmresume", []>, TB;
+def VMRESUME : I<0x01, MRM_C3, (outs), (ins), "vmresume", []>, TB;
 def VMPTRLDm : I<0xC7, MRM6m, (outs), (ins i64mem:$vmcs),
   "vmptrld\t$vmcs", []>, TB;
 def VMPTRSTm : I<0xC7, MRM7m, (outs i64mem:$vmcs), (ins),
@@ -4271,7 +4271,7 @@ def VMWRITE32rm : I<0x79, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
 def VMWRITE32rr : I<0x79, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
   "vmwrite{l}\t{$src, $dst|$dst, $src}", []>, TB;
 // 0F 01 C4
-def VMXOFF : I<0x01, RawFrm, (outs), (ins), "vmxoff", []>, OpSize;
+def VMXOFF : I<0x01, MRM_C4, (outs), (ins), "vmxoff", []>, TB;
 def VMXON : I<0xC7, MRM6m, (outs), (ins i64mem:$vmxon),
   "vmxon\t{$vmxon}", []>, XD;
 
index c06e50a9eb18a616c93db1e61db5fb44e822368d..1dc592ce7c3b1ad500a4ee3b16b63b58597cc33a 100644 (file)
@@ -585,6 +585,18 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
     EmitByte(BaseOpcode, CurByte, OS);
     EmitByte(0xC1, CurByte, OS);
     break;
+  case X86II::MRM_C2:
+    EmitByte(BaseOpcode, CurByte, OS);
+    EmitByte(0xC2, CurByte, OS);
+    break;
+  case X86II::MRM_C3:
+    EmitByte(BaseOpcode, CurByte, OS);
+    EmitByte(0xC3, CurByte, OS);
+    break;
+  case X86II::MRM_C4:
+    EmitByte(BaseOpcode, CurByte, OS);
+    EmitByte(0xC4, CurByte, OS);
+    break;
   case X86II::MRM_C8:
     EmitByte(BaseOpcode, CurByte, OS);
     EmitByte(0xC8, CurByte, OS);
@@ -601,6 +613,10 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
     EmitByte(BaseOpcode, CurByte, OS);
     EmitByte(0xF0, CurByte, OS);
     break;
+  case X86II::MRM_F8:
+    EmitByte(BaseOpcode, CurByte, OS);
+    EmitByte(0xF8, CurByte, OS);
+    break;
   }
   
   // If there is a remaining operand, it must be a trailing immediate.  Emit it
index 5c47885cf6d70eba39e935092e71426ed142bfc9..771fc9352191ff85e2a1fe1573fe4690a8613175 100644 (file)
 // CHECK: encoding: [0x0f,0x01,0xc8]
        mwait
 // CHECK: mwait
-// CHECK: encoding: [0x0f,0x01,0xc9]
\ No newline at end of file
+// CHECK: encoding: [0x0f,0x01,0xc9]
+
+       vmcall
+// CHECK: vmcall
+// CHECK: encoding: [0x0f,0x01,0xc1]
+       vmlaunch
+// CHECK: vmlaunch
+// CHECK: encoding: [0x0f,0x01,0xc2]
+       vmresume
+// CHECK: vmresume
+// CHECK: encoding: [0x0f,0x01,0xc3]
+       vmxoff
+// CHECK: vmxoff
+// CHECK: encoding: [0x0f,0x01,0xc4]
+       swapgs
+// CHECK: swapgs
+// CHECK: encoding: [0x0f,0x01,0xf8]
index 376748a1dbf6b292274400eac6ac07eb8384dc57..c260945ff71fe76d45ba30095e0b00832b273a9f 100644 (file)
 
 # CHECK: vmcall
 0x0f 0x01 0xc1
+
+# CHECK: vmlaunch
+0x0f 0x01 0xc2
+
+# CHECK: vmresume
+0x0f 0x01 0xc3
+
+# CHECK: vmxoff
+0x0f 0x01 0xc4
+
+# CHECK: swapgs
+0x0f 0x01 0xf8
\ No newline at end of file
index f53927ded7ca5768659e56d604ed8b34c5916ee8..5c2bf772b707b0dafb46da5965a3b6b7a4aa7371 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 {
@@ -591,12 +595,8 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
     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,