Fix (and simplify) 48-bit byte swap.
authorJeff Cohen <jeffc@jolt-lang.org>
Tue, 20 Mar 2007 20:42:36 +0000 (20:42 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Tue, 20 Mar 2007 20:42:36 +0000 (20:42 +0000)
Get pos/neg infinity the correct way.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35223 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/APInt.cpp

index 19eade9e5c089f49e5b5695c7cb82e78e4b181d2..0bfc95bde3f746c31e53a36b30e94904b4171125 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include <math.h>
+#include <limits>
 #include <cstring>
 #include <cstdlib>
 #ifndef NDEBUG
@@ -762,17 +763,15 @@ uint32_t APInt::countPopulation() const {
 APInt APInt::byteSwap() const {
   assert(BitWidth >= 16 && BitWidth % 16 == 0 && "Cannot byteswap!");
   if (BitWidth == 16)
-    return APInt(BitWidth, ByteSwap_16(VAL));
+    return APInt(BitWidth, ByteSwap_16(uint16_t(VAL)));
   else if (BitWidth == 32)
-    return APInt(BitWidth, ByteSwap_32(VAL));
+    return APInt(BitWidth, ByteSwap_32(uint32_t(VAL)));
   else if (BitWidth == 48) {
-    uint64_t Tmp1 = ((VAL >> 32) << 16) | (VAL & 0xFFFF);
+    uint32_t Tmp1 = uint32_t(VAL >> 16);
     Tmp1 = ByteSwap_32(Tmp1);
-    uint64_t Tmp2 = (VAL >> 16) & 0xFFFF;
+    uint16_t Tmp2 = uint16_t(VAL);
     Tmp2 = ByteSwap_16(Tmp2);
-    return 
-      APInt(BitWidth, 
-            (Tmp1 & 0xff) | ((Tmp1<<16) & 0xffff00000000ULL) | (Tmp2 << 16));
+    return APInt(BitWidth, (uint64_t(Tmp2) << 32) | Tmp1);
   } else if (BitWidth == 64)
     return APInt(BitWidth, ByteSwap_64(VAL));
   else {
@@ -869,9 +868,9 @@ double APInt::roundToDouble(bool isSigned) const {
   // Return infinity for exponent overflow
   if (exp > 1023) {
     if (!isSigned || !isNeg)
-      return double(1.0E300 * 1.0E300); // positive infinity
+      return std::numeric_limits<double>::infinity();
     else 
-      return double(-1.0E300 * 1.0E300); // negative infinity
+      return -std::numeric_limits<double>::infinity();
   }
   exp += 1023; // Increment for 1023 bias