diff options
author | Mike Stump <mrs@apple.com> | 2009-05-30 03:49:43 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-05-30 03:49:43 +0000 |
commit | c5ca713b8073d9fe95b258d0c01328d020df3357 (patch) | |
tree | 3f470d94f3287740e9a185e43ac728d99170c500 /lib/Support/APFloat.cpp | |
parent | 51b16f473759c1546acbf308a5d3f3e7bf3ea23c (diff) |
Add support for letting the client choose different flavors of NaNs. Testcase to be
added in clang.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72606 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/APFloat.cpp')
-rw-r--r-- | lib/Support/APFloat.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index 4c79ba61d2..3b03c54e97 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -598,12 +598,18 @@ APFloat::copySignificand(const APFloat &rhs) /* Make this number a NaN, with an arbitrary but deterministic value for the significand. If double or longer, this is a signalling NaN, - which may not be ideal. */ + which may not be ideal. If float, this is QNaN(0). */ void -APFloat::makeNaN(void) +APFloat::makeNaN(unsigned type) { category = fcNaN; - APInt::tcSet(significandParts(), ~0U, partCount()); + // FIXME: Add double and long double support for QNaN(0). + if (semantics->precision == 24 && semantics->maxExponent == 127) { + type |= 0x7fc00000U; + type &= ~0x80000000U; + } else + type = ~0U; + APInt::tcSet(significandParts(), type, partCount()); } APFloat & @@ -662,16 +668,16 @@ APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value) } APFloat::APFloat(const fltSemantics &ourSemantics, - fltCategory ourCategory, bool negative) + fltCategory ourCategory, bool negative, unsigned type) { assertArithmeticOK(ourSemantics); initialize(&ourSemantics); category = ourCategory; sign = negative; - if(category == fcNormal) + if (category == fcNormal) category = fcZero; else if (ourCategory == fcNaN) - makeNaN(); + makeNaN(type); } APFloat::APFloat(const fltSemantics &ourSemantics, const char *text) |