Add new instructions for handling data passed into eh landing pad.
[oota-llvm.git] / include / llvm / CodeGen / ValueTypes.h
index 88eddd2c03389dc9775013bdf7ace349191aba35..b7a3c9a8e5ef6caec7b88610483abd7cb88412ac 100644 (file)
@@ -63,7 +63,11 @@ namespace MVT {  // MVT = Machine Value Types
     FIRST_VECTOR_VALUETYPE = v8i8,
     LAST_VECTOR_VALUETYPE  = v2f64,
 
-    LAST_VALUETYPE =  24    // This always remains at the end of the list.
+    LAST_VALUETYPE =  24,   // This always remains at the end of the list.
+
+    // iPTR - An int value the size of the pointer of the current
+    // target.  This should only be used internal to tblgen!
+    iPTR           = 255
   };
 
   /// MVT::isInteger - Return true if this is a simple integer, or a packed
@@ -116,33 +120,8 @@ namespace MVT {  // MVT = Machine Value Types
   /// NumElements in length, where each element is of type VT.  If there is no
   /// ValueType that represents this vector, a ValueType of Other is returned.
   ///
-  static inline ValueType getVectorType(ValueType VT, unsigned NumElements) {
-    switch (VT) {
-    default: 
-      break;
-    case MVT::i8:
-      if (NumElements == 8)  return MVT::v8i8;
-      if (NumElements == 16) return MVT::v16i8;
-        break;
-    case MVT::i16:
-      if (NumElements == 4)  return MVT::v4i16;
-      if (NumElements == 8)  return MVT::v8i16;
-        break;
-    case MVT::i32:
-      if (NumElements == 2)  return MVT::v2i32;
-      if (NumElements == 4)  return MVT::v4i32;
-        break;
-    case MVT::f32:
-      if (NumElements == 2)  return MVT::v2f32;
-      if (NumElements == 4)  return MVT::v4f32;
-        break;
-    case MVT::f64:
-      if (NumElements == 2)  return MVT::v2f64;
-      break;
-    }
-    return MVT::Other;
-  }
-  
+  ValueType getVectorType(ValueType VT, unsigned NumElements);
+    
   /// MVT::getVectorBaseType - Given a packed vector type, return the type of
   /// each element.
   static inline ValueType getVectorBaseType(ValueType VT) {
@@ -161,17 +140,48 @@ namespace MVT {  // MVT = Machine Value Types
     }
   }
   
+  /// MVT::getVectorNumElements - Given a packed vector type, return the number
+  /// of elements it contains.
+  static inline unsigned getVectorNumElements(ValueType VT) {
+    switch (VT) {
+      default: assert(0 && "Invalid vector type!");
+      case v16i8: return 16;
+      case v8i8 :
+      case v8i16: return 8;
+      case v4i16:
+      case v4i32: 
+      case v4f32: return 4;
+      case v2i32:
+      case v2i64:
+      case v2f32:
+      case v2f64: return 2;
+    }
+  }
+  
+  /// MVT::getIntVectorWithNumElements - Return any integer vector type that has
+  /// the specified number of elements.
+  static inline ValueType getIntVectorWithNumElements(unsigned NumElts) {
+    switch (NumElts) {
+    default: assert(0 && "Invalid vector type!");
+    case  2: return v2i32;
+    case  4: return v4i16;
+    case  8: return v8i8;
+    case 16: return v16i8;
+    }
+  }
+  
+  
   /// MVT::getIntVTBitMask - Return an integer with 1's every place there are
   /// bits in the specified integer value type.
   static inline uint64_t getIntVTBitMask(ValueType VT) {
     assert(isInteger(VT) && !isVector(VT) && "Only applies to int scalars!");
-    return ~0ULL >> (64-getSizeInBits(VT));
+    return ~uint64_t(0UL) >> (64-getSizeInBits(VT));
   }
   /// MVT::getIntVTSignBit - Return an integer with a 1 in the position of the
   /// sign bit for the specified integer value type.
   static inline uint64_t getIntVTSignBit(ValueType VT) {
     assert(isInteger(VT) && !isVector(VT) && "Only applies to int scalars!");
-    return 1ULL << (getSizeInBits(VT)-1);
+    return uint64_t(1UL) << (getSizeInBits(VT)-1);
   }
 
   /// MVT::getValueTypeString - This function returns value type as a string,