[llvm-commits] CVS: llvm/include/llvm/ADT/APInt.h

Zhou Sheng zhousheng00 at gmail.com
Mon Feb 12 12:03:13 PST 2007



Changes in directory llvm/include/llvm/ADT:

APInt.h updated: 1.6 -> 1.7
---
Log message:

1. Make APInt::shl work correctly and more efficiently.
2. Add functions to support the numberical conversion between APInt and
   double/float.


---
Diffs of the changes:  (+24 -0)

 APInt.h |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+)


Index: llvm/include/llvm/ADT/APInt.h
diff -u llvm/include/llvm/ADT/APInt.h:1.6 llvm/include/llvm/ADT/APInt.h:1.7
--- llvm/include/llvm/ADT/APInt.h:1.6	Fri Feb  9 01:47:22 2007
+++ llvm/include/llvm/ADT/APInt.h	Mon Feb 12 14:02:55 2007
@@ -289,6 +289,9 @@
   inline uint64_t getValue() {
     if (isSingleWord())
       return VAL;
+    unsigned n = getNumWords() * 64 - CountLeadingZeros();
+    if (n <= 64)
+      return pVal[0];
     assert(0 && "This APInt's bitwidth > 64");
   }
 
@@ -385,6 +388,9 @@
            CountLeadingZeros();
   }
 
+  /// @brief Converts this APInt to a double value.
+  double APIntRoundToDouble(bool isSigned = false) const;
+
   /// Arithmetic right-shift this APInt by shiftAmt.
   /// @brief Arithmetic right-shift function.
   APInt ashr(unsigned shiftAmt) const;
@@ -456,6 +462,24 @@
 /// using Euclid's algorithm.
 APInt GreatestCommonDivisor(const APInt& API1, const APInt& API2);
 
+/// @brief Converts the given APInt to a double value.
+inline double APIntRoundToDouble(const APInt& APIVal, bool isSigned = false) {
+  return APIVal.APIntRoundToDouble(isSigned);
+}
+
+/// @brief Converts the given APInt to a float vlalue.
+inline float APIntRoundToFloat(const APInt& APIVal) {
+  return float(APIntRoundToDouble(APIVal));
+}
+
+/// @brief Converts the given double value into a APInt.
+APInt DoubleRoundToAPInt(double Double);
+
+/// @brief Converts the given float value into a APInt.
+inline APInt FloatRoundToAPInt(float Float) {
+  return DoubleRoundToAPInt(double(Float));
+}
+
 /// Arithmetic right-shift the APInt by shiftAmt.
 /// @brief Arithmetic right-shift function.
 inline APInt ashr(const APInt& LHS, unsigned shiftAmt) {






More information about the llvm-commits mailing list