[llvm-commits] CVS: llvm/lib/Support/APInt.cpp
Jeff Cohen
jeffc at jolt-lang.org
Tue Mar 20 13:42:53 PDT 2007
Changes in directory llvm/lib/Support:
APInt.cpp updated: 1.73 -> 1.74
---
Log message:
Fix (and simplify) 48-bit byte swap.
Get pos/neg infinity the correct way.
---
Diffs of the changes: (+8 -9)
APInt.cpp | 17 ++++++++---------
1 files changed, 8 insertions(+), 9 deletions(-)
Index: llvm/lib/Support/APInt.cpp
diff -u llvm/lib/Support/APInt.cpp:1.73 llvm/lib/Support/APInt.cpp:1.74
--- llvm/lib/Support/APInt.cpp:1.73 Mon Mar 19 16:19:02 2007
+++ llvm/lib/Support/APInt.cpp Tue Mar 20 15:42:36 2007
@@ -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 @@
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 @@
// 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
More information about the llvm-commits
mailing list