diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-06-27 20:40:11 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-06-27 20:40:11 +0000 |
commit | ccaf3321f1caaaeb8672758753245a521aa77f63 (patch) | |
tree | 22fa8e20c0279c13f7df1d6aa5a36688038e4654 /llvm/lib/Support/APFloat.cpp | |
parent | 2850ba8e21e5876149ceda1d7b15ea152798d3e1 (diff) | |
download | bcm5719-llvm-ccaf3321f1caaaeb8672758753245a521aa77f63.tar.gz bcm5719-llvm-ccaf3321f1caaaeb8672758753245a521aa77f63.zip |
Revert "[APFloat] Removed APFloat constructor which initialized to either zero/NaN but allowed you to arbitrarily set the category of the float."
This reverts commit r185095. This is causing a FileCheck failure on
the 3dnow intrinsics on at least the mips/ppc bots but not on the x86
bots.
Reverting while I figure out what is going on.
llvm-svn: 185099
Diffstat (limited to 'llvm/lib/Support/APFloat.cpp')
-rw-r--r-- | llvm/lib/Support/APFloat.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp index a7ff9f68cf7..2eaf2b56bd5 100644 --- a/llvm/lib/Support/APFloat.cpp +++ b/llvm/lib/Support/APFloat.cpp @@ -795,6 +795,17 @@ APFloat::APFloat(const fltSemantics &ourSemantics, uninitializedTag tag) { initialize(&ourSemantics); } +APFloat::APFloat(const fltSemantics &ourSemantics, + fltCategory ourCategory, bool negative) { + initialize(&ourSemantics); + category = ourCategory; + sign = negative; + if (isFiniteNonZero()) + category = fcZero; + else if (ourCategory == fcNaN) + makeNaN(); +} + APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) { initialize(&ourSemantics); convertFromString(text, rmNearestTiesToEven); @@ -2395,8 +2406,8 @@ APFloat::roundSignificandWithExponent(const integerPart *decSigParts, excessPrecision = calcSemantics.precision - semantics->precision; truncatedBits = excessPrecision; - APFloat decSig = APFloat::getZero(calcSemantics, sign); - APFloat pow5(calcSemantics); + APFloat decSig(calcSemantics, fcZero, sign); + APFloat pow5(calcSemantics, fcZero, false); sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount, rmNearestTiesToEven); @@ -3377,16 +3388,15 @@ APFloat APFloat::getSmallest(const fltSemantics &Sem, bool Negative) { } APFloat APFloat::getSmallestNormalized(const fltSemantics &Sem, bool Negative) { - APFloat Val(Sem, uninitialized); + APFloat Val(Sem, fcNormal, Negative); // We want (in interchange format): // sign = {Negative} // exponent = 0..0 // significand = 10..0 - Val.zeroSignificand(); - Val.sign = Negative; Val.exponent = Sem.minExponent; + Val.zeroSignificand(); Val.significandParts()[partCountForBits(Sem.precision)-1] |= (((integerPart) 1) << ((Sem.precision - 1) % integerPartWidth)); |