summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/APFloat.cpp
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-06-27 20:40:11 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-06-27 20:40:11 +0000
commitccaf3321f1caaaeb8672758753245a521aa77f63 (patch)
tree22fa8e20c0279c13f7df1d6aa5a36688038e4654 /llvm/lib/Support/APFloat.cpp
parent2850ba8e21e5876149ceda1d7b15ea152798d3e1 (diff)
downloadbcm5719-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.cpp20
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));
OpenPOWER on IntegriCloud