diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Support/APFloat.cpp | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp index 95953b6d071..814c72cc4d3 100644 --- a/llvm/lib/Support/APFloat.cpp +++ b/llvm/lib/Support/APFloat.cpp @@ -3945,6 +3945,24 @@ APFloat::makeZero(bool Negative) {    APInt::tcSet(significandParts(), 0, partCount());    } +int llvm::ilogb(const APFloat &Arg) { +  if (Arg.isNaN()) +    return APFloat::IEK_NaN; +  if (Arg.isZero()) +    return APFloat::IEK_Zero; +  if (Arg.isInfinity()) +    return APFloat::IEK_Inf; +  if (!Arg.isDenormal()) +    return Arg.exponent; + +  APFloat Normalized(Arg); +  int SignificandBits = Arg.getSemantics().precision - 1; + +  Normalized.exponent += SignificandBits; +  Normalized.normalize(APFloat::rmNearestTiesToEven, lfExactlyZero); +  return Normalized.exponent - SignificandBits; +} +  APFloat llvm::scalbn(APFloat X, int Exp, APFloat::roundingMode RoundingMode) {    auto MaxExp = X.getSemantics().maxExponent;    auto MinExp = X.getSemantics().minExponent;  | 

