Merge System into Support.
[oota-llvm.git] / include / llvm / ExecutionEngine / GenericValue.h
index 7cf1a7b3952b13008b5e65af7068878738fee9e5..a2fed98c150e8187e4dd8474e1a94547737ba065 100644 (file)
@@ -1,12 +1,12 @@
 //===-- GenericValue.h - Represent any type of LLVM value -------*- C++ -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
 //===----------------------------------------------------------------------===//
-// 
+//
 // The GenericValue class is used to represent an LLVM value of arbitrary type.
 //
 //===----------------------------------------------------------------------===//
 #ifndef GENERIC_VALUE_H
 #define GENERIC_VALUE_H
 
-#include "Support/DataTypes.h"
+#include "llvm/ADT/APInt.h"
+#include "llvm/Support/DataTypes.h"
 
 namespace llvm {
 
-typedef uintptr_t PointerTy;
-
-union GenericValue {
-  bool            BoolVal;
-  unsigned char   UByteVal;
-  signed   char   SByteVal;
-  unsigned short  UShortVal;
-  signed   short  ShortVal;
-  unsigned int    UIntVal;
-  signed   int    IntVal;
-  uint64_t        ULongVal;
-  int64_t         LongVal;
-  double          DoubleVal;
-  float           FloatVal;
-  struct { unsigned int first; unsigned int second; } UIntPairVal;
-  PointerTy       PointerVal;
-  unsigned char   Untyped[8];
-
-  GenericValue() {}
-  GenericValue(void *V) {
-    PointerVal = (PointerTy)(intptr_t)V;
-  }
+typedef void* PointerTy;
+class APInt;
+
+struct GenericValue {
+  union {
+    double          DoubleVal;
+    float           FloatVal;
+    PointerTy       PointerVal;
+    struct { unsigned int first; unsigned int second; } UIntPairVal;
+    unsigned char   Untyped[8];
+  };
+  APInt IntVal;   // also used for long doubles
+
+  GenericValue() : DoubleVal(0.0), IntVal(1,0) {}
+  explicit GenericValue(void *V) : PointerVal(V), IntVal(1,0) { }
 };
 
 inline GenericValue PTOGV(void *P) { return GenericValue(P); }
-inline void* GVTOP(const GenericValue &GV) {
-  return (void*)(intptr_t)GV.PointerVal;
-}
+inline void* GVTOP(const GenericValue &GV) { return GV.PointerVal; }
 
 } // End llvm namespace
 #endif