diff options
Diffstat (limited to 'lib/Support/APFloat.cpp')
| -rw-r--r-- | lib/Support/APFloat.cpp | 28 | 
1 files changed, 16 insertions, 12 deletions
diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index b87ddf9c95b5..e765ba0a27bb 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -175,7 +175,7 @@ totalExponent(StringRef::iterator p, StringRef::iterator end,  {    int unsignedExponent;    bool negative, overflow; -  int exponent; +  int exponent = 0;    assert(p != end && "Exponent has no digits"); @@ -194,11 +194,11 @@ totalExponent(StringRef::iterator p, StringRef::iterator end,      assert(value < 10U && "Invalid character in exponent");      unsignedExponent = unsignedExponent * 10 + value; -    if (unsignedExponent > 65535) +    if (unsignedExponent > 32767)        overflow = true;    } -  if (exponentAdjustment > 65535 || exponentAdjustment < -65536) +  if (exponentAdjustment > 32767 || exponentAdjustment < -32768)      overflow = true;    if (!overflow) { @@ -206,12 +206,12 @@ totalExponent(StringRef::iterator p, StringRef::iterator end,      if (negative)        exponent = -exponent;      exponent += exponentAdjustment; -    if (exponent > 65535 || exponent < -65536) +    if (exponent > 32767 || exponent < -32768)        overflow = true;    }    if (overflow) -    exponent = negative ? -65536: 65535; +    exponent = negative ? -32768: 32767;    return exponent;  } @@ -3197,6 +3197,12 @@ APFloat::initFromAPInt(const APInt& api, bool isIEEE)      llvm_unreachable(0);  } +APFloat +APFloat::getAllOnesValue(unsigned BitWidth, bool isIEEE) +{ +  return APFloat(APInt::getAllOnesValue(BitWidth), isIEEE); +} +  APFloat APFloat::getLargest(const fltSemantics &Sem, bool Negative) {    APFloat Val(Sem, fcNormal, Negative); @@ -3258,14 +3264,12 @@ APFloat::APFloat(const APInt& api, bool isIEEE)  APFloat::APFloat(float f)  { -  APInt api = APInt(32, 0); -  initFromAPInt(api.floatToBits(f)); +  initFromAPInt(APInt::floatToBits(f));  }  APFloat::APFloat(double d)  { -  APInt api = APInt(64, 0); -  initFromAPInt(api.doubleToBits(d)); +  initFromAPInt(APInt::doubleToBits(d));  }  namespace { @@ -3312,7 +3316,7 @@ namespace {      // Truncate the significand down to its active bit count, but      // don't try to drop below 32.      unsigned newPrecision = std::max(32U, significand.getActiveBits()); -    significand.trunc(newPrecision); +    significand = significand.trunc(newPrecision);    } @@ -3417,7 +3421,7 @@ void APFloat::toString(SmallVectorImpl<char> &Str,      // Nothing to do.    } else if (exp > 0) {      // Just shift left. -    significand.zext(semantics->precision + exp); +    significand = significand.zext(semantics->precision + exp);      significand <<= exp;      exp = 0;    } else { /* exp < 0 */ @@ -3436,7 +3440,7 @@ void APFloat::toString(SmallVectorImpl<char> &Str,      // Multiply significand by 5^e.      //   N * 5^0101 == N * 5^(1*1) * 5^(0*2) * 5^(1*4) * 5^(0*8) -    significand.zext(precision); +    significand = significand.zext(precision);      APInt five_to_the_i(precision, 5);      while (true) {        if (texp & 1) significand *= five_to_the_i;  | 
