[llvm-commits] [llvm] r72606 - in /llvm/trunk: include/llvm/ADT/APFloat.h lib/Support/APFloat.cpp
Dale Johannesen
dalej at apple.com
Mon Jun 1 11:05:03 PDT 2009
On May 29, 2009, at 8:49 PMPDT, Mike Stump wrote:
> Author: mrs
> Date: Fri May 29 22:49:43 2009
> New Revision: 72606
>
> URL: http://llvm.org/viewvc/llvm-project?rev=72606&view=rev
> Log:
> Add support for letting the client choose different flavors of
> NaNs. Testcase to be
> added in clang.
What problem are you trying to solve with this? I'm skeptical this is
a good idea.
> Modified:
> llvm/trunk/include/llvm/ADT/APFloat.h
> llvm/trunk/lib/Support/APFloat.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/APFloat.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/APFloat.h?rev=72606&r1=72605&r2=72606&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/include/llvm/ADT/APFloat.h (original)
> +++ llvm/trunk/include/llvm/ADT/APFloat.h Fri May 29 22:49:43 2009
> @@ -174,7 +174,7 @@
> // Constructors.
> APFloat(const fltSemantics &, const char *);
> APFloat(const fltSemantics &, integerPart);
> - APFloat(const fltSemantics &, fltCategory, bool negative);
> + APFloat(const fltSemantics &, fltCategory, bool negative,
> unsigned type=0);
> explicit APFloat(double d);
> explicit APFloat(float f);
> explicit APFloat(const APInt &, bool isIEEE = false);
> @@ -188,8 +188,9 @@
> static APFloat getInf(const fltSemantics &Sem, bool Negative =
> false) {
> return APFloat(Sem, fcInfinity, Negative);
> }
> - static APFloat getNaN(const fltSemantics &Sem, bool Negative =
> false) {
> - return APFloat(Sem, fcNaN, Negative);
> + static APFloat getNaN(const fltSemantics &Sem, bool Negative =
> false,
> + long unsigned type=0) {
> + return APFloat(Sem, fcNaN, Negative, type);
> }
>
> /// Profile - Used to insert APFloat objects, or objects that
> contain
> @@ -296,7 +297,7 @@
> opStatus modSpecials(const APFloat &);
>
> /* Miscellany. */
> - void makeNaN(void);
> + void makeNaN(unsigned = 0);
> opStatus normalize(roundingMode, lostFraction);
> opStatus addOrSubtract(const APFloat &, roundingMode, bool
> subtract);
> cmpResult compareAbsoluteValue(const APFloat &) const;
>
> Modified: llvm/trunk/lib/Support/APFloat.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=72606&r1=72605&r2=72606&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Support/APFloat.cpp (original)
> +++ llvm/trunk/lib/Support/APFloat.cpp Fri May 29 22:49:43 2009
> @@ -598,12 +598,18 @@
>
> /* 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,
> - 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)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list