Implement a lot of cast functionality (no FP or 64)
[oota-llvm.git] / lib / Target / X86 / X86InstrInfo.h
index 4439dcaf58677377a1de6f34a5b815875464f0cc..9d2629120ef0424516fcd2861da5974fdb4c83fc 100644 (file)
@@ -20,37 +20,33 @@ namespace X86II {
     // instructions.
     //
 
-    /// Other - An instruction gets this form if it doesn't fit any of the
-    /// catagories below.
-    OtherFrm       = 0,
-
     /// Raw - This form is for instructions that don't have any operands, so
     /// they are just a fixed opcode value, like 'leave'.
-    RawFrm         = 1,
+    RawFrm         = 0,
     
     /// AddRegFrm - This form is used for instructions like 'push r32' that have
     /// their one register operand added to their opcode.
-    AddRegFrm      = 2,
+    AddRegFrm      = 1,
 
     /// MRMDestReg - This form is used for instructions that use the Mod/RM byte
     /// to specify a destination, which in this case is a register.
     ///
-    MRMDestReg     = 3,
+    MRMDestReg     = 2,
 
     /// MRMDestMem - This form is used for instructions that use the Mod/RM byte
     /// to specify a destination, which in this case is memory.
     ///
-    MRMDestMem     = 4,
+    MRMDestMem     = 3,
 
     /// MRMSrcReg - This form is used for instructions that use the Mod/RM byte
     /// to specify a source, which in this case is a register.
     ///
-    MRMSrcReg      = 5,
+    MRMSrcReg      = 4,
 
     /// MRMSrcMem - This form is used for instructions that use the Mod/RM byte
     /// to specify a source, which in this case is memory.
     ///
-    MRMSrcMem      = 6,
+    MRMSrcMem      = 5,
   
     /// MRMS[0-7][rm] - These forms are used to represent instructions that use
     /// a Mod/RM byte, and use the middle field to hold extended opcode
@@ -84,6 +80,17 @@ namespace X86II {
     // which most often indicates that the instruction operates on 16 bit data
     // instead of 32 bit data.
     OpSize      = 1 << 7,
+
+    // This three-bit field describes the size of a memory operand.
+    // I'm just being paranoid not using the zero value; there's 
+    // probably no reason you couldn't use it.
+    MemArg8     = 0x1 << 8,
+    MemArg16    = 0x2 << 8,
+    MemArg32    = 0x3 << 8,
+    MemArg64    = 0x4 << 8,
+    MemArg80    = 0x5 << 8,
+    MemArg128   = 0x6 << 8,
+    MemArgMask  = 0x7 << 8,
   };
 }