Add bitsToDouble and bitsToFloat methods for re-interpretation of bits as FP.
authorReid Spencer <rspencer@reidspencer.com>
Thu, 1 Mar 2007 20:06:51 +0000 (20:06 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 1 Mar 2007 20:06:51 +0000 (20:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34800 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/APInt.h

index 9043227f0b77fc1397dae074a15063296b21ddd2..7614c688c3b7352fe5ce29480ee189f499bdfd77 100644 (file)
@@ -697,6 +697,32 @@ public:
     return roundToDouble(true);
   }
 
+  /// The conversion does not do a translation from integer to double, it just
+  /// re-interprets the bits as a double. Note that it is valid to do this on
+  /// any bit width. Exactly 64 bits will be translated.
+  /// @brief Converts APInt bits to a double
+  double bitsToDouble() const {
+    union {
+      uint64_t I;
+      double D;
+    } T;
+    T.I = (isSingleWord() ? VAL : pVal[0]);
+    return T.D;
+  }
+
+  /// The conversion does not do a translation from integer to float, it just
+  /// re-interprets the bits as a float. Note that it is valid to do this on
+  /// any bit width. Exactly 32 bits will be translated.
+  /// @brief Converts APInt bits to a double
+  float bitsToFloat() const {
+    union {
+      uint32_t I;
+      float F;
+    } T;
+    T.I = uint32_t((isSingleWord() ? VAL : pVal[0]));
+    return T.F;
+  }
+
   /// @brief Compute the square root
   APInt sqrt() const;
 };