[APFloat] Added make{Zero,Inf} methods and implemented get{Zero,Inf} on top of them.

llvm-svn: 184712
This commit is contained in:
Michael Gottesman 2013-06-24 09:58:02 +00:00
parent f0e8cd1a7f
commit c4facdf390
2 changed files with 24 additions and 2 deletions

View File

@ -211,14 +211,18 @@ public:
///
/// \param Negative True iff the number should be negative.
static APFloat getZero(const fltSemantics &Sem, bool Negative = false) {
return APFloat(Sem, fcZero, Negative);
APFloat Val(Sem, uninitialized);
Val.makeZero(Negative);
return Val;
}
/// Factory for Positive and Negative Infinity.
///
/// \param Negative True iff the number should be negative.
static APFloat getInf(const fltSemantics &Sem, bool Negative = false) {
return APFloat(Sem, fcInfinity, Negative);
APFloat Val(Sem, uninitialized);
Val.makeInf(Negative);
return Val;
}
/// Factory for QNaN values.
@ -498,6 +502,8 @@ private:
void makeNaN(bool SNaN = false, bool Neg = false, const APInt *fill = 0);
static APFloat makeNaN(const fltSemantics &Sem, bool SNaN, bool Negative,
const APInt *fill);
void makeInf(bool Neg = false);
void makeZero(bool Neg = false);
/// @}

View File

@ -3827,3 +3827,19 @@ APFloat::opStatus APFloat::next(bool nextDown) {
return result;
}
void
APFloat::makeInf(bool Negative) {
category = fcInfinity;
sign = Negative;
exponent = semantics->maxExponent + 1;
APInt::tcSet(significandParts(), 0, partCount());
}
void
APFloat::makeZero(bool Negative) {
category = fcZero;
sign = Negative;
exponent = semantics->minExponent-1;
APInt::tcSet(significandParts(), 0, partCount());
}