diff options
author | Neil Booth <neil@daikokuya.co.uk> | 2007-10-14 10:39:51 +0000 |
---|---|---|
committer | Neil Booth <neil@daikokuya.co.uk> | 2007-10-14 10:39:51 +0000 |
commit | 6fb006e2b8b64772b6b492b6672cfc00e15e3be4 (patch) | |
tree | 4bb499f32bcf9f131b37c84122892b070a2ff25f /lib/Support | |
parent | 6721b8a90bc2a8d508bbf92595912f19c2972ba5 (diff) | |
download | external_llvm-6fb006e2b8b64772b6b492b6672cfc00e15e3be4.zip external_llvm-6fb006e2b8b64772b6b492b6672cfc00e15e3be4.tar.gz external_llvm-6fb006e2b8b64772b6b492b6672cfc00e15e3be4.tar.bz2 |
Consolidate logic for creating NaNs. Silence compiler warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42966 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r-- | lib/Support/APFloat.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index e6f6b50..8f07bd5 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -586,6 +586,15 @@ APFloat::copySignificand(const APFloat &rhs) partCount()); } +/* Make this number a NaN, with an arbitrary but deterministic value + for the significand. */ +void +APFloat::makeNaN(void) +{ + category = fcNaN; + APInt::tcSet(significandParts(), ~0U, partCount()); +} + APFloat & APFloat::operator=(const APFloat &rhs) { @@ -650,6 +659,8 @@ APFloat::APFloat(const fltSemantics &ourSemantics, sign = negative; if(category == fcNormal) category = fcZero; + else if (ourCategory == fcNaN) + makeNaN(); } APFloat::APFloat(const fltSemantics &ourSemantics, const char *text) @@ -1210,9 +1221,7 @@ APFloat::addOrSubtractSpecials(const APFloat &rhs, bool subtract) /* Differently signed infinities can only be validly subtracted. */ if(sign ^ rhs.sign != subtract) { - category = fcNaN; - // Arbitrary but deterministic value for significand - APInt::tcSet(significandParts(), ~0U, partCount()); + makeNaN(); return opInvalidOp; } @@ -1328,9 +1337,7 @@ APFloat::multiplySpecials(const APFloat &rhs) case convolve(fcZero, fcInfinity): case convolve(fcInfinity, fcZero): - category = fcNaN; - // Arbitrary but deterministic value for significand - APInt::tcSet(significandParts(), ~0U, partCount()); + makeNaN(); return opInvalidOp; case convolve(fcNormal, fcNormal): @@ -1372,9 +1379,7 @@ APFloat::divideSpecials(const APFloat &rhs) case convolve(fcInfinity, fcInfinity): case convolve(fcZero, fcZero): - category = fcNaN; - // Arbitrary but deterministic value for significand - APInt::tcSet(significandParts(), ~0U, partCount()); + makeNaN(); return opInvalidOp; case convolve(fcNormal, fcNormal): @@ -1769,7 +1774,7 @@ APFloat::convertToInteger(integerPart *parts, unsigned int width, if(bits > 0) { lost_fraction = tmp.shiftSignificandRight(bits); } else { - if (-bits >= semantics->precision) { + if ((unsigned) -bits >= semantics->precision) { // Unrepresentably large. if (!sign && isSigned) APInt::tcSetLeastSignificantBits(parts, partsCount, width-1); |