Home | History | Annotate | Download | only in Support
      1 //===-- APFloat.cpp - Implement APFloat class -----------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements a class to represent arbitrary precision floating
     11 // point values and provide a variety of arithmetic operations on them.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "llvm/ADT/APFloat.h"
     16 #include "llvm/ADT/APSInt.h"
     17 #include "llvm/ADT/FoldingSet.h"
     18 #include "llvm/ADT/Hashing.h"
     19 #include "llvm/ADT/StringExtras.h"
     20 #include "llvm/ADT/StringRef.h"
     21 #include "llvm/Support/ErrorHandling.h"
     22 #include "llvm/Support/MathExtras.h"
     23 #include <cstring>
     24 #include <limits.h>
     25 
     26 using namespace llvm;
     27 
     28 /// A macro used to combine two fcCategory enums into one key which can be used
     29 /// in a switch statement to classify how the interaction of two APFloat's
     30 /// categories affects an operation.
     31 ///
     32 /// TODO: If clang source code is ever allowed to use constexpr in its own
     33 /// codebase, change this into a static inline function.
     34 #define PackCategoriesIntoKey(_lhs, _rhs) ((_lhs) * 4 + (_rhs))
     35 
     36 /* Assumed in hexadecimal significand parsing, and conversion to
     37    hexadecimal strings.  */
     38 #define COMPILE_TIME_ASSERT(cond) extern int CTAssert[(cond) ? 1 : -1]
     39 COMPILE_TIME_ASSERT(integerPartWidth % 4 == 0);
     40 
     41 namespace llvm {
     42 
     43   /* Represents floating point arithmetic semantics.  */
     44   struct fltSemantics {
     45     /* The largest E such that 2^E is representable; this matches the
     46        definition of IEEE 754.  */
     47     APFloat::ExponentType maxExponent;
     48 
     49     /* The smallest E such that 2^E is a normalized number; this
     50        matches the definition of IEEE 754.  */
     51     APFloat::ExponentType minExponent;
     52 
     53     /* Number of bits in the significand.  This includes the integer
     54        bit.  */
     55     unsigned int precision;
     56   };
     57 
     58   const fltSemantics APFloat::IEEEhalf = { 15, -14, 11 };
     59   const fltSemantics APFloat::IEEEsingle = { 127, -126, 24 };
     60   const fltSemantics APFloat::IEEEdouble = { 1023, -1022, 53 };
     61   const fltSemantics APFloat::IEEEquad = { 16383, -16382, 113 };
     62   const fltSemantics APFloat::x87DoubleExtended = { 16383, -16382, 64 };
     63   const fltSemantics APFloat::Bogus = { 0, 0, 0 };
     64 
     65   /* The PowerPC format consists of two doubles.  It does not map cleanly
     66      onto the usual format above.  It is approximated using twice the
     67      mantissa bits.  Note that for exponents near the double minimum,
     68      we no longer can represent the full 106 mantissa bits, so those
     69      will be treated as denormal numbers.
     70 
     71      FIXME: While this approximation is equivalent to what GCC uses for
     72      compile-time arithmetic on PPC double-double numbers, it is not able
     73      to represent all possible values held by a PPC double-double number,
     74      for example: (long double) 1.0 + (long double) 0x1p-106
     75      Should this be replaced by a full emulation of PPC double-double?  */
     76   const fltSemantics APFloat::PPCDoubleDouble = { 1023, -1022 + 53, 53 + 53 };
     77 
     78   /* A tight upper bound on number of parts required to hold the value
     79      pow(5, power) is
     80 
     81        power * 815 / (351 * integerPartWidth) + 1
     82 
     83      However, whilst the result may require only this many parts,
     84      because we are multiplying two values to get it, the
     85      multiplication may require an extra part with the excess part
     86      being zero (consider the trivial case of 1 * 1, tcFullMultiply
     87      requires two parts to hold the single-part result).  So we add an
     88      extra one to guarantee enough space whilst multiplying.  */
     89   const unsigned int maxExponent = 16383;
     90   const unsigned int maxPrecision = 113;
     91   const unsigned int maxPowerOfFiveExponent = maxExponent + maxPrecision - 1;
     92   const unsigned int maxPowerOfFiveParts = 2 + ((maxPowerOfFiveExponent * 815)
     93                                                 / (351 * integerPartWidth));
     94 }
     95 
     96 /* A bunch of private, handy routines.  */
     97 
     98 static inline unsigned int
     99 partCountForBits(unsigned int bits)
    100 {
    101   return ((bits) + integerPartWidth - 1) / integerPartWidth;
    102 }
    103 
    104 /* Returns 0U-9U.  Return values >= 10U are not digits.  */
    105 static inline unsigned int
    106 decDigitValue(unsigned int c)
    107 {
    108   return c - '0';
    109 }
    110 
    111 /* Return the value of a decimal exponent of the form
    112    [+-]ddddddd.
    113 
    114    If the exponent overflows, returns a large exponent with the
    115    appropriate sign.  */
    116 static int
    117 readExponent(StringRef::iterator begin, StringRef::iterator end)
    118 {
    119   bool isNegative;
    120   unsigned int absExponent;
    121   const unsigned int overlargeExponent = 24000;  /* FIXME.  */
    122   StringRef::iterator p = begin;
    123 
    124   assert(p != end && "Exponent has no digits");
    125 
    126   isNegative = (*p == '-');
    127   if (*p == '-' || *p == '+') {
    128     p++;
    129     assert(p != end && "Exponent has no digits");
    130   }
    131 
    132   absExponent = decDigitValue(*p++);
    133   assert(absExponent < 10U && "Invalid character in exponent");
    134 
    135   for (; p != end; ++p) {
    136     unsigned int value;
    137 
    138     value = decDigitValue(*p);
    139     assert(value < 10U && "Invalid character in exponent");
    140 
    141     value += absExponent * 10;
    142     if (absExponent >= overlargeExponent) {
    143       absExponent = overlargeExponent;
    144       p = end;  /* outwit assert below */
    145       break;
    146     }
    147     absExponent = value;
    148   }
    149 
    150   assert(p == end && "Invalid exponent in exponent");
    151 
    152   if (isNegative)
    153     return -(int) absExponent;
    154   else
    155     return (int) absExponent;
    156 }
    157 
    158 /* This is ugly and needs cleaning up, but I don't immediately see
    159    how whilst remaining safe.  */
    160 static int
    161 totalExponent(StringRef::iterator p, StringRef::iterator end,
    162               int exponentAdjustment)
    163 {
    164   int unsignedExponent;
    165   bool negative, overflow;
    166   int exponent = 0;
    167 
    168   assert(p != end && "Exponent has no digits");
    169 
    170   negative = *p == '-';
    171   if (*p == '-' || *p == '+') {
    172     p++;
    173     assert(p != end && "Exponent has no digits");
    174   }
    175 
    176   unsignedExponent = 0;
    177   overflow = false;
    178   for (; p != end; ++p) {
    179     unsigned int value;
    180 
    181     value = decDigitValue(*p);
    182     assert(value < 10U && "Invalid character in exponent");
    183 
    184     unsignedExponent = unsignedExponent * 10 + value;
    185     if (unsignedExponent > 32767) {
    186       overflow = true;
    187       break;
    188     }
    189   }
    190 
    191   if (exponentAdjustment > 32767 || exponentAdjustment < -32768)
    192     overflow = true;
    193 
    194   if (!overflow) {
    195     exponent = unsignedExponent;
    196     if (negative)
    197       exponent = -exponent;
    198     exponent += exponentAdjustment;
    199     if (exponent > 32767 || exponent < -32768)
    200       overflow = true;
    201   }
    202 
    203   if (overflow)
    204     exponent = negative ? -32768: 32767;
    205 
    206   return exponent;
    207 }
    208 
    209 static StringRef::iterator
    210 skipLeadingZeroesAndAnyDot(StringRef::iterator begin, StringRef::iterator end,
    211                            StringRef::iterator *dot)
    212 {
    213   StringRef::iterator p = begin;
    214   *dot = end;
    215   while (*p == '0' && p != end)
    216     p++;
    217 
    218   if (*p == '.') {
    219     *dot = p++;
    220 
    221     assert(end - begin != 1 && "Significand has no digits");
    222 
    223     while (*p == '0' && p != end)
    224       p++;
    225   }
    226 
    227   return p;
    228 }
    229 
    230 /* Given a normal decimal floating point number of the form
    231 
    232      dddd.dddd[eE][+-]ddd
    233 
    234    where the decimal point and exponent are optional, fill out the
    235    structure D.  Exponent is appropriate if the significand is
    236    treated as an integer, and normalizedExponent if the significand
    237    is taken to have the decimal point after a single leading
    238    non-zero digit.
    239 
    240    If the value is zero, V->firstSigDigit points to a non-digit, and
    241    the return exponent is zero.
    242 */
    243 struct decimalInfo {
    244   const char *firstSigDigit;
    245   const char *lastSigDigit;
    246   int exponent;
    247   int normalizedExponent;
    248 };
    249 
    250 static void
    251 interpretDecimal(StringRef::iterator begin, StringRef::iterator end,
    252                  decimalInfo *D)
    253 {
    254   StringRef::iterator dot = end;
    255   StringRef::iterator p = skipLeadingZeroesAndAnyDot (begin, end, &dot);
    256 
    257   D->firstSigDigit = p;
    258   D->exponent = 0;
    259   D->normalizedExponent = 0;
    260 
    261   for (; p != end; ++p) {
    262     if (*p == '.') {
    263       assert(dot == end && "String contains multiple dots");
    264       dot = p++;
    265       if (p == end)
    266         break;
    267     }
    268     if (decDigitValue(*p) >= 10U)
    269       break;
    270   }
    271 
    272   if (p != end) {
    273     assert((*p == 'e' || *p == 'E') && "Invalid character in significand");
    274     assert(p != begin && "Significand has no digits");
    275     assert((dot == end || p - begin != 1) && "Significand has no digits");
    276 
    277     /* p points to the first non-digit in the string */
    278     D->exponent = readExponent(p + 1, end);
    279 
    280     /* Implied decimal point?  */
    281     if (dot == end)
    282       dot = p;
    283   }
    284 
    285   /* If number is all zeroes accept any exponent.  */
    286   if (p != D->firstSigDigit) {
    287     /* Drop insignificant trailing zeroes.  */
    288     if (p != begin) {
    289       do
    290         do
    291           p--;
    292         while (p != begin && *p == '0');
    293       while (p != begin && *p == '.');
    294     }
    295 
    296     /* Adjust the exponents for any decimal point.  */
    297     D->exponent += static_cast<APFloat::ExponentType>((dot - p) - (dot > p));
    298     D->normalizedExponent = (D->exponent +
    299               static_cast<APFloat::ExponentType>((p - D->firstSigDigit)
    300                                       - (dot > D->firstSigDigit && dot < p)));
    301   }
    302 
    303   D->lastSigDigit = p;
    304 }
    305 
    306 /* Return the trailing fraction of a hexadecimal number.
    307    DIGITVALUE is the first hex digit of the fraction, P points to
    308    the next digit.  */
    309 static lostFraction
    310 trailingHexadecimalFraction(StringRef::iterator p, StringRef::iterator end,
    311                             unsigned int digitValue)
    312 {
    313   unsigned int hexDigit;
    314 
    315   /* If the first trailing digit isn't 0 or 8 we can work out the
    316      fraction immediately.  */
    317   if (digitValue > 8)
    318     return lfMoreThanHalf;
    319   else if (digitValue < 8 && digitValue > 0)
    320     return lfLessThanHalf;
    321 
    322   // Otherwise we need to find the first non-zero digit.
    323   while (p != end && (*p == '0' || *p == '.'))
    324     p++;
    325 
    326   assert(p != end && "Invalid trailing hexadecimal fraction!");
    327 
    328   hexDigit = hexDigitValue(*p);
    329 
    330   /* If we ran off the end it is exactly zero or one-half, otherwise
    331      a little more.  */
    332   if (hexDigit == -1U)
    333     return digitValue == 0 ? lfExactlyZero: lfExactlyHalf;
    334   else
    335     return digitValue == 0 ? lfLessThanHalf: lfMoreThanHalf;
    336 }
    337 
    338 /* Return the fraction lost were a bignum truncated losing the least
    339    significant BITS bits.  */
    340 static lostFraction
    341 lostFractionThroughTruncation(const integerPart *parts,
    342                               unsigned int partCount,
    343                               unsigned int bits)
    344 {
    345   unsigned int lsb;
    346 
    347   lsb = APInt::tcLSB(parts, partCount);
    348 
    349   /* Note this is guaranteed true if bits == 0, or LSB == -1U.  */
    350   if (bits <= lsb)
    351     return lfExactlyZero;
    352   if (bits == lsb + 1)
    353     return lfExactlyHalf;
    354   if (bits <= partCount * integerPartWidth &&
    355       APInt::tcExtractBit(parts, bits - 1))
    356     return lfMoreThanHalf;
    357 
    358   return lfLessThanHalf;
    359 }
    360 
    361 /* Shift DST right BITS bits noting lost fraction.  */
    362 static lostFraction
    363 shiftRight(integerPart *dst, unsigned int parts, unsigned int bits)
    364 {
    365   lostFraction lost_fraction;
    366 
    367   lost_fraction = lostFractionThroughTruncation(dst, parts, bits);
    368 
    369   APInt::tcShiftRight(dst, parts, bits);
    370 
    371   return lost_fraction;
    372 }
    373 
    374 /* Combine the effect of two lost fractions.  */
    375 static lostFraction
    376 combineLostFractions(lostFraction moreSignificant,
    377                      lostFraction lessSignificant)
    378 {
    379   if (lessSignificant != lfExactlyZero) {
    380     if (moreSignificant == lfExactlyZero)
    381       moreSignificant = lfLessThanHalf;
    382     else if (moreSignificant == lfExactlyHalf)
    383       moreSignificant = lfMoreThanHalf;
    384   }
    385 
    386   return moreSignificant;
    387 }
    388 
    389 /* The error from the true value, in half-ulps, on multiplying two
    390    floating point numbers, which differ from the value they
    391    approximate by at most HUE1 and HUE2 half-ulps, is strictly less
    392    than the returned value.
    393 
    394    See "How to Read Floating Point Numbers Accurately" by William D
    395    Clinger.  */
    396 static unsigned int
    397 HUerrBound(bool inexactMultiply, unsigned int HUerr1, unsigned int HUerr2)
    398 {
    399   assert(HUerr1 < 2 || HUerr2 < 2 || (HUerr1 + HUerr2 < 8));
    400 
    401   if (HUerr1 + HUerr2 == 0)
    402     return inexactMultiply * 2;  /* <= inexactMultiply half-ulps.  */
    403   else
    404     return inexactMultiply + 2 * (HUerr1 + HUerr2);
    405 }
    406 
    407 /* The number of ulps from the boundary (zero, or half if ISNEAREST)
    408    when the least significant BITS are truncated.  BITS cannot be
    409    zero.  */
    410 static integerPart
    411 ulpsFromBoundary(const integerPart *parts, unsigned int bits, bool isNearest)
    412 {
    413   unsigned int count, partBits;
    414   integerPart part, boundary;
    415 
    416   assert(bits != 0);
    417 
    418   bits--;
    419   count = bits / integerPartWidth;
    420   partBits = bits % integerPartWidth + 1;
    421 
    422   part = parts[count] & (~(integerPart) 0 >> (integerPartWidth - partBits));
    423 
    424   if (isNearest)
    425     boundary = (integerPart) 1 << (partBits - 1);
    426   else
    427     boundary = 0;
    428 
    429   if (count == 0) {
    430     if (part - boundary <= boundary - part)
    431       return part - boundary;
    432     else
    433       return boundary - part;
    434   }
    435 
    436   if (part == boundary) {
    437     while (--count)
    438       if (parts[count])
    439         return ~(integerPart) 0; /* A lot.  */
    440 
    441     return parts[0];
    442   } else if (part == boundary - 1) {
    443     while (--count)
    444       if (~parts[count])
    445         return ~(integerPart) 0; /* A lot.  */
    446 
    447     return -parts[0];
    448   }
    449 
    450   return ~(integerPart) 0; /* A lot.  */
    451 }
    452 
    453 /* Place pow(5, power) in DST, and return the number of parts used.
    454    DST must be at least one part larger than size of the answer.  */
    455 static unsigned int
    456 powerOf5(integerPart *dst, unsigned int power)
    457 {
    458   static const integerPart firstEightPowers[] = { 1, 5, 25, 125, 625, 3125,
    459                                                   15625, 78125 };
    460   integerPart pow5s[maxPowerOfFiveParts * 2 + 5];
    461   pow5s[0] = 78125 * 5;
    462 
    463   unsigned int partsCount[16] = { 1 };
    464   integerPart scratch[maxPowerOfFiveParts], *p1, *p2, *pow5;
    465   unsigned int result;
    466   assert(power <= maxExponent);
    467 
    468   p1 = dst;
    469   p2 = scratch;
    470 
    471   *p1 = firstEightPowers[power & 7];
    472   power >>= 3;
    473 
    474   result = 1;
    475   pow5 = pow5s;
    476 
    477   for (unsigned int n = 0; power; power >>= 1, n++) {
    478     unsigned int pc;
    479 
    480     pc = partsCount[n];
    481 
    482     /* Calculate pow(5,pow(2,n+3)) if we haven't yet.  */
    483     if (pc == 0) {
    484       pc = partsCount[n - 1];
    485       APInt::tcFullMultiply(pow5, pow5 - pc, pow5 - pc, pc, pc);
    486       pc *= 2;
    487       if (pow5[pc - 1] == 0)
    488         pc--;
    489       partsCount[n] = pc;
    490     }
    491 
    492     if (power & 1) {
    493       integerPart *tmp;
    494 
    495       APInt::tcFullMultiply(p2, p1, pow5, result, pc);
    496       result += pc;
    497       if (p2[result - 1] == 0)
    498         result--;
    499 
    500       /* Now result is in p1 with partsCount parts and p2 is scratch
    501          space.  */
    502       tmp = p1, p1 = p2, p2 = tmp;
    503     }
    504 
    505     pow5 += pc;
    506   }
    507 
    508   if (p1 != dst)
    509     APInt::tcAssign(dst, p1, result);
    510 
    511   return result;
    512 }
    513 
    514 /* Zero at the end to avoid modular arithmetic when adding one; used
    515    when rounding up during hexadecimal output.  */
    516 static const char hexDigitsLower[] = "0123456789abcdef0";
    517 static const char hexDigitsUpper[] = "0123456789ABCDEF0";
    518 static const char infinityL[] = "infinity";
    519 static const char infinityU[] = "INFINITY";
    520 static const char NaNL[] = "nan";
    521 static const char NaNU[] = "NAN";
    522 
    523 /* Write out an integerPart in hexadecimal, starting with the most
    524    significant nibble.  Write out exactly COUNT hexdigits, return
    525    COUNT.  */
    526 static unsigned int
    527 partAsHex (char *dst, integerPart part, unsigned int count,
    528            const char *hexDigitChars)
    529 {
    530   unsigned int result = count;
    531 
    532   assert(count != 0 && count <= integerPartWidth / 4);
    533 
    534   part >>= (integerPartWidth - 4 * count);
    535   while (count--) {
    536     dst[count] = hexDigitChars[part & 0xf];
    537     part >>= 4;
    538   }
    539 
    540   return result;
    541 }
    542 
    543 /* Write out an unsigned decimal integer.  */
    544 static char *
    545 writeUnsignedDecimal (char *dst, unsigned int n)
    546 {
    547   char buff[40], *p;
    548 
    549   p = buff;
    550   do
    551     *p++ = '0' + n % 10;
    552   while (n /= 10);
    553 
    554   do
    555     *dst++ = *--p;
    556   while (p != buff);
    557 
    558   return dst;
    559 }
    560 
    561 /* Write out a signed decimal integer.  */
    562 static char *
    563 writeSignedDecimal (char *dst, int value)
    564 {
    565   if (value < 0) {
    566     *dst++ = '-';
    567     dst = writeUnsignedDecimal(dst, -(unsigned) value);
    568   } else
    569     dst = writeUnsignedDecimal(dst, value);
    570 
    571   return dst;
    572 }
    573 
    574 /* Constructors.  */
    575 void
    576 APFloat::initialize(const fltSemantics *ourSemantics)
    577 {
    578   unsigned int count;
    579 
    580   semantics = ourSemantics;
    581   count = partCount();
    582   if (count > 1)
    583     significand.parts = new integerPart[count];
    584 }
    585 
    586 void
    587 APFloat::freeSignificand()
    588 {
    589   if (needsCleanup())
    590     delete [] significand.parts;
    591 }
    592 
    593 void
    594 APFloat::assign(const APFloat &rhs)
    595 {
    596   assert(semantics == rhs.semantics);
    597 
    598   sign = rhs.sign;
    599   category = rhs.category;
    600   exponent = rhs.exponent;
    601   if (isFiniteNonZero() || category == fcNaN)
    602     copySignificand(rhs);
    603 }
    604 
    605 void
    606 APFloat::copySignificand(const APFloat &rhs)
    607 {
    608   assert(isFiniteNonZero() || category == fcNaN);
    609   assert(rhs.partCount() >= partCount());
    610 
    611   APInt::tcAssign(significandParts(), rhs.significandParts(),
    612                   partCount());
    613 }
    614 
    615 /* Make this number a NaN, with an arbitrary but deterministic value
    616    for the significand.  If double or longer, this is a signalling NaN,
    617    which may not be ideal.  If float, this is QNaN(0).  */
    618 void APFloat::makeNaN(bool SNaN, bool Negative, const APInt *fill)
    619 {
    620   category = fcNaN;
    621   sign = Negative;
    622 
    623   integerPart *significand = significandParts();
    624   unsigned numParts = partCount();
    625 
    626   // Set the significand bits to the fill.
    627   if (!fill || fill->getNumWords() < numParts)
    628     APInt::tcSet(significand, 0, numParts);
    629   if (fill) {
    630     APInt::tcAssign(significand, fill->getRawData(),
    631                     std::min(fill->getNumWords(), numParts));
    632 
    633     // Zero out the excess bits of the significand.
    634     unsigned bitsToPreserve = semantics->precision - 1;
    635     unsigned part = bitsToPreserve / 64;
    636     bitsToPreserve %= 64;
    637     significand[part] &= ((1ULL << bitsToPreserve) - 1);
    638     for (part++; part != numParts; ++part)
    639       significand[part] = 0;
    640   }
    641 
    642   unsigned QNaNBit = semantics->precision - 2;
    643 
    644   if (SNaN) {
    645     // We always have to clear the QNaN bit to make it an SNaN.
    646     APInt::tcClearBit(significand, QNaNBit);
    647 
    648     // If there are no bits set in the payload, we have to set
    649     // *something* to make it a NaN instead of an infinity;
    650     // conventionally, this is the next bit down from the QNaN bit.
    651     if (APInt::tcIsZero(significand, numParts))
    652       APInt::tcSetBit(significand, QNaNBit - 1);
    653   } else {
    654     // We always have to set the QNaN bit to make it a QNaN.
    655     APInt::tcSetBit(significand, QNaNBit);
    656   }
    657 
    658   // For x87 extended precision, we want to make a NaN, not a
    659   // pseudo-NaN.  Maybe we should expose the ability to make
    660   // pseudo-NaNs?
    661   if (semantics == &APFloat::x87DoubleExtended)
    662     APInt::tcSetBit(significand, QNaNBit + 1);
    663 }
    664 
    665 APFloat APFloat::makeNaN(const fltSemantics &Sem, bool SNaN, bool Negative,
    666                          const APInt *fill) {
    667   APFloat value(Sem, uninitialized);
    668   value.makeNaN(SNaN, Negative, fill);
    669   return value;
    670 }
    671 
    672 APFloat &
    673 APFloat::operator=(const APFloat &rhs)
    674 {
    675   if (this != &rhs) {
    676     if (semantics != rhs.semantics) {
    677       freeSignificand();
    678       initialize(rhs.semantics);
    679     }
    680     assign(rhs);
    681   }
    682 
    683   return *this;
    684 }
    685 
    686 bool
    687 APFloat::isDenormal() const {
    688   return isFiniteNonZero() && (exponent == semantics->minExponent) &&
    689          (APInt::tcExtractBit(significandParts(),
    690                               semantics->precision - 1) == 0);
    691 }
    692 
    693 bool
    694 APFloat::isSmallest() const {
    695   // The smallest number by magnitude in our format will be the smallest
    696   // denormal, i.e. the floating point number with exponent being minimum
    697   // exponent and significand bitwise equal to 1 (i.e. with MSB equal to 0).
    698   return isFiniteNonZero() && exponent == semantics->minExponent &&
    699     significandMSB() == 0;
    700 }
    701 
    702 bool APFloat::isSignificandAllOnes() const {
    703   // Test if the significand excluding the integral bit is all ones. This allows
    704   // us to test for binade boundaries.
    705   const integerPart *Parts = significandParts();
    706   const unsigned PartCount = partCount();
    707   for (unsigned i = 0; i < PartCount - 1; i++)
    708     if (~Parts[i])
    709       return false;
    710 
    711   // Set the unused high bits to all ones when we compare.
    712   const unsigned NumHighBits =
    713     PartCount*integerPartWidth - semantics->precision + 1;
    714   assert(NumHighBits <= integerPartWidth && "Can not have more high bits to "
    715          "fill than integerPartWidth");
    716   const integerPart HighBitFill =
    717     ~integerPart(0) << (integerPartWidth - NumHighBits);
    718   if (~(Parts[PartCount - 1] | HighBitFill))
    719     return false;
    720 
    721   return true;
    722 }
    723 
    724 bool APFloat::isSignificandAllZeros() const {
    725   // Test if the significand excluding the integral bit is all zeros. This
    726   // allows us to test for binade boundaries.
    727   const integerPart *Parts = significandParts();
    728   const unsigned PartCount = partCount();
    729 
    730   for (unsigned i = 0; i < PartCount - 1; i++)
    731     if (Parts[i])
    732       return false;
    733 
    734   const unsigned NumHighBits =
    735     PartCount*integerPartWidth - semantics->precision + 1;
    736   assert(NumHighBits <= integerPartWidth && "Can not have more high bits to "
    737          "clear than integerPartWidth");
    738   const integerPart HighBitMask = ~integerPart(0) >> NumHighBits;
    739 
    740   if (Parts[PartCount - 1] & HighBitMask)
    741     return false;
    742 
    743   return true;
    744 }
    745 
    746 bool
    747 APFloat::isLargest() const {
    748   // The largest number by magnitude in our format will be the floating point
    749   // number with maximum exponent and with significand that is all ones.
    750   return isFiniteNonZero() && exponent == semantics->maxExponent
    751     && isSignificandAllOnes();
    752 }
    753 
    754 bool
    755 APFloat::bitwiseIsEqual(const APFloat &rhs) const {
    756   if (this == &rhs)
    757     return true;
    758   if (semantics != rhs.semantics ||
    759       category != rhs.category ||
    760       sign != rhs.sign)
    761     return false;
    762   if (category==fcZero || category==fcInfinity)
    763     return true;
    764   else if (isFiniteNonZero() && exponent!=rhs.exponent)
    765     return false;
    766   else {
    767     int i= partCount();
    768     const integerPart* p=significandParts();
    769     const integerPart* q=rhs.significandParts();
    770     for (; i>0; i--, p++, q++) {
    771       if (*p != *q)
    772         return false;
    773     }
    774     return true;
    775   }
    776 }
    777 
    778 APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value) {
    779   initialize(&ourSemantics);
    780   sign = 0;
    781   category = fcNormal;
    782   zeroSignificand();
    783   exponent = ourSemantics.precision - 1;
    784   significandParts()[0] = value;
    785   normalize(rmNearestTiesToEven, lfExactlyZero);
    786 }
    787 
    788 APFloat::APFloat(const fltSemantics &ourSemantics) {
    789   initialize(&ourSemantics);
    790   category = fcZero;
    791   sign = false;
    792 }
    793 
    794 APFloat::APFloat(const fltSemantics &ourSemantics, uninitializedTag tag) {
    795   // Allocates storage if necessary but does not initialize it.
    796   initialize(&ourSemantics);
    797 }
    798 
    799 APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) {
    800   initialize(&ourSemantics);
    801   convertFromString(text, rmNearestTiesToEven);
    802 }
    803 
    804 APFloat::APFloat(const APFloat &rhs) {
    805   initialize(rhs.semantics);
    806   assign(rhs);
    807 }
    808 
    809 APFloat::~APFloat()
    810 {
    811   freeSignificand();
    812 }
    813 
    814 // Profile - This method 'profiles' an APFloat for use with FoldingSet.
    815 void APFloat::Profile(FoldingSetNodeID& ID) const {
    816   ID.Add(bitcastToAPInt());
    817 }
    818 
    819 unsigned int
    820 APFloat::partCount() const
    821 {
    822   return partCountForBits(semantics->precision + 1);
    823 }
    824 
    825 unsigned int
    826 APFloat::semanticsPrecision(const fltSemantics &semantics)
    827 {
    828   return semantics.precision;
    829 }
    830 
    831 const integerPart *
    832 APFloat::significandParts() const
    833 {
    834   return const_cast<APFloat *>(this)->significandParts();
    835 }
    836 
    837 integerPart *
    838 APFloat::significandParts()
    839 {
    840   if (partCount() > 1)
    841     return significand.parts;
    842   else
    843     return &significand.part;
    844 }
    845 
    846 void
    847 APFloat::zeroSignificand()
    848 {
    849   APInt::tcSet(significandParts(), 0, partCount());
    850 }
    851 
    852 /* Increment an fcNormal floating point number's significand.  */
    853 void
    854 APFloat::incrementSignificand()
    855 {
    856   integerPart carry;
    857 
    858   carry = APInt::tcIncrement(significandParts(), partCount());
    859 
    860   /* Our callers should never cause us to overflow.  */
    861   assert(carry == 0);
    862   (void)carry;
    863 }
    864 
    865 /* Add the significand of the RHS.  Returns the carry flag.  */
    866 integerPart
    867 APFloat::addSignificand(const APFloat &rhs)
    868 {
    869   integerPart *parts;
    870 
    871   parts = significandParts();
    872 
    873   assert(semantics == rhs.semantics);
    874   assert(exponent == rhs.exponent);
    875 
    876   return APInt::tcAdd(parts, rhs.significandParts(), 0, partCount());
    877 }
    878 
    879 /* Subtract the significand of the RHS with a borrow flag.  Returns
    880    the borrow flag.  */
    881 integerPart
    882 APFloat::subtractSignificand(const APFloat &rhs, integerPart borrow)
    883 {
    884   integerPart *parts;
    885 
    886   parts = significandParts();
    887 
    888   assert(semantics == rhs.semantics);
    889   assert(exponent == rhs.exponent);
    890 
    891   return APInt::tcSubtract(parts, rhs.significandParts(), borrow,
    892                            partCount());
    893 }
    894 
    895 /* Multiply the significand of the RHS.  If ADDEND is non-NULL, add it
    896    on to the full-precision result of the multiplication.  Returns the
    897    lost fraction.  */
    898 lostFraction
    899 APFloat::multiplySignificand(const APFloat &rhs, const APFloat *addend)
    900 {
    901   unsigned int omsb;        // One, not zero, based MSB.
    902   unsigned int partsCount, newPartsCount, precision;
    903   integerPart *lhsSignificand;
    904   integerPart scratch[4];
    905   integerPart *fullSignificand;
    906   lostFraction lost_fraction;
    907   bool ignored;
    908 
    909   assert(semantics == rhs.semantics);
    910 
    911   precision = semantics->precision;
    912   newPartsCount = partCountForBits(precision * 2);
    913 
    914   if (newPartsCount > 4)
    915     fullSignificand = new integerPart[newPartsCount];
    916   else
    917     fullSignificand = scratch;
    918 
    919   lhsSignificand = significandParts();
    920   partsCount = partCount();
    921 
    922   APInt::tcFullMultiply(fullSignificand, lhsSignificand,
    923                         rhs.significandParts(), partsCount, partsCount);
    924 
    925   lost_fraction = lfExactlyZero;
    926   omsb = APInt::tcMSB(fullSignificand, newPartsCount) + 1;
    927   exponent += rhs.exponent;
    928 
    929   // Assume the operands involved in the multiplication are single-precision
    930   // FP, and the two multiplicants are:
    931   //   *this = a23 . a22 ... a0 * 2^e1
    932   //     rhs = b23 . b22 ... b0 * 2^e2
    933   // the result of multiplication is:
    934   //   *this = c47 c46 . c45 ... c0 * 2^(e1+e2)
    935   // Note that there are two significant bits at the left-hand side of the
    936   // radix point. Move the radix point toward left by one bit, and adjust
    937   // exponent accordingly.
    938   exponent += 1;
    939 
    940   if (addend) {
    941     // The intermediate result of the multiplication has "2 * precision"
    942     // signicant bit; adjust the addend to be consistent with mul result.
    943     //
    944     Significand savedSignificand = significand;
    945     const fltSemantics *savedSemantics = semantics;
    946     fltSemantics extendedSemantics;
    947     opStatus status;
    948     unsigned int extendedPrecision;
    949 
    950     /* Normalize our MSB.  */
    951     extendedPrecision = 2 * precision;
    952     if (omsb != extendedPrecision) {
    953       assert(extendedPrecision > omsb);
    954       APInt::tcShiftLeft(fullSignificand, newPartsCount,
    955                          extendedPrecision - omsb);
    956       exponent -= extendedPrecision - omsb;
    957     }
    958 
    959     /* Create new semantics.  */
    960     extendedSemantics = *semantics;
    961     extendedSemantics.precision = extendedPrecision;
    962 
    963     if (newPartsCount == 1)
    964       significand.part = fullSignificand[0];
    965     else
    966       significand.parts = fullSignificand;
    967     semantics = &extendedSemantics;
    968 
    969     APFloat extendedAddend(*addend);
    970     status = extendedAddend.convert(extendedSemantics, rmTowardZero, &ignored);
    971     assert(status == opOK);
    972     (void)status;
    973     lost_fraction = addOrSubtractSignificand(extendedAddend, false);
    974 
    975     /* Restore our state.  */
    976     if (newPartsCount == 1)
    977       fullSignificand[0] = significand.part;
    978     significand = savedSignificand;
    979     semantics = savedSemantics;
    980 
    981     omsb = APInt::tcMSB(fullSignificand, newPartsCount) + 1;
    982   }
    983 
    984   // Convert the result having "2 * precision" significant-bits back to the one
    985   // having "precision" significant-bits. First, move the radix point from
    986   // poision "2*precision - 1" to "precision - 1". The exponent need to be
    987   // adjusted by "2*precision - 1" - "precision - 1" = "precision".
    988   exponent -= precision;
    989 
    990   // In case MSB resides at the left-hand side of radix point, shift the
    991   // mantissa right by some amount to make sure the MSB reside right before
    992   // the radix point (i.e. "MSB . rest-significant-bits").
    993   //
    994   // Note that the result is not normalized when "omsb < precision". So, the
    995   // caller needs to call APFloat::normalize() if normalized value is expected.
    996   if (omsb > precision) {
    997     unsigned int bits, significantParts;
    998     lostFraction lf;
    999 
   1000     bits = omsb - precision;
   1001     significantParts = partCountForBits(omsb);
   1002     lf = shiftRight(fullSignificand, significantParts, bits);
   1003     lost_fraction = combineLostFractions(lf, lost_fraction);
   1004     exponent += bits;
   1005   }
   1006 
   1007   APInt::tcAssign(lhsSignificand, fullSignificand, partsCount);
   1008 
   1009   if (newPartsCount > 4)
   1010     delete [] fullSignificand;
   1011 
   1012   return lost_fraction;
   1013 }
   1014 
   1015 /* Multiply the significands of LHS and RHS to DST.  */
   1016 lostFraction
   1017 APFloat::divideSignificand(const APFloat &rhs)
   1018 {
   1019   unsigned int bit, i, partsCount;
   1020   const integerPart *rhsSignificand;
   1021   integerPart *lhsSignificand, *dividend, *divisor;
   1022   integerPart scratch[4];
   1023   lostFraction lost_fraction;
   1024 
   1025   assert(semantics == rhs.semantics);
   1026 
   1027   lhsSignificand = significandParts();
   1028   rhsSignificand = rhs.significandParts();
   1029   partsCount = partCount();
   1030 
   1031   if (partsCount > 2)
   1032     dividend = new integerPart[partsCount * 2];
   1033   else
   1034     dividend = scratch;
   1035 
   1036   divisor = dividend + partsCount;
   1037 
   1038   /* Copy the dividend and divisor as they will be modified in-place.  */
   1039   for (i = 0; i < partsCount; i++) {
   1040     dividend[i] = lhsSignificand[i];
   1041     divisor[i] = rhsSignificand[i];
   1042     lhsSignificand[i] = 0;
   1043   }
   1044 
   1045   exponent -= rhs.exponent;
   1046 
   1047   unsigned int precision = semantics->precision;
   1048 
   1049   /* Normalize the divisor.  */
   1050   bit = precision - APInt::tcMSB(divisor, partsCount) - 1;
   1051   if (bit) {
   1052     exponent += bit;
   1053     APInt::tcShiftLeft(divisor, partsCount, bit);
   1054   }
   1055 
   1056   /* Normalize the dividend.  */
   1057   bit = precision - APInt::tcMSB(dividend, partsCount) - 1;
   1058   if (bit) {
   1059     exponent -= bit;
   1060     APInt::tcShiftLeft(dividend, partsCount, bit);
   1061   }
   1062 
   1063   /* Ensure the dividend >= divisor initially for the loop below.
   1064      Incidentally, this means that the division loop below is
   1065      guaranteed to set the integer bit to one.  */
   1066   if (APInt::tcCompare(dividend, divisor, partsCount) < 0) {
   1067     exponent--;
   1068     APInt::tcShiftLeft(dividend, partsCount, 1);
   1069     assert(APInt::tcCompare(dividend, divisor, partsCount) >= 0);
   1070   }
   1071 
   1072   /* Long division.  */
   1073   for (bit = precision; bit; bit -= 1) {
   1074     if (APInt::tcCompare(dividend, divisor, partsCount) >= 0) {
   1075       APInt::tcSubtract(dividend, divisor, 0, partsCount);
   1076       APInt::tcSetBit(lhsSignificand, bit - 1);
   1077     }
   1078 
   1079     APInt::tcShiftLeft(dividend, partsCount, 1);
   1080   }
   1081 
   1082   /* Figure out the lost fraction.  */
   1083   int cmp = APInt::tcCompare(dividend, divisor, partsCount);
   1084 
   1085   if (cmp > 0)
   1086     lost_fraction = lfMoreThanHalf;
   1087   else if (cmp == 0)
   1088     lost_fraction = lfExactlyHalf;
   1089   else if (APInt::tcIsZero(dividend, partsCount))
   1090     lost_fraction = lfExactlyZero;
   1091   else
   1092     lost_fraction = lfLessThanHalf;
   1093 
   1094   if (partsCount > 2)
   1095     delete [] dividend;
   1096 
   1097   return lost_fraction;
   1098 }
   1099 
   1100 unsigned int
   1101 APFloat::significandMSB() const
   1102 {
   1103   return APInt::tcMSB(significandParts(), partCount());
   1104 }
   1105 
   1106 unsigned int
   1107 APFloat::significandLSB() const
   1108 {
   1109   return APInt::tcLSB(significandParts(), partCount());
   1110 }
   1111 
   1112 /* Note that a zero result is NOT normalized to fcZero.  */
   1113 lostFraction
   1114 APFloat::shiftSignificandRight(unsigned int bits)
   1115 {
   1116   /* Our exponent should not overflow.  */
   1117   assert((ExponentType) (exponent + bits) >= exponent);
   1118 
   1119   exponent += bits;
   1120 
   1121   return shiftRight(significandParts(), partCount(), bits);
   1122 }
   1123 
   1124 /* Shift the significand left BITS bits, subtract BITS from its exponent.  */
   1125 void
   1126 APFloat::shiftSignificandLeft(unsigned int bits)
   1127 {
   1128   assert(bits < semantics->precision);
   1129 
   1130   if (bits) {
   1131     unsigned int partsCount = partCount();
   1132 
   1133     APInt::tcShiftLeft(significandParts(), partsCount, bits);
   1134     exponent -= bits;
   1135 
   1136     assert(!APInt::tcIsZero(significandParts(), partsCount));
   1137   }
   1138 }
   1139 
   1140 APFloat::cmpResult
   1141 APFloat::compareAbsoluteValue(const APFloat &rhs) const
   1142 {
   1143   int compare;
   1144 
   1145   assert(semantics == rhs.semantics);
   1146   assert(isFiniteNonZero());
   1147   assert(rhs.isFiniteNonZero());
   1148 
   1149   compare = exponent - rhs.exponent;
   1150 
   1151   /* If exponents are equal, do an unsigned bignum comparison of the
   1152      significands.  */
   1153   if (compare == 0)
   1154     compare = APInt::tcCompare(significandParts(), rhs.significandParts(),
   1155                                partCount());
   1156 
   1157   if (compare > 0)
   1158     return cmpGreaterThan;
   1159   else if (compare < 0)
   1160     return cmpLessThan;
   1161   else
   1162     return cmpEqual;
   1163 }
   1164 
   1165 /* Handle overflow.  Sign is preserved.  We either become infinity or
   1166    the largest finite number.  */
   1167 APFloat::opStatus
   1168 APFloat::handleOverflow(roundingMode rounding_mode)
   1169 {
   1170   /* Infinity?  */
   1171   if (rounding_mode == rmNearestTiesToEven ||
   1172       rounding_mode == rmNearestTiesToAway ||
   1173       (rounding_mode == rmTowardPositive && !sign) ||
   1174       (rounding_mode == rmTowardNegative && sign)) {
   1175     category = fcInfinity;
   1176     return (opStatus) (opOverflow | opInexact);
   1177   }
   1178 
   1179   /* Otherwise we become the largest finite number.  */
   1180   category = fcNormal;
   1181   exponent = semantics->maxExponent;
   1182   APInt::tcSetLeastSignificantBits(significandParts(), partCount(),
   1183                                    semantics->precision);
   1184 
   1185   return opInexact;
   1186 }
   1187 
   1188 /* Returns TRUE if, when truncating the current number, with BIT the
   1189    new LSB, with the given lost fraction and rounding mode, the result
   1190    would need to be rounded away from zero (i.e., by increasing the
   1191    signficand).  This routine must work for fcZero of both signs, and
   1192    fcNormal numbers.  */
   1193 bool
   1194 APFloat::roundAwayFromZero(roundingMode rounding_mode,
   1195                            lostFraction lost_fraction,
   1196                            unsigned int bit) const
   1197 {
   1198   /* NaNs and infinities should not have lost fractions.  */
   1199   assert(isFiniteNonZero() || category == fcZero);
   1200 
   1201   /* Current callers never pass this so we don't handle it.  */
   1202   assert(lost_fraction != lfExactlyZero);
   1203 
   1204   switch (rounding_mode) {
   1205   case rmNearestTiesToAway:
   1206     return lost_fraction == lfExactlyHalf || lost_fraction == lfMoreThanHalf;
   1207 
   1208   case rmNearestTiesToEven:
   1209     if (lost_fraction == lfMoreThanHalf)
   1210       return true;
   1211 
   1212     /* Our zeroes don't have a significand to test.  */
   1213     if (lost_fraction == lfExactlyHalf && category != fcZero)
   1214       return APInt::tcExtractBit(significandParts(), bit);
   1215 
   1216     return false;
   1217 
   1218   case rmTowardZero:
   1219     return false;
   1220 
   1221   case rmTowardPositive:
   1222     return sign == false;
   1223 
   1224   case rmTowardNegative:
   1225     return sign == true;
   1226   }
   1227   llvm_unreachable("Invalid rounding mode found");
   1228 }
   1229 
   1230 APFloat::opStatus
   1231 APFloat::normalize(roundingMode rounding_mode,
   1232                    lostFraction lost_fraction)
   1233 {
   1234   unsigned int omsb;                /* One, not zero, based MSB.  */
   1235   int exponentChange;
   1236 
   1237   if (!isFiniteNonZero())
   1238     return opOK;
   1239 
   1240   /* Before rounding normalize the exponent of fcNormal numbers.  */
   1241   omsb = significandMSB() + 1;
   1242 
   1243   if (omsb) {
   1244     /* OMSB is numbered from 1.  We want to place it in the integer
   1245        bit numbered PRECISION if possible, with a compensating change in
   1246        the exponent.  */
   1247     exponentChange = omsb - semantics->precision;
   1248 
   1249     /* If the resulting exponent is too high, overflow according to
   1250        the rounding mode.  */
   1251     if (exponent + exponentChange > semantics->maxExponent)
   1252       return handleOverflow(rounding_mode);
   1253 
   1254     /* Subnormal numbers have exponent minExponent, and their MSB
   1255        is forced based on that.  */
   1256     if (exponent + exponentChange < semantics->minExponent)
   1257       exponentChange = semantics->minExponent - exponent;
   1258 
   1259     /* Shifting left is easy as we don't lose precision.  */
   1260     if (exponentChange < 0) {
   1261       assert(lost_fraction == lfExactlyZero);
   1262 
   1263       shiftSignificandLeft(-exponentChange);
   1264 
   1265       return opOK;
   1266     }
   1267 
   1268     if (exponentChange > 0) {
   1269       lostFraction lf;
   1270 
   1271       /* Shift right and capture any new lost fraction.  */
   1272       lf = shiftSignificandRight(exponentChange);
   1273 
   1274       lost_fraction = combineLostFractions(lf, lost_fraction);
   1275 
   1276       /* Keep OMSB up-to-date.  */
   1277       if (omsb > (unsigned) exponentChange)
   1278         omsb -= exponentChange;
   1279       else
   1280         omsb = 0;
   1281     }
   1282   }
   1283 
   1284   /* Now round the number according to rounding_mode given the lost
   1285      fraction.  */
   1286 
   1287   /* As specified in IEEE 754, since we do not trap we do not report
   1288      underflow for exact results.  */
   1289   if (lost_fraction == lfExactlyZero) {
   1290     /* Canonicalize zeroes.  */
   1291     if (omsb == 0)
   1292       category = fcZero;
   1293 
   1294     return opOK;
   1295   }
   1296 
   1297   /* Increment the significand if we're rounding away from zero.  */
   1298   if (roundAwayFromZero(rounding_mode, lost_fraction, 0)) {
   1299     if (omsb == 0)
   1300       exponent = semantics->minExponent;
   1301 
   1302     incrementSignificand();
   1303     omsb = significandMSB() + 1;
   1304 
   1305     /* Did the significand increment overflow?  */
   1306     if (omsb == (unsigned) semantics->precision + 1) {
   1307       /* Renormalize by incrementing the exponent and shifting our
   1308          significand right one.  However if we already have the
   1309          maximum exponent we overflow to infinity.  */
   1310       if (exponent == semantics->maxExponent) {
   1311         category = fcInfinity;
   1312 
   1313         return (opStatus) (opOverflow | opInexact);
   1314       }
   1315 
   1316       shiftSignificandRight(1);
   1317 
   1318       return opInexact;
   1319     }
   1320   }
   1321 
   1322   /* The normal case - we were and are not denormal, and any
   1323      significand increment above didn't overflow.  */
   1324   if (omsb == semantics->precision)
   1325     return opInexact;
   1326 
   1327   /* We have a non-zero denormal.  */
   1328   assert(omsb < semantics->precision);
   1329 
   1330   /* Canonicalize zeroes.  */
   1331   if (omsb == 0)
   1332     category = fcZero;
   1333 
   1334   /* The fcZero case is a denormal that underflowed to zero.  */
   1335   return (opStatus) (opUnderflow | opInexact);
   1336 }
   1337 
   1338 APFloat::opStatus
   1339 APFloat::addOrSubtractSpecials(const APFloat &rhs, bool subtract)
   1340 {
   1341   switch (PackCategoriesIntoKey(category, rhs.category)) {
   1342   default:
   1343     llvm_unreachable(0);
   1344 
   1345   case PackCategoriesIntoKey(fcNaN, fcZero):
   1346   case PackCategoriesIntoKey(fcNaN, fcNormal):
   1347   case PackCategoriesIntoKey(fcNaN, fcInfinity):
   1348   case PackCategoriesIntoKey(fcNaN, fcNaN):
   1349   case PackCategoriesIntoKey(fcNormal, fcZero):
   1350   case PackCategoriesIntoKey(fcInfinity, fcNormal):
   1351   case PackCategoriesIntoKey(fcInfinity, fcZero):
   1352     return opOK;
   1353 
   1354   case PackCategoriesIntoKey(fcZero, fcNaN):
   1355   case PackCategoriesIntoKey(fcNormal, fcNaN):
   1356   case PackCategoriesIntoKey(fcInfinity, fcNaN):
   1357     sign = false;
   1358     category = fcNaN;
   1359     copySignificand(rhs);
   1360     return opOK;
   1361 
   1362   case PackCategoriesIntoKey(fcNormal, fcInfinity):
   1363   case PackCategoriesIntoKey(fcZero, fcInfinity):
   1364     category = fcInfinity;
   1365     sign = rhs.sign ^ subtract;
   1366     return opOK;
   1367 
   1368   case PackCategoriesIntoKey(fcZero, fcNormal):
   1369     assign(rhs);
   1370     sign = rhs.sign ^ subtract;
   1371     return opOK;
   1372 
   1373   case PackCategoriesIntoKey(fcZero, fcZero):
   1374     /* Sign depends on rounding mode; handled by caller.  */
   1375     return opOK;
   1376 
   1377   case PackCategoriesIntoKey(fcInfinity, fcInfinity):
   1378     /* Differently signed infinities can only be validly
   1379        subtracted.  */
   1380     if (((sign ^ rhs.sign)!=0) != subtract) {
   1381       makeNaN();
   1382       return opInvalidOp;
   1383     }
   1384 
   1385     return opOK;
   1386 
   1387   case PackCategoriesIntoKey(fcNormal, fcNormal):
   1388     return opDivByZero;
   1389   }
   1390 }
   1391 
   1392 /* Add or subtract two normal numbers.  */
   1393 lostFraction
   1394 APFloat::addOrSubtractSignificand(const APFloat &rhs, bool subtract)
   1395 {
   1396   integerPart carry;
   1397   lostFraction lost_fraction;
   1398   int bits;
   1399 
   1400   /* Determine if the operation on the absolute values is effectively
   1401      an addition or subtraction.  */
   1402   subtract ^= (sign ^ rhs.sign) ? true : false;
   1403 
   1404   /* Are we bigger exponent-wise than the RHS?  */
   1405   bits = exponent - rhs.exponent;
   1406 
   1407   /* Subtraction is more subtle than one might naively expect.  */
   1408   if (subtract) {
   1409     APFloat temp_rhs(rhs);
   1410     bool reverse;
   1411 
   1412     if (bits == 0) {
   1413       reverse = compareAbsoluteValue(temp_rhs) == cmpLessThan;
   1414       lost_fraction = lfExactlyZero;
   1415     } else if (bits > 0) {
   1416       lost_fraction = temp_rhs.shiftSignificandRight(bits - 1);
   1417       shiftSignificandLeft(1);
   1418       reverse = false;
   1419     } else {
   1420       lost_fraction = shiftSignificandRight(-bits - 1);
   1421       temp_rhs.shiftSignificandLeft(1);
   1422       reverse = true;
   1423     }
   1424 
   1425     if (reverse) {
   1426       carry = temp_rhs.subtractSignificand
   1427         (*this, lost_fraction != lfExactlyZero);
   1428       copySignificand(temp_rhs);
   1429       sign = !sign;
   1430     } else {
   1431       carry = subtractSignificand
   1432         (temp_rhs, lost_fraction != lfExactlyZero);
   1433     }
   1434 
   1435     /* Invert the lost fraction - it was on the RHS and
   1436        subtracted.  */
   1437     if (lost_fraction == lfLessThanHalf)
   1438       lost_fraction = lfMoreThanHalf;
   1439     else if (lost_fraction == lfMoreThanHalf)
   1440       lost_fraction = lfLessThanHalf;
   1441 
   1442     /* The code above is intended to ensure that no borrow is
   1443        necessary.  */
   1444     assert(!carry);
   1445     (void)carry;
   1446   } else {
   1447     if (bits > 0) {
   1448       APFloat temp_rhs(rhs);
   1449 
   1450       lost_fraction = temp_rhs.shiftSignificandRight(bits);
   1451       carry = addSignificand(temp_rhs);
   1452     } else {
   1453       lost_fraction = shiftSignificandRight(-bits);
   1454       carry = addSignificand(rhs);
   1455     }
   1456 
   1457     /* We have a guard bit; generating a carry cannot happen.  */
   1458     assert(!carry);
   1459     (void)carry;
   1460   }
   1461 
   1462   return lost_fraction;
   1463 }
   1464 
   1465 APFloat::opStatus
   1466 APFloat::multiplySpecials(const APFloat &rhs)
   1467 {
   1468   switch (PackCategoriesIntoKey(category, rhs.category)) {
   1469   default:
   1470     llvm_unreachable(0);
   1471 
   1472   case PackCategoriesIntoKey(fcNaN, fcZero):
   1473   case PackCategoriesIntoKey(fcNaN, fcNormal):
   1474   case PackCategoriesIntoKey(fcNaN, fcInfinity):
   1475   case PackCategoriesIntoKey(fcNaN, fcNaN):
   1476     sign = false;
   1477     return opOK;
   1478 
   1479   case PackCategoriesIntoKey(fcZero, fcNaN):
   1480   case PackCategoriesIntoKey(fcNormal, fcNaN):
   1481   case PackCategoriesIntoKey(fcInfinity, fcNaN):
   1482     sign = false;
   1483     category = fcNaN;
   1484     copySignificand(rhs);
   1485     return opOK;
   1486 
   1487   case PackCategoriesIntoKey(fcNormal, fcInfinity):
   1488   case PackCategoriesIntoKey(fcInfinity, fcNormal):
   1489   case PackCategoriesIntoKey(fcInfinity, fcInfinity):
   1490     category = fcInfinity;
   1491     return opOK;
   1492 
   1493   case PackCategoriesIntoKey(fcZero, fcNormal):
   1494   case PackCategoriesIntoKey(fcNormal, fcZero):
   1495   case PackCategoriesIntoKey(fcZero, fcZero):
   1496     category = fcZero;
   1497     return opOK;
   1498 
   1499   case PackCategoriesIntoKey(fcZero, fcInfinity):
   1500   case PackCategoriesIntoKey(fcInfinity, fcZero):
   1501     makeNaN();
   1502     return opInvalidOp;
   1503 
   1504   case PackCategoriesIntoKey(fcNormal, fcNormal):
   1505     return opOK;
   1506   }
   1507 }
   1508 
   1509 APFloat::opStatus
   1510 APFloat::divideSpecials(const APFloat &rhs)
   1511 {
   1512   switch (PackCategoriesIntoKey(category, rhs.category)) {
   1513   default:
   1514     llvm_unreachable(0);
   1515 
   1516   case PackCategoriesIntoKey(fcZero, fcNaN):
   1517   case PackCategoriesIntoKey(fcNormal, fcNaN):
   1518   case PackCategoriesIntoKey(fcInfinity, fcNaN):
   1519     category = fcNaN;
   1520     copySignificand(rhs);
   1521   case PackCategoriesIntoKey(fcNaN, fcZero):
   1522   case PackCategoriesIntoKey(fcNaN, fcNormal):
   1523   case PackCategoriesIntoKey(fcNaN, fcInfinity):
   1524   case PackCategoriesIntoKey(fcNaN, fcNaN):
   1525     sign = false;
   1526   case PackCategoriesIntoKey(fcInfinity, fcZero):
   1527   case PackCategoriesIntoKey(fcInfinity, fcNormal):
   1528   case PackCategoriesIntoKey(fcZero, fcInfinity):
   1529   case PackCategoriesIntoKey(fcZero, fcNormal):
   1530     return opOK;
   1531 
   1532   case PackCategoriesIntoKey(fcNormal, fcInfinity):
   1533     category = fcZero;
   1534     return opOK;
   1535 
   1536   case PackCategoriesIntoKey(fcNormal, fcZero):
   1537     category = fcInfinity;
   1538     return opDivByZero;
   1539 
   1540   case PackCategoriesIntoKey(fcInfinity, fcInfinity):
   1541   case PackCategoriesIntoKey(fcZero, fcZero):
   1542     makeNaN();
   1543     return opInvalidOp;
   1544 
   1545   case PackCategoriesIntoKey(fcNormal, fcNormal):
   1546     return opOK;
   1547   }
   1548 }
   1549 
   1550 APFloat::opStatus
   1551 APFloat::modSpecials(const APFloat &rhs)
   1552 {
   1553   switch (PackCategoriesIntoKey(category, rhs.category)) {
   1554   default:
   1555     llvm_unreachable(0);
   1556 
   1557   case PackCategoriesIntoKey(fcNaN, fcZero):
   1558   case PackCategoriesIntoKey(fcNaN, fcNormal):
   1559   case PackCategoriesIntoKey(fcNaN, fcInfinity):
   1560   case PackCategoriesIntoKey(fcNaN, fcNaN):
   1561   case PackCategoriesIntoKey(fcZero, fcInfinity):
   1562   case PackCategoriesIntoKey(fcZero, fcNormal):
   1563   case PackCategoriesIntoKey(fcNormal, fcInfinity):
   1564     return opOK;
   1565 
   1566   case PackCategoriesIntoKey(fcZero, fcNaN):
   1567   case PackCategoriesIntoKey(fcNormal, fcNaN):
   1568   case PackCategoriesIntoKey(fcInfinity, fcNaN):
   1569     sign = false;
   1570     category = fcNaN;
   1571     copySignificand(rhs);
   1572     return opOK;
   1573 
   1574   case PackCategoriesIntoKey(fcNormal, fcZero):
   1575   case PackCategoriesIntoKey(fcInfinity, fcZero):
   1576   case PackCategoriesIntoKey(fcInfinity, fcNormal):
   1577   case PackCategoriesIntoKey(fcInfinity, fcInfinity):
   1578   case PackCategoriesIntoKey(fcZero, fcZero):
   1579     makeNaN();
   1580     return opInvalidOp;
   1581 
   1582   case PackCategoriesIntoKey(fcNormal, fcNormal):
   1583     return opOK;
   1584   }
   1585 }
   1586 
   1587 /* Change sign.  */
   1588 void
   1589 APFloat::changeSign()
   1590 {
   1591   /* Look mummy, this one's easy.  */
   1592   sign = !sign;
   1593 }
   1594 
   1595 void
   1596 APFloat::clearSign()
   1597 {
   1598   /* So is this one. */
   1599   sign = 0;
   1600 }
   1601 
   1602 void
   1603 APFloat::copySign(const APFloat &rhs)
   1604 {
   1605   /* And this one. */
   1606   sign = rhs.sign;
   1607 }
   1608 
   1609 /* Normalized addition or subtraction.  */
   1610 APFloat::opStatus
   1611 APFloat::addOrSubtract(const APFloat &rhs, roundingMode rounding_mode,
   1612                        bool subtract)
   1613 {
   1614   opStatus fs;
   1615 
   1616   fs = addOrSubtractSpecials(rhs, subtract);
   1617 
   1618   /* This return code means it was not a simple case.  */
   1619   if (fs == opDivByZero) {
   1620     lostFraction lost_fraction;
   1621 
   1622     lost_fraction = addOrSubtractSignificand(rhs, subtract);
   1623     fs = normalize(rounding_mode, lost_fraction);
   1624 
   1625     /* Can only be zero if we lost no fraction.  */
   1626     assert(category != fcZero || lost_fraction == lfExactlyZero);
   1627   }
   1628 
   1629   /* If two numbers add (exactly) to zero, IEEE 754 decrees it is a
   1630      positive zero unless rounding to minus infinity, except that
   1631      adding two like-signed zeroes gives that zero.  */
   1632   if (category == fcZero) {
   1633     if (rhs.category != fcZero || (sign == rhs.sign) == subtract)
   1634       sign = (rounding_mode == rmTowardNegative);
   1635   }
   1636 
   1637   return fs;
   1638 }
   1639 
   1640 /* Normalized addition.  */
   1641 APFloat::opStatus
   1642 APFloat::add(const APFloat &rhs, roundingMode rounding_mode)
   1643 {
   1644   return addOrSubtract(rhs, rounding_mode, false);
   1645 }
   1646 
   1647 /* Normalized subtraction.  */
   1648 APFloat::opStatus
   1649 APFloat::subtract(const APFloat &rhs, roundingMode rounding_mode)
   1650 {
   1651   return addOrSubtract(rhs, rounding_mode, true);
   1652 }
   1653 
   1654 /* Normalized multiply.  */
   1655 APFloat::opStatus
   1656 APFloat::multiply(const APFloat &rhs, roundingMode rounding_mode)
   1657 {
   1658   opStatus fs;
   1659 
   1660   sign ^= rhs.sign;
   1661   fs = multiplySpecials(rhs);
   1662 
   1663   if (isFiniteNonZero()) {
   1664     lostFraction lost_fraction = multiplySignificand(rhs, 0);
   1665     fs = normalize(rounding_mode, lost_fraction);
   1666     if (lost_fraction != lfExactlyZero)
   1667       fs = (opStatus) (fs | opInexact);
   1668   }
   1669 
   1670   return fs;
   1671 }
   1672 
   1673 /* Normalized divide.  */
   1674 APFloat::opStatus
   1675 APFloat::divide(const APFloat &rhs, roundingMode rounding_mode)
   1676 {
   1677   opStatus fs;
   1678 
   1679   sign ^= rhs.sign;
   1680   fs = divideSpecials(rhs);
   1681 
   1682   if (isFiniteNonZero()) {
   1683     lostFraction lost_fraction = divideSignificand(rhs);
   1684     fs = normalize(rounding_mode, lost_fraction);
   1685     if (lost_fraction != lfExactlyZero)
   1686       fs = (opStatus) (fs | opInexact);
   1687   }
   1688 
   1689   return fs;
   1690 }
   1691 
   1692 /* Normalized remainder.  This is not currently correct in all cases.  */
   1693 APFloat::opStatus
   1694 APFloat::remainder(const APFloat &rhs)
   1695 {
   1696   opStatus fs;
   1697   APFloat V = *this;
   1698   unsigned int origSign = sign;
   1699 
   1700   fs = V.divide(rhs, rmNearestTiesToEven);
   1701   if (fs == opDivByZero)
   1702     return fs;
   1703 
   1704   int parts = partCount();
   1705   integerPart *x = new integerPart[parts];
   1706   bool ignored;
   1707   fs = V.convertToInteger(x, parts * integerPartWidth, true,
   1708                           rmNearestTiesToEven, &ignored);
   1709   if (fs==opInvalidOp)
   1710     return fs;
   1711 
   1712   fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true,
   1713                                         rmNearestTiesToEven);
   1714   assert(fs==opOK);   // should always work
   1715 
   1716   fs = V.multiply(rhs, rmNearestTiesToEven);
   1717   assert(fs==opOK || fs==opInexact);   // should not overflow or underflow
   1718 
   1719   fs = subtract(V, rmNearestTiesToEven);
   1720   assert(fs==opOK || fs==opInexact);   // likewise
   1721 
   1722   if (isZero())
   1723     sign = origSign;    // IEEE754 requires this
   1724   delete[] x;
   1725   return fs;
   1726 }
   1727 
   1728 /* Normalized llvm frem (C fmod).
   1729    This is not currently correct in all cases.  */
   1730 APFloat::opStatus
   1731 APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
   1732 {
   1733   opStatus fs;
   1734   fs = modSpecials(rhs);
   1735 
   1736   if (isFiniteNonZero() && rhs.isFiniteNonZero()) {
   1737     APFloat V = *this;
   1738     unsigned int origSign = sign;
   1739 
   1740     fs = V.divide(rhs, rmNearestTiesToEven);
   1741     if (fs == opDivByZero)
   1742       return fs;
   1743 
   1744     int parts = partCount();
   1745     integerPart *x = new integerPart[parts];
   1746     bool ignored;
   1747     fs = V.convertToInteger(x, parts * integerPartWidth, true,
   1748                             rmTowardZero, &ignored);
   1749     if (fs==opInvalidOp)
   1750       return fs;
   1751 
   1752     fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true,
   1753                                           rmNearestTiesToEven);
   1754     assert(fs==opOK);   // should always work
   1755 
   1756     fs = V.multiply(rhs, rounding_mode);
   1757     assert(fs==opOK || fs==opInexact);   // should not overflow or underflow
   1758 
   1759     fs = subtract(V, rounding_mode);
   1760     assert(fs==opOK || fs==opInexact);   // likewise
   1761 
   1762     if (isZero())
   1763       sign = origSign;    // IEEE754 requires this
   1764     delete[] x;
   1765   }
   1766   return fs;
   1767 }
   1768 
   1769 /* Normalized fused-multiply-add.  */
   1770 APFloat::opStatus
   1771 APFloat::fusedMultiplyAdd(const APFloat &multiplicand,
   1772                           const APFloat &addend,
   1773                           roundingMode rounding_mode)
   1774 {
   1775   opStatus fs;
   1776 
   1777   /* Post-multiplication sign, before addition.  */
   1778   sign ^= multiplicand.sign;
   1779 
   1780   /* If and only if all arguments are normal do we need to do an
   1781      extended-precision calculation.  */
   1782   if (isFiniteNonZero() &&
   1783       multiplicand.isFiniteNonZero() &&
   1784       addend.isFiniteNonZero()) {
   1785     lostFraction lost_fraction;
   1786 
   1787     lost_fraction = multiplySignificand(multiplicand, &addend);
   1788     fs = normalize(rounding_mode, lost_fraction);
   1789     if (lost_fraction != lfExactlyZero)
   1790       fs = (opStatus) (fs | opInexact);
   1791 
   1792     /* If two numbers add (exactly) to zero, IEEE 754 decrees it is a
   1793        positive zero unless rounding to minus infinity, except that
   1794        adding two like-signed zeroes gives that zero.  */
   1795     if (category == fcZero && sign != addend.sign)
   1796       sign = (rounding_mode == rmTowardNegative);
   1797   } else {
   1798     fs = multiplySpecials(multiplicand);
   1799 
   1800     /* FS can only be opOK or opInvalidOp.  There is no more work
   1801        to do in the latter case.  The IEEE-754R standard says it is
   1802        implementation-defined in this case whether, if ADDEND is a
   1803        quiet NaN, we raise invalid op; this implementation does so.
   1804 
   1805        If we need to do the addition we can do so with normal
   1806        precision.  */
   1807     if (fs == opOK)
   1808       fs = addOrSubtract(addend, rounding_mode, false);
   1809   }
   1810 
   1811   return fs;
   1812 }
   1813 
   1814 /* Rounding-mode corrrect round to integral value.  */
   1815 APFloat::opStatus APFloat::roundToIntegral(roundingMode rounding_mode) {
   1816   opStatus fs;
   1817 
   1818   // If the exponent is large enough, we know that this value is already
   1819   // integral, and the arithmetic below would potentially cause it to saturate
   1820   // to +/-Inf.  Bail out early instead.
   1821   if (isFiniteNonZero() && exponent+1 >= (int)semanticsPrecision(*semantics))
   1822     return opOK;
   1823 
   1824   // The algorithm here is quite simple: we add 2^(p-1), where p is the
   1825   // precision of our format, and then subtract it back off again.  The choice
   1826   // of rounding modes for the addition/subtraction determines the rounding mode
   1827   // for our integral rounding as well.
   1828   // NOTE: When the input value is negative, we do subtraction followed by
   1829   // addition instead.
   1830   APInt IntegerConstant(NextPowerOf2(semanticsPrecision(*semantics)), 1);
   1831   IntegerConstant <<= semanticsPrecision(*semantics)-1;
   1832   APFloat MagicConstant(*semantics);
   1833   fs = MagicConstant.convertFromAPInt(IntegerConstant, false,
   1834                                       rmNearestTiesToEven);
   1835   MagicConstant.copySign(*this);
   1836 
   1837   if (fs != opOK)
   1838     return fs;
   1839 
   1840   // Preserve the input sign so that we can handle 0.0/-0.0 cases correctly.
   1841   bool inputSign = isNegative();
   1842 
   1843   fs = add(MagicConstant, rounding_mode);
   1844   if (fs != opOK && fs != opInexact)
   1845     return fs;
   1846 
   1847   fs = subtract(MagicConstant, rounding_mode);
   1848 
   1849   // Restore the input sign.
   1850   if (inputSign != isNegative())
   1851     changeSign();
   1852 
   1853   return fs;
   1854 }
   1855 
   1856 
   1857 /* Comparison requires normalized numbers.  */
   1858 APFloat::cmpResult
   1859 APFloat::compare(const APFloat &rhs) const
   1860 {
   1861   cmpResult result;
   1862 
   1863   assert(semantics == rhs.semantics);
   1864 
   1865   switch (PackCategoriesIntoKey(category, rhs.category)) {
   1866   default:
   1867     llvm_unreachable(0);
   1868 
   1869   case PackCategoriesIntoKey(fcNaN, fcZero):
   1870   case PackCategoriesIntoKey(fcNaN, fcNormal):
   1871   case PackCategoriesIntoKey(fcNaN, fcInfinity):
   1872   case PackCategoriesIntoKey(fcNaN, fcNaN):
   1873   case PackCategoriesIntoKey(fcZero, fcNaN):
   1874   case PackCategoriesIntoKey(fcNormal, fcNaN):
   1875   case PackCategoriesIntoKey(fcInfinity, fcNaN):
   1876     return cmpUnordered;
   1877 
   1878   case PackCategoriesIntoKey(fcInfinity, fcNormal):
   1879   case PackCategoriesIntoKey(fcInfinity, fcZero):
   1880   case PackCategoriesIntoKey(fcNormal, fcZero):
   1881     if (sign)
   1882       return cmpLessThan;
   1883     else
   1884       return cmpGreaterThan;
   1885 
   1886   case PackCategoriesIntoKey(fcNormal, fcInfinity):
   1887   case PackCategoriesIntoKey(fcZero, fcInfinity):
   1888   case PackCategoriesIntoKey(fcZero, fcNormal):
   1889     if (rhs.sign)
   1890       return cmpGreaterThan;
   1891     else
   1892       return cmpLessThan;
   1893 
   1894   case PackCategoriesIntoKey(fcInfinity, fcInfinity):
   1895     if (sign == rhs.sign)
   1896       return cmpEqual;
   1897     else if (sign)
   1898       return cmpLessThan;
   1899     else
   1900       return cmpGreaterThan;
   1901 
   1902   case PackCategoriesIntoKey(fcZero, fcZero):
   1903     return cmpEqual;
   1904 
   1905   case PackCategoriesIntoKey(fcNormal, fcNormal):
   1906     break;
   1907   }
   1908 
   1909   /* Two normal numbers.  Do they have the same sign?  */
   1910   if (sign != rhs.sign) {
   1911     if (sign)
   1912       result = cmpLessThan;
   1913     else
   1914       result = cmpGreaterThan;
   1915   } else {
   1916     /* Compare absolute values; invert result if negative.  */
   1917     result = compareAbsoluteValue(rhs);
   1918 
   1919     if (sign) {
   1920       if (result == cmpLessThan)
   1921         result = cmpGreaterThan;
   1922       else if (result == cmpGreaterThan)
   1923         result = cmpLessThan;
   1924     }
   1925   }
   1926 
   1927   return result;
   1928 }
   1929 
   1930 /// APFloat::convert - convert a value of one floating point type to another.
   1931 /// The return value corresponds to the IEEE754 exceptions.  *losesInfo
   1932 /// records whether the transformation lost information, i.e. whether
   1933 /// converting the result back to the original type will produce the
   1934 /// original value (this is almost the same as return value==fsOK, but there
   1935 /// are edge cases where this is not so).
   1936 
   1937 APFloat::opStatus
   1938 APFloat::convert(const fltSemantics &toSemantics,
   1939                  roundingMode rounding_mode, bool *losesInfo)
   1940 {
   1941   lostFraction lostFraction;
   1942   unsigned int newPartCount, oldPartCount;
   1943   opStatus fs;
   1944   int shift;
   1945   const fltSemantics &fromSemantics = *semantics;
   1946 
   1947   lostFraction = lfExactlyZero;
   1948   newPartCount = partCountForBits(toSemantics.precision + 1);
   1949   oldPartCount = partCount();
   1950   shift = toSemantics.precision - fromSemantics.precision;
   1951 
   1952   bool X86SpecialNan = false;
   1953   if (&fromSemantics == &APFloat::x87DoubleExtended &&
   1954       &toSemantics != &APFloat::x87DoubleExtended && category == fcNaN &&
   1955       (!(*significandParts() & 0x8000000000000000ULL) ||
   1956        !(*significandParts() & 0x4000000000000000ULL))) {
   1957     // x86 has some unusual NaNs which cannot be represented in any other
   1958     // format; note them here.
   1959     X86SpecialNan = true;
   1960   }
   1961 
   1962   // If this is a truncation of a denormal number, and the target semantics
   1963   // has larger exponent range than the source semantics (this can happen
   1964   // when truncating from PowerPC double-double to double format), the
   1965   // right shift could lose result mantissa bits.  Adjust exponent instead
   1966   // of performing excessive shift.
   1967   if (shift < 0 && isFiniteNonZero()) {
   1968     int exponentChange = significandMSB() + 1 - fromSemantics.precision;
   1969     if (exponent + exponentChange < toSemantics.minExponent)
   1970       exponentChange = toSemantics.minExponent - exponent;
   1971     if (exponentChange < shift)
   1972       exponentChange = shift;
   1973     if (exponentChange < 0) {
   1974       shift -= exponentChange;
   1975       exponent += exponentChange;
   1976     }
   1977   }
   1978 
   1979   // If this is a truncation, perform the shift before we narrow the storage.
   1980   if (shift < 0 && (isFiniteNonZero() || category==fcNaN))
   1981     lostFraction = shiftRight(significandParts(), oldPartCount, -shift);
   1982 
   1983   // Fix the storage so it can hold to new value.
   1984   if (newPartCount > oldPartCount) {
   1985     // The new type requires more storage; make it available.
   1986     integerPart *newParts;
   1987     newParts = new integerPart[newPartCount];
   1988     APInt::tcSet(newParts, 0, newPartCount);
   1989     if (isFiniteNonZero() || category==fcNaN)
   1990       APInt::tcAssign(newParts, significandParts(), oldPartCount);
   1991     freeSignificand();
   1992     significand.parts = newParts;
   1993   } else if (newPartCount == 1 && oldPartCount != 1) {
   1994     // Switch to built-in storage for a single part.
   1995     integerPart newPart = 0;
   1996     if (isFiniteNonZero() || category==fcNaN)
   1997       newPart = significandParts()[0];
   1998     freeSignificand();
   1999     significand.part = newPart;
   2000   }
   2001 
   2002   // Now that we have the right storage, switch the semantics.
   2003   semantics = &toSemantics;
   2004 
   2005   // If this is an extension, perform the shift now that the storage is
   2006   // available.
   2007   if (shift > 0 && (isFiniteNonZero() || category==fcNaN))
   2008     APInt::tcShiftLeft(significandParts(), newPartCount, shift);
   2009 
   2010   if (isFiniteNonZero()) {
   2011     fs = normalize(rounding_mode, lostFraction);
   2012     *losesInfo = (fs != opOK);
   2013   } else if (category == fcNaN) {
   2014     *losesInfo = lostFraction != lfExactlyZero || X86SpecialNan;
   2015 
   2016     // For x87 extended precision, we want to make a NaN, not a special NaN if
   2017     // the input wasn't special either.
   2018     if (!X86SpecialNan && semantics == &APFloat::x87DoubleExtended)
   2019       APInt::tcSetBit(significandParts(), semantics->precision - 1);
   2020 
   2021     // gcc forces the Quiet bit on, which means (float)(double)(float_sNan)
   2022     // does not give you back the same bits.  This is dubious, and we
   2023     // don't currently do it.  You're really supposed to get
   2024     // an invalid operation signal at runtime, but nobody does that.
   2025     fs = opOK;
   2026   } else {
   2027     *losesInfo = false;
   2028     fs = opOK;
   2029   }
   2030 
   2031   return fs;
   2032 }
   2033 
   2034 /* Convert a floating point number to an integer according to the
   2035    rounding mode.  If the rounded integer value is out of range this
   2036    returns an invalid operation exception and the contents of the
   2037    destination parts are unspecified.  If the rounded value is in
   2038    range but the floating point number is not the exact integer, the C
   2039    standard doesn't require an inexact exception to be raised.  IEEE
   2040    854 does require it so we do that.
   2041 
   2042    Note that for conversions to integer type the C standard requires
   2043    round-to-zero to always be used.  */
   2044 APFloat::opStatus
   2045 APFloat::convertToSignExtendedInteger(integerPart *parts, unsigned int width,
   2046                                       bool isSigned,
   2047                                       roundingMode rounding_mode,
   2048                                       bool *isExact) const
   2049 {
   2050   lostFraction lost_fraction;
   2051   const integerPart *src;
   2052   unsigned int dstPartsCount, truncatedBits;
   2053 
   2054   *isExact = false;
   2055 
   2056   /* Handle the three special cases first.  */
   2057   if (category == fcInfinity || category == fcNaN)
   2058     return opInvalidOp;
   2059 
   2060   dstPartsCount = partCountForBits(width);
   2061 
   2062   if (category == fcZero) {
   2063     APInt::tcSet(parts, 0, dstPartsCount);
   2064     // Negative zero can't be represented as an int.
   2065     *isExact = !sign;
   2066     return opOK;
   2067   }
   2068 
   2069   src = significandParts();
   2070 
   2071   /* Step 1: place our absolute value, with any fraction truncated, in
   2072      the destination.  */
   2073   if (exponent < 0) {
   2074     /* Our absolute value is less than one; truncate everything.  */
   2075     APInt::tcSet(parts, 0, dstPartsCount);
   2076     /* For exponent -1 the integer bit represents .5, look at that.
   2077        For smaller exponents leftmost truncated bit is 0. */
   2078     truncatedBits = semantics->precision -1U - exponent;
   2079   } else {
   2080     /* We want the most significant (exponent + 1) bits; the rest are
   2081        truncated.  */
   2082     unsigned int bits = exponent + 1U;
   2083 
   2084     /* Hopelessly large in magnitude?  */
   2085     if (bits > width)
   2086       return opInvalidOp;
   2087 
   2088     if (bits < semantics->precision) {
   2089       /* We truncate (semantics->precision - bits) bits.  */
   2090       truncatedBits = semantics->precision - bits;
   2091       APInt::tcExtract(parts, dstPartsCount, src, bits, truncatedBits);
   2092     } else {
   2093       /* We want at least as many bits as are available.  */
   2094       APInt::tcExtract(parts, dstPartsCount, src, semantics->precision, 0);
   2095       APInt::tcShiftLeft(parts, dstPartsCount, bits - semantics->precision);
   2096       truncatedBits = 0;
   2097     }
   2098   }
   2099 
   2100   /* Step 2: work out any lost fraction, and increment the absolute
   2101      value if we would round away from zero.  */
   2102   if (truncatedBits) {
   2103     lost_fraction = lostFractionThroughTruncation(src, partCount(),
   2104                                                   truncatedBits);
   2105     if (lost_fraction != lfExactlyZero &&
   2106         roundAwayFromZero(rounding_mode, lost_fraction, truncatedBits)) {
   2107       if (APInt::tcIncrement(parts, dstPartsCount))
   2108         return opInvalidOp;     /* Overflow.  */
   2109     }
   2110   } else {
   2111     lost_fraction = lfExactlyZero;
   2112   }
   2113 
   2114   /* Step 3: check if we fit in the destination.  */
   2115   unsigned int omsb = APInt::tcMSB(parts, dstPartsCount) + 1;
   2116 
   2117   if (sign) {
   2118     if (!isSigned) {
   2119       /* Negative numbers cannot be represented as unsigned.  */
   2120       if (omsb != 0)
   2121         return opInvalidOp;
   2122     } else {
   2123       /* It takes omsb bits to represent the unsigned integer value.
   2124          We lose a bit for the sign, but care is needed as the
   2125          maximally negative integer is a special case.  */
   2126       if (omsb == width && APInt::tcLSB(parts, dstPartsCount) + 1 != omsb)
   2127         return opInvalidOp;
   2128 
   2129       /* This case can happen because of rounding.  */
   2130       if (omsb > width)
   2131         return opInvalidOp;
   2132     }
   2133 
   2134     APInt::tcNegate (parts, dstPartsCount);
   2135   } else {
   2136     if (omsb >= width + !isSigned)
   2137       return opInvalidOp;
   2138   }
   2139 
   2140   if (lost_fraction == lfExactlyZero) {
   2141     *isExact = true;
   2142     return opOK;
   2143   } else
   2144     return opInexact;
   2145 }
   2146 
   2147 /* Same as convertToSignExtendedInteger, except we provide
   2148    deterministic values in case of an invalid operation exception,
   2149    namely zero for NaNs and the minimal or maximal value respectively
   2150    for underflow or overflow.
   2151    The *isExact output tells whether the result is exact, in the sense
   2152    that converting it back to the original floating point type produces
   2153    the original value.  This is almost equivalent to result==opOK,
   2154    except for negative zeroes.
   2155 */
   2156 APFloat::opStatus
   2157 APFloat::convertToInteger(integerPart *parts, unsigned int width,
   2158                           bool isSigned,
   2159                           roundingMode rounding_mode, bool *isExact) const
   2160 {
   2161   opStatus fs;
   2162 
   2163   fs = convertToSignExtendedInteger(parts, width, isSigned, rounding_mode,
   2164                                     isExact);
   2165 
   2166   if (fs == opInvalidOp) {
   2167     unsigned int bits, dstPartsCount;
   2168 
   2169     dstPartsCount = partCountForBits(width);
   2170 
   2171     if (category == fcNaN)
   2172       bits = 0;
   2173     else if (sign)
   2174       bits = isSigned;
   2175     else
   2176       bits = width - isSigned;
   2177 
   2178     APInt::tcSetLeastSignificantBits(parts, dstPartsCount, bits);
   2179     if (sign && isSigned)
   2180       APInt::tcShiftLeft(parts, dstPartsCount, width - 1);
   2181   }
   2182 
   2183   return fs;
   2184 }
   2185 
   2186 /* Same as convertToInteger(integerPart*, ...), except the result is returned in
   2187    an APSInt, whose initial bit-width and signed-ness are used to determine the
   2188    precision of the conversion.
   2189  */
   2190 APFloat::opStatus
   2191 APFloat::convertToInteger(APSInt &result,
   2192                           roundingMode rounding_mode, bool *isExact) const
   2193 {
   2194   unsigned bitWidth = result.getBitWidth();
   2195   SmallVector<uint64_t, 4> parts(result.getNumWords());
   2196   opStatus status = convertToInteger(
   2197     parts.data(), bitWidth, result.isSigned(), rounding_mode, isExact);
   2198   // Keeps the original signed-ness.
   2199   result = APInt(bitWidth, parts);
   2200   return status;
   2201 }
   2202 
   2203 /* Convert an unsigned integer SRC to a floating point number,
   2204    rounding according to ROUNDING_MODE.  The sign of the floating
   2205    point number is not modified.  */
   2206 APFloat::opStatus
   2207 APFloat::convertFromUnsignedParts(const integerPart *src,
   2208                                   unsigned int srcCount,
   2209                                   roundingMode rounding_mode)
   2210 {
   2211   unsigned int omsb, precision, dstCount;
   2212   integerPart *dst;
   2213   lostFraction lost_fraction;
   2214 
   2215   category = fcNormal;
   2216   omsb = APInt::tcMSB(src, srcCount) + 1;
   2217   dst = significandParts();
   2218   dstCount = partCount();
   2219   precision = semantics->precision;
   2220 
   2221   /* We want the most significant PRECISION bits of SRC.  There may not
   2222      be that many; extract what we can.  */
   2223   if (precision <= omsb) {
   2224     exponent = omsb - 1;
   2225     lost_fraction = lostFractionThroughTruncation(src, srcCount,
   2226                                                   omsb - precision);
   2227     APInt::tcExtract(dst, dstCount, src, precision, omsb - precision);
   2228   } else {
   2229     exponent = precision - 1;
   2230     lost_fraction = lfExactlyZero;
   2231     APInt::tcExtract(dst, dstCount, src, omsb, 0);
   2232   }
   2233 
   2234   return normalize(rounding_mode, lost_fraction);
   2235 }
   2236 
   2237 APFloat::opStatus
   2238 APFloat::convertFromAPInt(const APInt &Val,
   2239                           bool isSigned,
   2240                           roundingMode rounding_mode)
   2241 {
   2242   unsigned int partCount = Val.getNumWords();
   2243   APInt api = Val;
   2244 
   2245   sign = false;
   2246   if (isSigned && api.isNegative()) {
   2247     sign = true;
   2248     api = -api;
   2249   }
   2250 
   2251   return convertFromUnsignedParts(api.getRawData(), partCount, rounding_mode);
   2252 }
   2253 
   2254 /* Convert a two's complement integer SRC to a floating point number,
   2255    rounding according to ROUNDING_MODE.  ISSIGNED is true if the
   2256    integer is signed, in which case it must be sign-extended.  */
   2257 APFloat::opStatus
   2258 APFloat::convertFromSignExtendedInteger(const integerPart *src,
   2259                                         unsigned int srcCount,
   2260                                         bool isSigned,
   2261                                         roundingMode rounding_mode)
   2262 {
   2263   opStatus status;
   2264 
   2265   if (isSigned &&
   2266       APInt::tcExtractBit(src, srcCount * integerPartWidth - 1)) {
   2267     integerPart *copy;
   2268 
   2269     /* If we're signed and negative negate a copy.  */
   2270     sign = true;
   2271     copy = new integerPart[srcCount];
   2272     APInt::tcAssign(copy, src, srcCount);
   2273     APInt::tcNegate(copy, srcCount);
   2274     status = convertFromUnsignedParts(copy, srcCount, rounding_mode);
   2275     delete [] copy;
   2276   } else {
   2277     sign = false;
   2278     status = convertFromUnsignedParts(src, srcCount, rounding_mode);
   2279   }
   2280 
   2281   return status;
   2282 }
   2283 
   2284 /* FIXME: should this just take a const APInt reference?  */
   2285 APFloat::opStatus
   2286 APFloat::convertFromZeroExtendedInteger(const integerPart *parts,
   2287                                         unsigned int width, bool isSigned,
   2288                                         roundingMode rounding_mode)
   2289 {
   2290   unsigned int partCount = partCountForBits(width);
   2291   APInt api = APInt(width, makeArrayRef(parts, partCount));
   2292 
   2293   sign = false;
   2294   if (isSigned && APInt::tcExtractBit(parts, width - 1)) {
   2295     sign = true;
   2296     api = -api;
   2297   }
   2298 
   2299   return convertFromUnsignedParts(api.getRawData(), partCount, rounding_mode);
   2300 }
   2301 
   2302 APFloat::opStatus
   2303 APFloat::convertFromHexadecimalString(StringRef s, roundingMode rounding_mode)
   2304 {
   2305   lostFraction lost_fraction = lfExactlyZero;
   2306 
   2307   category = fcNormal;
   2308   zeroSignificand();
   2309   exponent = 0;
   2310 
   2311   integerPart *significand = significandParts();
   2312   unsigned partsCount = partCount();
   2313   unsigned bitPos = partsCount * integerPartWidth;
   2314   bool computedTrailingFraction = false;
   2315 
   2316   // Skip leading zeroes and any (hexa)decimal point.
   2317   StringRef::iterator begin = s.begin();
   2318   StringRef::iterator end = s.end();
   2319   StringRef::iterator dot;
   2320   StringRef::iterator p = skipLeadingZeroesAndAnyDot(begin, end, &dot);
   2321   StringRef::iterator firstSignificantDigit = p;
   2322 
   2323   while (p != end) {
   2324     integerPart hex_value;
   2325 
   2326     if (*p == '.') {
   2327       assert(dot == end && "String contains multiple dots");
   2328       dot = p++;
   2329       continue;
   2330     }
   2331 
   2332     hex_value = hexDigitValue(*p);
   2333     if (hex_value == -1U)
   2334       break;
   2335 
   2336     p++;
   2337 
   2338     // Store the number while we have space.
   2339     if (bitPos) {
   2340       bitPos -= 4;
   2341       hex_value <<= bitPos % integerPartWidth;
   2342       significand[bitPos / integerPartWidth] |= hex_value;
   2343     } else if (!computedTrailingFraction) {
   2344       lost_fraction = trailingHexadecimalFraction(p, end, hex_value);
   2345       computedTrailingFraction = true;
   2346     }
   2347   }
   2348 
   2349   /* Hex floats require an exponent but not a hexadecimal point.  */
   2350   assert(p != end && "Hex strings require an exponent");
   2351   assert((*p == 'p' || *p == 'P') && "Invalid character in significand");
   2352   assert(p != begin && "Significand has no digits");
   2353   assert((dot == end || p - begin != 1) && "Significand has no digits");
   2354 
   2355   /* Ignore the exponent if we are zero.  */
   2356   if (p != firstSignificantDigit) {
   2357     int expAdjustment;
   2358 
   2359     /* Implicit hexadecimal point?  */
   2360     if (dot == end)
   2361       dot = p;
   2362 
   2363     /* Calculate the exponent adjustment implicit in the number of
   2364        significant digits.  */
   2365     expAdjustment = static_cast<int>(dot - firstSignificantDigit);
   2366     if (expAdjustment < 0)
   2367       expAdjustment++;
   2368     expAdjustment = expAdjustment * 4 - 1;
   2369 
   2370     /* Adjust for writing the significand starting at the most
   2371        significant nibble.  */
   2372     expAdjustment += semantics->precision;
   2373     expAdjustment -= partsCount * integerPartWidth;
   2374 
   2375     /* Adjust for the given exponent.  */
   2376     exponent = totalExponent(p + 1, end, expAdjustment);
   2377   }
   2378 
   2379   return normalize(rounding_mode, lost_fraction);
   2380 }
   2381 
   2382 APFloat::opStatus
   2383 APFloat::roundSignificandWithExponent(const integerPart *decSigParts,
   2384                                       unsigned sigPartCount, int exp,
   2385                                       roundingMode rounding_mode)
   2386 {
   2387   unsigned int parts, pow5PartCount;
   2388   fltSemantics calcSemantics = { 32767, -32767, 0 };
   2389   integerPart pow5Parts[maxPowerOfFiveParts];
   2390   bool isNearest;
   2391 
   2392   isNearest = (rounding_mode == rmNearestTiesToEven ||
   2393                rounding_mode == rmNearestTiesToAway);
   2394 
   2395   parts = partCountForBits(semantics->precision + 11);
   2396 
   2397   /* Calculate pow(5, abs(exp)).  */
   2398   pow5PartCount = powerOf5(pow5Parts, exp >= 0 ? exp: -exp);
   2399 
   2400   for (;; parts *= 2) {
   2401     opStatus sigStatus, powStatus;
   2402     unsigned int excessPrecision, truncatedBits;
   2403 
   2404     calcSemantics.precision = parts * integerPartWidth - 1;
   2405     excessPrecision = calcSemantics.precision - semantics->precision;
   2406     truncatedBits = excessPrecision;
   2407 
   2408     APFloat decSig = APFloat::getZero(calcSemantics, sign);
   2409     APFloat pow5(calcSemantics);
   2410 
   2411     sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount,
   2412                                                 rmNearestTiesToEven);
   2413     powStatus = pow5.convertFromUnsignedParts(pow5Parts, pow5PartCount,
   2414                                               rmNearestTiesToEven);
   2415     /* Add exp, as 10^n = 5^n * 2^n.  */
   2416     decSig.exponent += exp;
   2417 
   2418     lostFraction calcLostFraction;
   2419     integerPart HUerr, HUdistance;
   2420     unsigned int powHUerr;
   2421 
   2422     if (exp >= 0) {
   2423       /* multiplySignificand leaves the precision-th bit set to 1.  */
   2424       calcLostFraction = decSig.multiplySignificand(pow5, NULL);
   2425       powHUerr = powStatus != opOK;
   2426     } else {
   2427       calcLostFraction = decSig.divideSignificand(pow5);
   2428       /* Denormal numbers have less precision.  */
   2429       if (decSig.exponent < semantics->minExponent) {
   2430         excessPrecision += (semantics->minExponent - decSig.exponent);
   2431         truncatedBits = excessPrecision;
   2432         if (excessPrecision > calcSemantics.precision)
   2433           excessPrecision = calcSemantics.precision;
   2434       }
   2435       /* Extra half-ulp lost in reciprocal of exponent.  */
   2436       powHUerr = (powStatus == opOK && calcLostFraction == lfExactlyZero) ? 0:2;
   2437     }
   2438 
   2439     /* Both multiplySignificand and divideSignificand return the
   2440        result with the integer bit set.  */
   2441     assert(APInt::tcExtractBit
   2442            (decSig.significandParts(), calcSemantics.precision - 1) == 1);
   2443 
   2444     HUerr = HUerrBound(calcLostFraction != lfExactlyZero, sigStatus != opOK,
   2445                        powHUerr);
   2446     HUdistance = 2 * ulpsFromBoundary(decSig.significandParts(),
   2447                                       excessPrecision, isNearest);
   2448 
   2449     /* Are we guaranteed to round correctly if we truncate?  */
   2450     if (HUdistance >= HUerr) {
   2451       APInt::tcExtract(significandParts(), partCount(), decSig.significandParts(),
   2452                        calcSemantics.precision - excessPrecision,
   2453                        excessPrecision);
   2454       /* Take the exponent of decSig.  If we tcExtract-ed less bits
   2455          above we must adjust our exponent to compensate for the
   2456          implicit right shift.  */
   2457       exponent = (decSig.exponent + semantics->precision
   2458                   - (calcSemantics.precision - excessPrecision));
   2459       calcLostFraction = lostFractionThroughTruncation(decSig.significandParts(),
   2460                                                        decSig.partCount(),
   2461                                                        truncatedBits);
   2462       return normalize(rounding_mode, calcLostFraction);
   2463     }
   2464   }
   2465 }
   2466 
   2467 APFloat::opStatus
   2468 APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
   2469 {
   2470   decimalInfo D;
   2471   opStatus fs;
   2472 
   2473   /* Scan the text.  */
   2474   StringRef::iterator p = str.begin();
   2475   interpretDecimal(p, str.end(), &D);
   2476 
   2477   /* Handle the quick cases.  First the case of no significant digits,
   2478      i.e. zero, and then exponents that are obviously too large or too
   2479      small.  Writing L for log 10 / log 2, a number d.ddddd*10^exp
   2480      definitely overflows if
   2481 
   2482            (exp - 1) * L >= maxExponent
   2483 
   2484      and definitely underflows to zero where
   2485 
   2486            (exp + 1) * L <= minExponent - precision
   2487 
   2488      With integer arithmetic the tightest bounds for L are
   2489 
   2490            93/28 < L < 196/59            [ numerator <= 256 ]
   2491            42039/12655 < L < 28738/8651  [ numerator <= 65536 ]
   2492   */
   2493 
   2494   // Test if we have a zero number allowing for strings with no null terminators
   2495   // and zero decimals with non-zero exponents.
   2496   //
   2497   // We computed firstSigDigit by ignoring all zeros and dots. Thus if
   2498   // D->firstSigDigit equals str.end(), every digit must be a zero and there can
   2499   // be at most one dot. On the other hand, if we have a zero with a non-zero
   2500   // exponent, then we know that D.firstSigDigit will be non-numeric.
   2501   if (D.firstSigDigit == str.end() || decDigitValue(*D.firstSigDigit) >= 10U) {
   2502     category = fcZero;
   2503     fs = opOK;
   2504 
   2505   /* Check whether the normalized exponent is high enough to overflow
   2506      max during the log-rebasing in the max-exponent check below. */
   2507   } else if (D.normalizedExponent - 1 > INT_MAX / 42039) {
   2508     fs = handleOverflow(rounding_mode);
   2509 
   2510   /* If it wasn't, then it also wasn't high enough to overflow max
   2511      during the log-rebasing in the min-exponent check.  Check that it
   2512      won't overflow min in either check, then perform the min-exponent
   2513      check. */
   2514   } else if (D.normalizedExponent - 1 < INT_MIN / 42039 ||
   2515              (D.normalizedExponent + 1) * 28738 <=
   2516                8651 * (semantics->minExponent - (int) semantics->precision)) {
   2517     /* Underflow to zero and round.  */
   2518     category = fcNormal;
   2519     zeroSignificand();
   2520     fs = normalize(rounding_mode, lfLessThanHalf);
   2521 
   2522   /* We can finally safely perform the max-exponent check. */
   2523   } else if ((D.normalizedExponent - 1) * 42039
   2524              >= 12655 * semantics->maxExponent) {
   2525     /* Overflow and round.  */
   2526     fs = handleOverflow(rounding_mode);
   2527   } else {
   2528     integerPart *decSignificand;
   2529     unsigned int partCount;
   2530 
   2531     /* A tight upper bound on number of bits required to hold an
   2532        N-digit decimal integer is N * 196 / 59.  Allocate enough space
   2533        to hold the full significand, and an extra part required by
   2534        tcMultiplyPart.  */
   2535     partCount = static_cast<unsigned int>(D.lastSigDigit - D.firstSigDigit) + 1;
   2536     partCount = partCountForBits(1 + 196 * partCount / 59);
   2537     decSignificand = new integerPart[partCount + 1];
   2538     partCount = 0;
   2539 
   2540     /* Convert to binary efficiently - we do almost all multiplication
   2541        in an integerPart.  When this would overflow do we do a single
   2542        bignum multiplication, and then revert again to multiplication
   2543        in an integerPart.  */
   2544     do {
   2545       integerPart decValue, val, multiplier;
   2546 
   2547       val = 0;
   2548       multiplier = 1;
   2549 
   2550       do {
   2551         if (*p == '.') {
   2552           p++;
   2553           if (p == str.end()) {
   2554             break;
   2555           }
   2556         }
   2557         decValue = decDigitValue(*p++);
   2558         assert(decValue < 10U && "Invalid character in significand");
   2559         multiplier *= 10;
   2560         val = val * 10 + decValue;
   2561         /* The maximum number that can be multiplied by ten with any
   2562            digit added without overflowing an integerPart.  */
   2563       } while (p <= D.lastSigDigit && multiplier <= (~ (integerPart) 0 - 9) / 10);
   2564 
   2565       /* Multiply out the current part.  */
   2566       APInt::tcMultiplyPart(decSignificand, decSignificand, multiplier, val,
   2567                             partCount, partCount + 1, false);
   2568 
   2569       /* If we used another part (likely but not guaranteed), increase
   2570          the count.  */
   2571       if (decSignificand[partCount])
   2572         partCount++;
   2573     } while (p <= D.lastSigDigit);
   2574 
   2575     category = fcNormal;
   2576     fs = roundSignificandWithExponent(decSignificand, partCount,
   2577                                       D.exponent, rounding_mode);
   2578 
   2579     delete [] decSignificand;
   2580   }
   2581 
   2582   return fs;
   2583 }
   2584 
   2585 bool
   2586 APFloat::convertFromStringSpecials(StringRef str) {
   2587   if (str.equals("inf") || str.equals("INFINITY")) {
   2588     makeInf(false);
   2589     return true;
   2590   }
   2591 
   2592   if (str.equals("-inf") || str.equals("-INFINITY")) {
   2593     makeInf(true);
   2594     return true;
   2595   }
   2596 
   2597   if (str.equals("nan") || str.equals("NaN")) {
   2598     makeNaN(false, false);
   2599     return true;
   2600   }
   2601 
   2602   if (str.equals("-nan") || str.equals("-NaN")) {
   2603     makeNaN(false, true);
   2604     return true;
   2605   }
   2606 
   2607   return false;
   2608 }
   2609 
   2610 APFloat::opStatus
   2611 APFloat::convertFromString(StringRef str, roundingMode rounding_mode)
   2612 {
   2613   assert(!str.empty() && "Invalid string length");
   2614 
   2615   // Handle special cases.
   2616   if (convertFromStringSpecials(str))
   2617     return opOK;
   2618 
   2619   /* Handle a leading minus sign.  */
   2620   StringRef::iterator p = str.begin();
   2621   size_t slen = str.size();
   2622   sign = *p == '-' ? 1 : 0;
   2623   if (*p == '-' || *p == '+') {
   2624     p++;
   2625     slen--;
   2626     assert(slen && "String has no digits");
   2627   }
   2628 
   2629   if (slen >= 2 && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
   2630     assert(slen - 2 && "Invalid string");
   2631     return convertFromHexadecimalString(StringRef(p + 2, slen - 2),
   2632                                         rounding_mode);
   2633   }
   2634 
   2635   return convertFromDecimalString(StringRef(p, slen), rounding_mode);
   2636 }
   2637 
   2638 /* Write out a hexadecimal representation of the floating point value
   2639    to DST, which must be of sufficient size, in the C99 form
   2640    [-]0xh.hhhhp[+-]d.  Return the number of characters written,
   2641    excluding the terminating NUL.
   2642 
   2643    If UPPERCASE, the output is in upper case, otherwise in lower case.
   2644 
   2645    HEXDIGITS digits appear altogether, rounding the value if
   2646    necessary.  If HEXDIGITS is 0, the minimal precision to display the
   2647    number precisely is used instead.  If nothing would appear after
   2648    the decimal point it is suppressed.
   2649 
   2650    The decimal exponent is always printed and has at least one digit.
   2651    Zero values display an exponent of zero.  Infinities and NaNs
   2652    appear as "infinity" or "nan" respectively.
   2653 
   2654    The above rules are as specified by C99.  There is ambiguity about
   2655    what the leading hexadecimal digit should be.  This implementation
   2656    uses whatever is necessary so that the exponent is displayed as
   2657    stored.  This implies the exponent will fall within the IEEE format
   2658    range, and the leading hexadecimal digit will be 0 (for denormals),
   2659    1 (normal numbers) or 2 (normal numbers rounded-away-from-zero with
   2660    any other digits zero).
   2661 */
   2662 unsigned int
   2663 APFloat::convertToHexString(char *dst, unsigned int hexDigits,
   2664                             bool upperCase, roundingMode rounding_mode) const
   2665 {
   2666   char *p;
   2667 
   2668   p = dst;
   2669   if (sign)
   2670     *dst++ = '-';
   2671 
   2672   switch (category) {
   2673   case fcInfinity:
   2674     memcpy (dst, upperCase ? infinityU: infinityL, sizeof infinityU - 1);
   2675     dst += sizeof infinityL - 1;
   2676     break;
   2677 
   2678   case fcNaN:
   2679     memcpy (dst, upperCase ? NaNU: NaNL, sizeof NaNU - 1);
   2680     dst += sizeof NaNU - 1;
   2681     break;
   2682 
   2683   case fcZero:
   2684     *dst++ = '0';
   2685     *dst++ = upperCase ? 'X': 'x';
   2686     *dst++ = '0';
   2687     if (hexDigits > 1) {
   2688       *dst++ = '.';
   2689       memset (dst, '0', hexDigits - 1);
   2690       dst += hexDigits - 1;
   2691     }
   2692     *dst++ = upperCase ? 'P': 'p';
   2693     *dst++ = '0';
   2694     break;
   2695 
   2696   case fcNormal:
   2697     dst = convertNormalToHexString (dst, hexDigits, upperCase, rounding_mode);
   2698     break;
   2699   }
   2700 
   2701   *dst = 0;
   2702 
   2703   return static_cast<unsigned int>(dst - p);
   2704 }
   2705 
   2706 /* Does the hard work of outputting the correctly rounded hexadecimal
   2707    form of a normal floating point number with the specified number of
   2708    hexadecimal digits.  If HEXDIGITS is zero the minimum number of
   2709    digits necessary to print the value precisely is output.  */
   2710 char *
   2711 APFloat::convertNormalToHexString(char *dst, unsigned int hexDigits,
   2712                                   bool upperCase,
   2713                                   roundingMode rounding_mode) const
   2714 {
   2715   unsigned int count, valueBits, shift, partsCount, outputDigits;
   2716   const char *hexDigitChars;
   2717   const integerPart *significand;
   2718   char *p;
   2719   bool roundUp;
   2720 
   2721   *dst++ = '0';
   2722   *dst++ = upperCase ? 'X': 'x';
   2723 
   2724   roundUp = false;
   2725   hexDigitChars = upperCase ? hexDigitsUpper: hexDigitsLower;
   2726 
   2727   significand = significandParts();
   2728   partsCount = partCount();
   2729 
   2730   /* +3 because the first digit only uses the single integer bit, so
   2731      we have 3 virtual zero most-significant-bits.  */
   2732   valueBits = semantics->precision + 3;
   2733   shift = integerPartWidth - valueBits % integerPartWidth;
   2734 
   2735   /* The natural number of digits required ignoring trailing
   2736      insignificant zeroes.  */
   2737   outputDigits = (valueBits - significandLSB () + 3) / 4;
   2738 
   2739   /* hexDigits of zero means use the required number for the
   2740      precision.  Otherwise, see if we are truncating.  If we are,
   2741      find out if we need to round away from zero.  */
   2742   if (hexDigits) {
   2743     if (hexDigits < outputDigits) {
   2744       /* We are dropping non-zero bits, so need to check how to round.
   2745          "bits" is the number of dropped bits.  */
   2746       unsigned int bits;
   2747       lostFraction fraction;
   2748 
   2749       bits = valueBits - hexDigits * 4;
   2750       fraction = lostFractionThroughTruncation (significand, partsCount, bits);
   2751       roundUp = roundAwayFromZero(rounding_mode, fraction, bits);
   2752     }
   2753     outputDigits = hexDigits;
   2754   }
   2755 
   2756   /* Write the digits consecutively, and start writing in the location
   2757      of the hexadecimal point.  We move the most significant digit
   2758      left and add the hexadecimal point later.  */
   2759   p = ++dst;
   2760 
   2761   count = (valueBits + integerPartWidth - 1) / integerPartWidth;
   2762 
   2763   while (outputDigits && count) {
   2764     integerPart part;
   2765 
   2766     /* Put the most significant integerPartWidth bits in "part".  */
   2767     if (--count == partsCount)
   2768       part = 0;  /* An imaginary higher zero part.  */
   2769     else
   2770       part = significand[count] << shift;
   2771 
   2772     if (count && shift)
   2773       part |= significand[count - 1] >> (integerPartWidth - shift);
   2774 
   2775     /* Convert as much of "part" to hexdigits as we can.  */
   2776     unsigned int curDigits = integerPartWidth / 4;
   2777 
   2778     if (curDigits > outputDigits)
   2779       curDigits = outputDigits;
   2780     dst += partAsHex (dst, part, curDigits, hexDigitChars);
   2781     outputDigits -= curDigits;
   2782   }
   2783 
   2784   if (roundUp) {
   2785     char *q = dst;
   2786 
   2787     /* Note that hexDigitChars has a trailing '0'.  */
   2788     do {
   2789       q--;
   2790       *q = hexDigitChars[hexDigitValue (*q) + 1];
   2791     } while (*q == '0');
   2792     assert(q >= p);
   2793   } else {
   2794     /* Add trailing zeroes.  */
   2795     memset (dst, '0', outputDigits);
   2796     dst += outputDigits;
   2797   }
   2798 
   2799   /* Move the most significant digit to before the point, and if there
   2800      is something after the decimal point add it.  This must come
   2801      after rounding above.  */
   2802   p[-1] = p[0];
   2803   if (dst -1 == p)
   2804     dst--;
   2805   else
   2806     p[0] = '.';
   2807 
   2808   /* Finally output the exponent.  */
   2809   *dst++ = upperCase ? 'P': 'p';
   2810 
   2811   return writeSignedDecimal (dst, exponent);
   2812 }
   2813 
   2814 hash_code llvm::hash_value(const APFloat &Arg) {
   2815   if (!Arg.isFiniteNonZero())
   2816     return hash_combine((uint8_t)Arg.category,
   2817                         // NaN has no sign, fix it at zero.
   2818                         Arg.isNaN() ? (uint8_t)0 : (uint8_t)Arg.sign,
   2819                         Arg.semantics->precision);
   2820 
   2821   // Normal floats need their exponent and significand hashed.
   2822   return hash_combine((uint8_t)Arg.category, (uint8_t)Arg.sign,
   2823                       Arg.semantics->precision, Arg.exponent,
   2824                       hash_combine_range(
   2825                         Arg.significandParts(),
   2826                         Arg.significandParts() + Arg.partCount()));
   2827 }
   2828 
   2829 // Conversion from APFloat to/from host float/double.  It may eventually be
   2830 // possible to eliminate these and have everybody deal with APFloats, but that
   2831 // will take a while.  This approach will not easily extend to long double.
   2832 // Current implementation requires integerPartWidth==64, which is correct at
   2833 // the moment but could be made more general.
   2834 
   2835 // Denormals have exponent minExponent in APFloat, but minExponent-1 in
   2836 // the actual IEEE respresentations.  We compensate for that here.
   2837 
   2838 APInt
   2839 APFloat::convertF80LongDoubleAPFloatToAPInt() const
   2840 {
   2841   assert(semantics == (const llvm::fltSemantics*)&x87DoubleExtended);
   2842   assert(partCount()==2);
   2843 
   2844   uint64_t myexponent, mysignificand;
   2845 
   2846   if (isFiniteNonZero()) {
   2847     myexponent = exponent+16383; //bias
   2848     mysignificand = significandParts()[0];
   2849     if (myexponent==1 && !(mysignificand & 0x8000000000000000ULL))
   2850       myexponent = 0;   // denormal
   2851   } else if (category==fcZero) {
   2852     myexponent = 0;
   2853     mysignificand = 0;
   2854   } else if (category==fcInfinity) {
   2855     myexponent = 0x7fff;
   2856     mysignificand = 0x8000000000000000ULL;
   2857   } else {
   2858     assert(category == fcNaN && "Unknown category");
   2859     myexponent = 0x7fff;
   2860     mysignificand = significandParts()[0];
   2861   }
   2862 
   2863   uint64_t words[2];
   2864   words[0] = mysignificand;
   2865   words[1] =  ((uint64_t)(sign & 1) << 15) |
   2866               (myexponent & 0x7fffLL);
   2867   return APInt(80, words);
   2868 }
   2869 
   2870 APInt
   2871 APFloat::convertPPCDoubleDoubleAPFloatToAPInt() const
   2872 {
   2873   assert(semantics == (const llvm::fltSemantics*)&PPCDoubleDouble);
   2874   assert(partCount()==2);
   2875 
   2876   uint64_t words[2];
   2877   opStatus fs;
   2878   bool losesInfo;
   2879 
   2880   // Convert number to double.  To avoid spurious underflows, we re-
   2881   // normalize against the "double" minExponent first, and only *then*
   2882   // truncate the mantissa.  The result of that second conversion
   2883   // may be inexact, but should never underflow.
   2884   // Declare fltSemantics before APFloat that uses it (and
   2885   // saves pointer to it) to ensure correct destruction order.
   2886   fltSemantics extendedSemantics = *semantics;
   2887   extendedSemantics.minExponent = IEEEdouble.minExponent;
   2888   APFloat extended(*this);
   2889   fs = extended.convert(extendedSemantics, rmNearestTiesToEven, &losesInfo);
   2890   assert(fs == opOK && !losesInfo);
   2891   (void)fs;
   2892 
   2893   APFloat u(extended);
   2894   fs = u.convert(IEEEdouble, rmNearestTiesToEven, &losesInfo);
   2895   assert(fs == opOK || fs == opInexact);
   2896   (void)fs;
   2897   words[0] = *u.convertDoubleAPFloatToAPInt().getRawData();
   2898 
   2899   // If conversion was exact or resulted in a special case, we're done;
   2900   // just set the second double to zero.  Otherwise, re-convert back to
   2901   // the extended format and compute the difference.  This now should
   2902   // convert exactly to double.
   2903   if (u.isFiniteNonZero() && losesInfo) {
   2904     fs = u.convert(extendedSemantics, rmNearestTiesToEven, &losesInfo);
   2905     assert(fs == opOK && !losesInfo);
   2906     (void)fs;
   2907 
   2908     APFloat v(extended);
   2909     v.subtract(u, rmNearestTiesToEven);
   2910     fs = v.convert(IEEEdouble, rmNearestTiesToEven, &losesInfo);
   2911     assert(fs == opOK && !losesInfo);
   2912     (void)fs;
   2913     words[1] = *v.convertDoubleAPFloatToAPInt().getRawData();
   2914   } else {
   2915     words[1] = 0;
   2916   }
   2917 
   2918   return APInt(128, words);
   2919 }
   2920 
   2921 APInt
   2922 APFloat::convertQuadrupleAPFloatToAPInt() const
   2923 {
   2924   assert(semantics == (const llvm::fltSemantics*)&IEEEquad);
   2925   assert(partCount()==2);
   2926 
   2927   uint64_t myexponent, mysignificand, mysignificand2;
   2928 
   2929   if (isFiniteNonZero()) {
   2930     myexponent = exponent+16383; //bias
   2931     mysignificand = significandParts()[0];
   2932     mysignificand2 = significandParts()[1];
   2933     if (myexponent==1 && !(mysignificand2 & 0x1000000000000LL))
   2934       myexponent = 0;   // denormal
   2935   } else if (category==fcZero) {
   2936     myexponent = 0;
   2937     mysignificand = mysignificand2 = 0;
   2938   } else if (category==fcInfinity) {
   2939     myexponent = 0x7fff;
   2940     mysignificand = mysignificand2 = 0;
   2941   } else {
   2942     assert(category == fcNaN && "Unknown category!");
   2943     myexponent = 0x7fff;
   2944     mysignificand = significandParts()[0];
   2945     mysignificand2 = significandParts()[1];
   2946   }
   2947 
   2948   uint64_t words[2];
   2949   words[0] = mysignificand;
   2950   words[1] = ((uint64_t)(sign & 1) << 63) |
   2951              ((myexponent & 0x7fff) << 48) |
   2952              (mysignificand2 & 0xffffffffffffLL);
   2953 
   2954   return APInt(128, words);
   2955 }
   2956 
   2957 APInt
   2958 APFloat::convertDoubleAPFloatToAPInt() const
   2959 {
   2960   assert(semantics == (const llvm::fltSemantics*)&IEEEdouble);
   2961   assert(partCount()==1);
   2962 
   2963   uint64_t myexponent, mysignificand;
   2964 
   2965   if (isFiniteNonZero()) {
   2966     myexponent = exponent+1023; //bias
   2967     mysignificand = *significandParts();
   2968     if (myexponent==1 && !(mysignificand & 0x10000000000000LL))
   2969       myexponent = 0;   // denormal
   2970   } else if (category==fcZero) {
   2971     myexponent = 0;
   2972     mysignificand = 0;
   2973   } else if (category==fcInfinity) {
   2974     myexponent = 0x7ff;
   2975     mysignificand = 0;
   2976   } else {
   2977     assert(category == fcNaN && "Unknown category!");
   2978     myexponent = 0x7ff;
   2979     mysignificand = *significandParts();
   2980   }
   2981 
   2982   return APInt(64, ((((uint64_t)(sign & 1) << 63) |
   2983                      ((myexponent & 0x7ff) <<  52) |
   2984                      (mysignificand & 0xfffffffffffffLL))));
   2985 }
   2986 
   2987 APInt
   2988 APFloat::convertFloatAPFloatToAPInt() const
   2989 {
   2990   assert(semantics == (const llvm::fltSemantics*)&IEEEsingle);
   2991   assert(partCount()==1);
   2992 
   2993   uint32_t myexponent, mysignificand;
   2994 
   2995   if (isFiniteNonZero()) {
   2996     myexponent = exponent+127; //bias
   2997     mysignificand = (uint32_t)*significandParts();
   2998     if (myexponent == 1 && !(mysignificand & 0x800000))
   2999       myexponent = 0;   // denormal
   3000   } else if (category==fcZero) {
   3001     myexponent = 0;
   3002     mysignificand = 0;
   3003   } else if (category==fcInfinity) {
   3004     myexponent = 0xff;
   3005     mysignificand = 0;
   3006   } else {
   3007     assert(category == fcNaN && "Unknown category!");
   3008     myexponent = 0xff;
   3009     mysignificand = (uint32_t)*significandParts();
   3010   }
   3011 
   3012   return APInt(32, (((sign&1) << 31) | ((myexponent&0xff) << 23) |
   3013                     (mysignificand & 0x7fffff)));
   3014 }
   3015 
   3016 APInt
   3017 APFloat::convertHalfAPFloatToAPInt() const
   3018 {
   3019   assert(semantics == (const llvm::fltSemantics*)&IEEEhalf);
   3020   assert(partCount()==1);
   3021 
   3022   uint32_t myexponent, mysignificand;
   3023 
   3024   if (isFiniteNonZero()) {
   3025     myexponent = exponent+15; //bias
   3026     mysignificand = (uint32_t)*significandParts();
   3027     if (myexponent == 1 && !(mysignificand & 0x400))
   3028       myexponent = 0;   // denormal
   3029   } else if (category==fcZero) {
   3030     myexponent = 0;
   3031     mysignificand = 0;
   3032   } else if (category==fcInfinity) {
   3033     myexponent = 0x1f;
   3034     mysignificand = 0;
   3035   } else {
   3036     assert(category == fcNaN && "Unknown category!");
   3037     myexponent = 0x1f;
   3038     mysignificand = (uint32_t)*significandParts();
   3039   }
   3040 
   3041   return APInt(16, (((sign&1) << 15) | ((myexponent&0x1f) << 10) |
   3042                     (mysignificand & 0x3ff)));
   3043 }
   3044 
   3045 // This function creates an APInt that is just a bit map of the floating
   3046 // point constant as it would appear in memory.  It is not a conversion,
   3047 // and treating the result as a normal integer is unlikely to be useful.
   3048 
   3049 APInt
   3050 APFloat::bitcastToAPInt() const
   3051 {
   3052   if (semantics == (const llvm::fltSemantics*)&IEEEhalf)
   3053     return convertHalfAPFloatToAPInt();
   3054 
   3055   if (semantics == (const llvm::fltSemantics*)&IEEEsingle)
   3056     return convertFloatAPFloatToAPInt();
   3057 
   3058   if (semantics == (const llvm::fltSemantics*)&IEEEdouble)
   3059     return convertDoubleAPFloatToAPInt();
   3060 
   3061   if (semantics == (const llvm::fltSemantics*)&IEEEquad)
   3062     return convertQuadrupleAPFloatToAPInt();
   3063 
   3064   if (semantics == (const llvm::fltSemantics*)&PPCDoubleDouble)
   3065     return convertPPCDoubleDoubleAPFloatToAPInt();
   3066 
   3067   assert(semantics == (const llvm::fltSemantics*)&x87DoubleExtended &&
   3068          "unknown format!");
   3069   return convertF80LongDoubleAPFloatToAPInt();
   3070 }
   3071 
   3072 float
   3073 APFloat::convertToFloat() const
   3074 {
   3075   assert(semantics == (const llvm::fltSemantics*)&IEEEsingle &&
   3076          "Float semantics are not IEEEsingle");
   3077   APInt api = bitcastToAPInt();
   3078   return api.bitsToFloat();
   3079 }
   3080 
   3081 double
   3082 APFloat::convertToDouble() const
   3083 {
   3084   assert(semantics == (const llvm::fltSemantics*)&IEEEdouble &&
   3085          "Float semantics are not IEEEdouble");
   3086   APInt api = bitcastToAPInt();
   3087   return api.bitsToDouble();
   3088 }
   3089 
   3090 /// Integer bit is explicit in this format.  Intel hardware (387 and later)
   3091 /// does not support these bit patterns:
   3092 ///  exponent = all 1's, integer bit 0, significand 0 ("pseudoinfinity")
   3093 ///  exponent = all 1's, integer bit 0, significand nonzero ("pseudoNaN")
   3094 ///  exponent = 0, integer bit 1 ("pseudodenormal")
   3095 ///  exponent!=0 nor all 1's, integer bit 0 ("unnormal")
   3096 /// At the moment, the first two are treated as NaNs, the second two as Normal.
   3097 void
   3098 APFloat::initFromF80LongDoubleAPInt(const APInt &api)
   3099 {
   3100   assert(api.getBitWidth()==80);
   3101   uint64_t i1 = api.getRawData()[0];
   3102   uint64_t i2 = api.getRawData()[1];
   3103   uint64_t myexponent = (i2 & 0x7fff);
   3104   uint64_t mysignificand = i1;
   3105 
   3106   initialize(&APFloat::x87DoubleExtended);
   3107   assert(partCount()==2);
   3108 
   3109   sign = static_cast<unsigned int>(i2>>15);
   3110   if (myexponent==0 && mysignificand==0) {
   3111     // exponent, significand meaningless
   3112     category = fcZero;
   3113   } else if (myexponent==0x7fff && mysignificand==0x8000000000000000ULL) {
   3114     // exponent, significand meaningless
   3115     category = fcInfinity;
   3116   } else if (myexponent==0x7fff && mysignificand!=0x8000000000000000ULL) {
   3117     // exponent meaningless
   3118     category = fcNaN;
   3119     significandParts()[0] = mysignificand;
   3120     significandParts()[1] = 0;
   3121   } else {
   3122     category = fcNormal;
   3123     exponent = myexponent - 16383;
   3124     significandParts()[0] = mysignificand;
   3125     significandParts()[1] = 0;
   3126     if (myexponent==0)          // denormal
   3127       exponent = -16382;
   3128   }
   3129 }
   3130 
   3131 void
   3132 APFloat::initFromPPCDoubleDoubleAPInt(const APInt &api)
   3133 {
   3134   assert(api.getBitWidth()==128);
   3135   uint64_t i1 = api.getRawData()[0];
   3136   uint64_t i2 = api.getRawData()[1];
   3137   opStatus fs;
   3138   bool losesInfo;
   3139 
   3140   // Get the first double and convert to our format.
   3141   initFromDoubleAPInt(APInt(64, i1));
   3142   fs = convert(PPCDoubleDouble, rmNearestTiesToEven, &losesInfo);
   3143   assert(fs == opOK && !losesInfo);
   3144   (void)fs;
   3145 
   3146   // Unless we have a special case, add in second double.
   3147   if (isFiniteNonZero()) {
   3148     APFloat v(IEEEdouble, APInt(64, i2));
   3149     fs = v.convert(PPCDoubleDouble, rmNearestTiesToEven, &losesInfo);
   3150     assert(fs == opOK && !losesInfo);
   3151     (void)fs;
   3152 
   3153     add(v, rmNearestTiesToEven);
   3154   }
   3155 }
   3156 
   3157 void
   3158 APFloat::initFromQuadrupleAPInt(const APInt &api)
   3159 {
   3160   assert(api.getBitWidth()==128);
   3161   uint64_t i1 = api.getRawData()[0];
   3162   uint64_t i2 = api.getRawData()[1];
   3163   uint64_t myexponent = (i2 >> 48) & 0x7fff;
   3164   uint64_t mysignificand  = i1;
   3165   uint64_t mysignificand2 = i2 & 0xffffffffffffLL;
   3166 
   3167   initialize(&APFloat::IEEEquad);
   3168   assert(partCount()==2);
   3169 
   3170   sign = static_cast<unsigned int>(i2>>63);
   3171   if (myexponent==0 &&
   3172       (mysignificand==0 && mysignificand2==0)) {
   3173     // exponent, significand meaningless
   3174     category = fcZero;
   3175   } else if (myexponent==0x7fff &&
   3176              (mysignificand==0 && mysignificand2==0)) {
   3177     // exponent, significand meaningless
   3178     category = fcInfinity;
   3179   } else if (myexponent==0x7fff &&
   3180              (mysignificand!=0 || mysignificand2 !=0)) {
   3181     // exponent meaningless
   3182     category = fcNaN;
   3183     significandParts()[0] = mysignificand;
   3184     significandParts()[1] = mysignificand2;
   3185   } else {
   3186     category = fcNormal;
   3187     exponent = myexponent - 16383;
   3188     significandParts()[0] = mysignificand;
   3189     significandParts()[1] = mysignificand2;
   3190     if (myexponent==0)          // denormal
   3191       exponent = -16382;
   3192     else
   3193       significandParts()[1] |= 0x1000000000000LL;  // integer bit
   3194   }
   3195 }
   3196 
   3197 void
   3198 APFloat::initFromDoubleAPInt(const APInt &api)
   3199 {
   3200   assert(api.getBitWidth()==64);
   3201   uint64_t i = *api.getRawData();
   3202   uint64_t myexponent = (i >> 52) & 0x7ff;
   3203   uint64_t mysignificand = i & 0xfffffffffffffLL;
   3204 
   3205   initialize(&APFloat::IEEEdouble);
   3206   assert(partCount()==1);
   3207 
   3208   sign = static_cast<unsigned int>(i>>63);
   3209   if (myexponent==0 && mysignificand==0) {
   3210     // exponent, significand meaningless
   3211     category = fcZero;
   3212   } else if (myexponent==0x7ff && mysignificand==0) {
   3213     // exponent, significand meaningless
   3214     category = fcInfinity;
   3215   } else if (myexponent==0x7ff && mysignificand!=0) {
   3216     // exponent meaningless
   3217     category = fcNaN;
   3218     *significandParts() = mysignificand;
   3219   } else {
   3220     category = fcNormal;
   3221     exponent = myexponent - 1023;
   3222     *significandParts() = mysignificand;
   3223     if (myexponent==0)          // denormal
   3224       exponent = -1022;
   3225     else
   3226       *significandParts() |= 0x10000000000000LL;  // integer bit
   3227   }
   3228 }
   3229 
   3230 void
   3231 APFloat::initFromFloatAPInt(const APInt & api)
   3232 {
   3233   assert(api.getBitWidth()==32);
   3234   uint32_t i = (uint32_t)*api.getRawData();
   3235   uint32_t myexponent = (i >> 23) & 0xff;
   3236   uint32_t mysignificand = i & 0x7fffff;
   3237 
   3238   initialize(&APFloat::IEEEsingle);
   3239   assert(partCount()==1);
   3240 
   3241   sign = i >> 31;
   3242   if (myexponent==0 && mysignificand==0) {
   3243     // exponent, significand meaningless
   3244     category = fcZero;
   3245   } else if (myexponent==0xff && mysignificand==0) {
   3246     // exponent, significand meaningless
   3247     category = fcInfinity;
   3248   } else if (myexponent==0xff && mysignificand!=0) {
   3249     // sign, exponent, significand meaningless
   3250     category = fcNaN;
   3251     *significandParts() = mysignificand;
   3252   } else {
   3253     category = fcNormal;
   3254     exponent = myexponent - 127;  //bias
   3255     *significandParts() = mysignificand;
   3256     if (myexponent==0)    // denormal
   3257       exponent = -126;
   3258     else
   3259       *significandParts() |= 0x800000; // integer bit
   3260   }
   3261 }
   3262 
   3263 void
   3264 APFloat::initFromHalfAPInt(const APInt & api)
   3265 {
   3266   assert(api.getBitWidth()==16);
   3267   uint32_t i = (uint32_t)*api.getRawData();
   3268   uint32_t myexponent = (i >> 10) & 0x1f;
   3269   uint32_t mysignificand = i & 0x3ff;
   3270 
   3271   initialize(&APFloat::IEEEhalf);
   3272   assert(partCount()==1);
   3273 
   3274   sign = i >> 15;
   3275   if (myexponent==0 && mysignificand==0) {
   3276     // exponent, significand meaningless
   3277     category = fcZero;
   3278   } else if (myexponent==0x1f && mysignificand==0) {
   3279     // exponent, significand meaningless
   3280     category = fcInfinity;
   3281   } else if (myexponent==0x1f && mysignificand!=0) {
   3282     // sign, exponent, significand meaningless
   3283     category = fcNaN;
   3284     *significandParts() = mysignificand;
   3285   } else {
   3286     category = fcNormal;
   3287     exponent = myexponent - 15;  //bias
   3288     *significandParts() = mysignificand;
   3289     if (myexponent==0)    // denormal
   3290       exponent = -14;
   3291     else
   3292       *significandParts() |= 0x400; // integer bit
   3293   }
   3294 }
   3295 
   3296 /// Treat api as containing the bits of a floating point number.  Currently
   3297 /// we infer the floating point type from the size of the APInt.  The
   3298 /// isIEEE argument distinguishes between PPC128 and IEEE128 (not meaningful
   3299 /// when the size is anything else).
   3300 void
   3301 APFloat::initFromAPInt(const fltSemantics* Sem, const APInt& api)
   3302 {
   3303   if (Sem == &IEEEhalf)
   3304     return initFromHalfAPInt(api);
   3305   if (Sem == &IEEEsingle)
   3306     return initFromFloatAPInt(api);
   3307   if (Sem == &IEEEdouble)
   3308     return initFromDoubleAPInt(api);
   3309   if (Sem == &x87DoubleExtended)
   3310     return initFromF80LongDoubleAPInt(api);
   3311   if (Sem == &IEEEquad)
   3312     return initFromQuadrupleAPInt(api);
   3313   if (Sem == &PPCDoubleDouble)
   3314     return initFromPPCDoubleDoubleAPInt(api);
   3315 
   3316   llvm_unreachable(0);
   3317 }
   3318 
   3319 APFloat
   3320 APFloat::getAllOnesValue(unsigned BitWidth, bool isIEEE)
   3321 {
   3322   switch (BitWidth) {
   3323   case 16:
   3324     return APFloat(IEEEhalf, APInt::getAllOnesValue(BitWidth));
   3325   case 32:
   3326     return APFloat(IEEEsingle, APInt::getAllOnesValue(BitWidth));
   3327   case 64:
   3328     return APFloat(IEEEdouble, APInt::getAllOnesValue(BitWidth));
   3329   case 80:
   3330     return APFloat(x87DoubleExtended, APInt::getAllOnesValue(BitWidth));
   3331   case 128:
   3332     if (isIEEE)
   3333       return APFloat(IEEEquad, APInt::getAllOnesValue(BitWidth));
   3334     return APFloat(PPCDoubleDouble, APInt::getAllOnesValue(BitWidth));
   3335   default:
   3336     llvm_unreachable("Unknown floating bit width");
   3337   }
   3338 }
   3339 
   3340 /// Make this number the largest magnitude normal number in the given
   3341 /// semantics.
   3342 void APFloat::makeLargest(bool Negative) {
   3343   // We want (in interchange format):
   3344   //   sign = {Negative}
   3345   //   exponent = 1..10
   3346   //   significand = 1..1
   3347   category = fcNormal;
   3348   sign = Negative;
   3349   exponent = semantics->maxExponent;
   3350 
   3351   // Use memset to set all but the highest integerPart to all ones.
   3352   integerPart *significand = significandParts();
   3353   unsigned PartCount = partCount();
   3354   memset(significand, 0xFF, sizeof(integerPart)*(PartCount - 1));
   3355 
   3356   // Set the high integerPart especially setting all unused top bits for
   3357   // internal consistency.
   3358   const unsigned NumUnusedHighBits =
   3359     PartCount*integerPartWidth - semantics->precision;
   3360   significand[PartCount - 1] = ~integerPart(0) >> NumUnusedHighBits;
   3361 }
   3362 
   3363 /// Make this number the smallest magnitude denormal number in the given
   3364 /// semantics.
   3365 void APFloat::makeSmallest(bool Negative) {
   3366   // We want (in interchange format):
   3367   //   sign = {Negative}
   3368   //   exponent = 0..0
   3369   //   significand = 0..01
   3370   category = fcNormal;
   3371   sign = Negative;
   3372   exponent = semantics->minExponent;
   3373   APInt::tcSet(significandParts(), 1, partCount());
   3374 }
   3375 
   3376 
   3377 APFloat APFloat::getLargest(const fltSemantics &Sem, bool Negative) {
   3378   // We want (in interchange format):
   3379   //   sign = {Negative}
   3380   //   exponent = 1..10
   3381   //   significand = 1..1
   3382   APFloat Val(Sem, uninitialized);
   3383   Val.makeLargest(Negative);
   3384   return Val;
   3385 }
   3386 
   3387 APFloat APFloat::getSmallest(const fltSemantics &Sem, bool Negative) {
   3388   // We want (in interchange format):
   3389   //   sign = {Negative}
   3390   //   exponent = 0..0
   3391   //   significand = 0..01
   3392   APFloat Val(Sem, uninitialized);
   3393   Val.makeSmallest(Negative);
   3394   return Val;
   3395 }
   3396 
   3397 APFloat APFloat::getSmallestNormalized(const fltSemantics &Sem, bool Negative) {
   3398   APFloat Val(Sem, uninitialized);
   3399 
   3400   // We want (in interchange format):
   3401   //   sign = {Negative}
   3402   //   exponent = 0..0
   3403   //   significand = 10..0
   3404 
   3405   Val.category = fcNormal;
   3406   Val.zeroSignificand();
   3407   Val.sign = Negative;
   3408   Val.exponent = Sem.minExponent;
   3409   Val.significandParts()[partCountForBits(Sem.precision)-1] |=
   3410     (((integerPart) 1) << ((Sem.precision - 1) % integerPartWidth));
   3411 
   3412   return Val;
   3413 }
   3414 
   3415 APFloat::APFloat(const fltSemantics &Sem, const APInt &API) {
   3416   initFromAPInt(&Sem, API);
   3417 }
   3418 
   3419 APFloat::APFloat(float f) {
   3420   initFromAPInt(&IEEEsingle, APInt::floatToBits(f));
   3421 }
   3422 
   3423 APFloat::APFloat(double d) {
   3424   initFromAPInt(&IEEEdouble, APInt::doubleToBits(d));
   3425 }
   3426 
   3427 namespace {
   3428   void append(SmallVectorImpl<char> &Buffer, StringRef Str) {
   3429     Buffer.append(Str.begin(), Str.end());
   3430   }
   3431 
   3432   /// Removes data from the given significand until it is no more
   3433   /// precise than is required for the desired precision.
   3434   void AdjustToPrecision(APInt &significand,
   3435                          int &exp, unsigned FormatPrecision) {
   3436     unsigned bits = significand.getActiveBits();
   3437 
   3438     // 196/59 is a very slight overestimate of lg_2(10).
   3439     unsigned bitsRequired = (FormatPrecision * 196 + 58) / 59;
   3440 
   3441     if (bits <= bitsRequired) return;
   3442 
   3443     unsigned tensRemovable = (bits - bitsRequired) * 59 / 196;
   3444     if (!tensRemovable) return;
   3445 
   3446     exp += tensRemovable;
   3447 
   3448     APInt divisor(significand.getBitWidth(), 1);
   3449     APInt powten(significand.getBitWidth(), 10);
   3450     while (true) {
   3451       if (tensRemovable & 1)
   3452         divisor *= powten;
   3453       tensRemovable >>= 1;
   3454       if (!tensRemovable) break;
   3455       powten *= powten;
   3456     }
   3457 
   3458     significand = significand.udiv(divisor);
   3459 
   3460     // Truncate the significand down to its active bit count.
   3461     significand = significand.trunc(significand.getActiveBits());
   3462   }
   3463 
   3464 
   3465   void AdjustToPrecision(SmallVectorImpl<char> &buffer,
   3466                          int &exp, unsigned FormatPrecision) {
   3467     unsigned N = buffer.size();
   3468     if (N <= FormatPrecision) return;
   3469 
   3470     // The most significant figures are the last ones in the buffer.
   3471     unsigned FirstSignificant = N - FormatPrecision;
   3472 
   3473     // Round.
   3474     // FIXME: this probably shouldn't use 'round half up'.
   3475 
   3476     // Rounding down is just a truncation, except we also want to drop
   3477     // trailing zeros from the new result.
   3478     if (buffer[FirstSignificant - 1] < '5') {
   3479       while (FirstSignificant < N && buffer[FirstSignificant] == '0')
   3480         FirstSignificant++;
   3481 
   3482       exp += FirstSignificant;
   3483       buffer.erase(&buffer[0], &buffer[FirstSignificant]);
   3484       return;
   3485     }
   3486 
   3487     // Rounding up requires a decimal add-with-carry.  If we continue
   3488     // the carry, the newly-introduced zeros will just be truncated.
   3489     for (unsigned I = FirstSignificant; I != N; ++I) {
   3490       if (buffer[I] == '9') {
   3491         FirstSignificant++;
   3492       } else {
   3493         buffer[I]++;
   3494         break;
   3495       }
   3496     }
   3497 
   3498     // If we carried through, we have exactly one digit of precision.
   3499     if (FirstSignificant == N) {
   3500       exp += FirstSignificant;
   3501       buffer.clear();
   3502       buffer.push_back('1');
   3503       return;
   3504     }
   3505 
   3506     exp += FirstSignificant;
   3507     buffer.erase(&buffer[0], &buffer[FirstSignificant]);
   3508   }
   3509 }
   3510 
   3511 void APFloat::toString(SmallVectorImpl<char> &Str,
   3512                        unsigned FormatPrecision,
   3513                        unsigned FormatMaxPadding) const {
   3514   switch (category) {
   3515   case fcInfinity:
   3516     if (isNegative())
   3517       return append(Str, "-Inf");
   3518     else
   3519       return append(Str, "+Inf");
   3520 
   3521   case fcNaN: return append(Str, "NaN");
   3522 
   3523   case fcZero:
   3524     if (isNegative())
   3525       Str.push_back('-');
   3526 
   3527     if (!FormatMaxPadding)
   3528       append(Str, "0.0E+0");
   3529     else
   3530       Str.push_back('0');
   3531     return;
   3532 
   3533   case fcNormal:
   3534     break;
   3535   }
   3536 
   3537   if (isNegative())
   3538     Str.push_back('-');
   3539 
   3540   // Decompose the number into an APInt and an exponent.
   3541   int exp = exponent - ((int) semantics->precision - 1);
   3542   APInt significand(semantics->precision,
   3543                     makeArrayRef(significandParts(),
   3544                                  partCountForBits(semantics->precision)));
   3545 
   3546   // Set FormatPrecision if zero.  We want to do this before we
   3547   // truncate trailing zeros, as those are part of the precision.
   3548   if (!FormatPrecision) {
   3549     // It's an interesting question whether to use the nominal
   3550     // precision or the active precision here for denormals.
   3551 
   3552     // FormatPrecision = ceil(significandBits / lg_2(10))
   3553     FormatPrecision = (semantics->precision * 59 + 195) / 196;
   3554   }
   3555 
   3556   // Ignore trailing binary zeros.
   3557   int trailingZeros = significand.countTrailingZeros();
   3558   exp += trailingZeros;
   3559   significand = significand.lshr(trailingZeros);
   3560 
   3561   // Change the exponent from 2^e to 10^e.
   3562   if (exp == 0) {
   3563     // Nothing to do.
   3564   } else if (exp > 0) {
   3565     // Just shift left.
   3566     significand = significand.zext(semantics->precision + exp);
   3567     significand <<= exp;
   3568     exp = 0;
   3569   } else { /* exp < 0 */
   3570     int texp = -exp;
   3571 
   3572     // We transform this using the identity:
   3573     //   (N)(2^-e) == (N)(5^e)(10^-e)
   3574     // This means we have to multiply N (the significand) by 5^e.
   3575     // To avoid overflow, we have to operate on numbers large
   3576     // enough to store N * 5^e:
   3577     //   log2(N * 5^e) == log2(N) + e * log2(5)
   3578     //                 <= semantics->precision + e * 137 / 59
   3579     //   (log_2(5) ~ 2.321928 < 2.322034 ~ 137/59)
   3580 
   3581     unsigned precision = semantics->precision + (137 * texp + 136) / 59;
   3582 
   3583     // Multiply significand by 5^e.
   3584     //   N * 5^0101 == N * 5^(1*1) * 5^(0*2) * 5^(1*4) * 5^(0*8)
   3585     significand = significand.zext(precision);
   3586     APInt five_to_the_i(precision, 5);
   3587     while (true) {
   3588       if (texp & 1) significand *= five_to_the_i;
   3589 
   3590       texp >>= 1;
   3591       if (!texp) break;
   3592       five_to_the_i *= five_to_the_i;
   3593     }
   3594   }
   3595 
   3596   AdjustToPrecision(significand, exp, FormatPrecision);
   3597 
   3598   SmallVector<char, 256> buffer;
   3599 
   3600   // Fill the buffer.
   3601   unsigned precision = significand.getBitWidth();
   3602   APInt ten(precision, 10);
   3603   APInt digit(precision, 0);
   3604 
   3605   bool inTrail = true;
   3606   while (significand != 0) {
   3607     // digit <- significand % 10
   3608     // significand <- significand / 10
   3609     APInt::udivrem(significand, ten, significand, digit);
   3610 
   3611     unsigned d = digit.getZExtValue();
   3612 
   3613     // Drop trailing zeros.
   3614     if (inTrail && !d) exp++;
   3615     else {
   3616       buffer.push_back((char) ('0' + d));
   3617       inTrail = false;
   3618     }
   3619   }
   3620 
   3621   assert(!buffer.empty() && "no characters in buffer!");
   3622 
   3623   // Drop down to FormatPrecision.
   3624   // TODO: don't do more precise calculations above than are required.
   3625   AdjustToPrecision(buffer, exp, FormatPrecision);
   3626 
   3627   unsigned NDigits = buffer.size();
   3628 
   3629   // Check whether we should use scientific notation.
   3630   bool FormatScientific;
   3631   if (!FormatMaxPadding)
   3632     FormatScientific = true;
   3633   else {
   3634     if (exp >= 0) {
   3635       // 765e3 --> 765000
   3636       //              ^^^
   3637       // But we shouldn't make the number look more precise than it is.
   3638       FormatScientific = ((unsigned) exp > FormatMaxPadding ||
   3639                           NDigits + (unsigned) exp > FormatPrecision);
   3640     } else {
   3641       // Power of the most significant digit.
   3642       int MSD = exp + (int) (NDigits - 1);
   3643       if (MSD >= 0) {
   3644         // 765e-2 == 7.65
   3645         FormatScientific = false;
   3646       } else {
   3647         // 765e-5 == 0.00765
   3648         //           ^ ^^
   3649         FormatScientific = ((unsigned) -MSD) > FormatMaxPadding;
   3650       }
   3651     }
   3652   }
   3653 
   3654   // Scientific formatting is pretty straightforward.
   3655   if (FormatScientific) {
   3656     exp += (NDigits - 1);
   3657 
   3658     Str.push_back(buffer[NDigits-1]);
   3659     Str.push_back('.');
   3660     if (NDigits == 1)
   3661       Str.push_back('0');
   3662     else
   3663       for (unsigned I = 1; I != NDigits; ++I)
   3664         Str.push_back(buffer[NDigits-1-I]);
   3665     Str.push_back('E');
   3666 
   3667     Str.push_back(exp >= 0 ? '+' : '-');
   3668     if (exp < 0) exp = -exp;
   3669     SmallVector<char, 6> expbuf;
   3670     do {
   3671       expbuf.push_back((char) ('0' + (exp % 10)));
   3672       exp /= 10;
   3673     } while (exp);
   3674     for (unsigned I = 0, E = expbuf.size(); I != E; ++I)
   3675       Str.push_back(expbuf[E-1-I]);
   3676     return;
   3677   }
   3678 
   3679   // Non-scientific, positive exponents.
   3680   if (exp >= 0) {
   3681     for (unsigned I = 0; I != NDigits; ++I)
   3682       Str.push_back(buffer[NDigits-1-I]);
   3683     for (unsigned I = 0; I != (unsigned) exp; ++I)
   3684       Str.push_back('0');
   3685     return;
   3686   }
   3687 
   3688   // Non-scientific, negative exponents.
   3689 
   3690   // The number of digits to the left of the decimal point.
   3691   int NWholeDigits = exp + (int) NDigits;
   3692 
   3693   unsigned I = 0;
   3694   if (NWholeDigits > 0) {
   3695     for (; I != (unsigned) NWholeDigits; ++I)
   3696       Str.push_back(buffer[NDigits-I-1]);
   3697     Str.push_back('.');
   3698   } else {
   3699     unsigned NZeros = 1 + (unsigned) -NWholeDigits;
   3700 
   3701     Str.push_back('0');
   3702     Str.push_back('.');
   3703     for (unsigned Z = 1; Z != NZeros; ++Z)
   3704       Str.push_back('0');
   3705   }
   3706 
   3707   for (; I != NDigits; ++I)
   3708     Str.push_back(buffer[NDigits-I-1]);
   3709 }
   3710 
   3711 bool APFloat::getExactInverse(APFloat *inv) const {
   3712   // Special floats and denormals have no exact inverse.
   3713   if (!isFiniteNonZero())
   3714     return false;
   3715 
   3716   // Check that the number is a power of two by making sure that only the
   3717   // integer bit is set in the significand.
   3718   if (significandLSB() != semantics->precision - 1)
   3719     return false;
   3720 
   3721   // Get the inverse.
   3722   APFloat reciprocal(*semantics, 1ULL);
   3723   if (reciprocal.divide(*this, rmNearestTiesToEven) != opOK)
   3724     return false;
   3725 
   3726   // Avoid multiplication with a denormal, it is not safe on all platforms and
   3727   // may be slower than a normal division.
   3728   if (reciprocal.isDenormal())
   3729     return false;
   3730 
   3731   assert(reciprocal.isFiniteNonZero() &&
   3732          reciprocal.significandLSB() == reciprocal.semantics->precision - 1);
   3733 
   3734   if (inv)
   3735     *inv = reciprocal;
   3736 
   3737   return true;
   3738 }
   3739 
   3740 bool APFloat::isSignaling() const {
   3741   if (!isNaN())
   3742     return false;
   3743 
   3744   // IEEE-754R 2008 6.2.1: A signaling NaN bit string should be encoded with the
   3745   // first bit of the trailing significand being 0.
   3746   return !APInt::tcExtractBit(significandParts(), semantics->precision - 2);
   3747 }
   3748 
   3749 /// IEEE-754R 2008 5.3.1: nextUp/nextDown.
   3750 ///
   3751 /// *NOTE* since nextDown(x) = -nextUp(-x), we only implement nextUp with
   3752 /// appropriate sign switching before/after the computation.
   3753 APFloat::opStatus APFloat::next(bool nextDown) {
   3754   // If we are performing nextDown, swap sign so we have -x.
   3755   if (nextDown)
   3756     changeSign();
   3757 
   3758   // Compute nextUp(x)
   3759   opStatus result = opOK;
   3760 
   3761   // Handle each float category separately.
   3762   switch (category) {
   3763   case fcInfinity:
   3764     // nextUp(+inf) = +inf
   3765     if (!isNegative())
   3766       break;
   3767     // nextUp(-inf) = -getLargest()
   3768     makeLargest(true);
   3769     break;
   3770   case fcNaN:
   3771     // IEEE-754R 2008 6.2 Par 2: nextUp(sNaN) = qNaN. Set Invalid flag.
   3772     // IEEE-754R 2008 6.2: nextUp(qNaN) = qNaN. Must be identity so we do not
   3773     //                     change the payload.
   3774     if (isSignaling()) {
   3775       result = opInvalidOp;
   3776       // For consistency, propogate the sign of the sNaN to the qNaN.
   3777       makeNaN(false, isNegative(), 0);
   3778     }
   3779     break;
   3780   case fcZero:
   3781     // nextUp(pm 0) = +getSmallest()
   3782     makeSmallest(false);
   3783     break;
   3784   case fcNormal:
   3785     // nextUp(-getSmallest()) = -0
   3786     if (isSmallest() && isNegative()) {
   3787       APInt::tcSet(significandParts(), 0, partCount());
   3788       category = fcZero;
   3789       exponent = 0;
   3790       break;
   3791     }
   3792 
   3793     // nextUp(getLargest()) == INFINITY
   3794     if (isLargest() && !isNegative()) {
   3795       APInt::tcSet(significandParts(), 0, partCount());
   3796       category = fcInfinity;
   3797       exponent = semantics->maxExponent + 1;
   3798       break;
   3799     }
   3800 
   3801     // nextUp(normal) == normal + inc.
   3802     if (isNegative()) {
   3803       // If we are negative, we need to decrement the significand.
   3804 
   3805       // We only cross a binade boundary that requires adjusting the exponent
   3806       // if:
   3807       //   1. exponent != semantics->minExponent. This implies we are not in the
   3808       //   smallest binade or are dealing with denormals.
   3809       //   2. Our significand excluding the integral bit is all zeros.
   3810       bool WillCrossBinadeBoundary =
   3811         exponent != semantics->minExponent && isSignificandAllZeros();
   3812 
   3813       // Decrement the significand.
   3814       //
   3815       // We always do this since:
   3816       //   1. If we are dealing with a non binade decrement, by definition we
   3817       //   just decrement the significand.
   3818       //   2. If we are dealing with a normal -> normal binade decrement, since
   3819       //   we have an explicit integral bit the fact that all bits but the
   3820       //   integral bit are zero implies that subtracting one will yield a
   3821       //   significand with 0 integral bit and 1 in all other spots. Thus we
   3822       //   must just adjust the exponent and set the integral bit to 1.
   3823       //   3. If we are dealing with a normal -> denormal binade decrement,
   3824       //   since we set the integral bit to 0 when we represent denormals, we
   3825       //   just decrement the significand.
   3826       integerPart *Parts = significandParts();
   3827       APInt::tcDecrement(Parts, partCount());
   3828 
   3829       if (WillCrossBinadeBoundary) {
   3830         // Our result is a normal number. Do the following:
   3831         // 1. Set the integral bit to 1.
   3832         // 2. Decrement the exponent.
   3833         APInt::tcSetBit(Parts, semantics->precision - 1);
   3834         exponent--;
   3835       }
   3836     } else {
   3837       // If we are positive, we need to increment the significand.
   3838 
   3839       // We only cross a binade boundary that requires adjusting the exponent if
   3840       // the input is not a denormal and all of said input's significand bits
   3841       // are set. If all of said conditions are true: clear the significand, set
   3842       // the integral bit to 1, and increment the exponent. If we have a
   3843       // denormal always increment since moving denormals and the numbers in the
   3844       // smallest normal binade have the same exponent in our representation.
   3845       bool WillCrossBinadeBoundary = !isDenormal() && isSignificandAllOnes();
   3846 
   3847       if (WillCrossBinadeBoundary) {
   3848         integerPart *Parts = significandParts();
   3849         APInt::tcSet(Parts, 0, partCount());
   3850         APInt::tcSetBit(Parts, semantics->precision - 1);
   3851         assert(exponent != semantics->maxExponent &&
   3852                "We can not increment an exponent beyond the maxExponent allowed"
   3853                " by the given floating point semantics.");
   3854         exponent++;
   3855       } else {
   3856         incrementSignificand();
   3857       }
   3858     }
   3859     break;
   3860   }
   3861 
   3862   // If we are performing nextDown, swap sign so we have -nextUp(-x)
   3863   if (nextDown)
   3864     changeSign();
   3865 
   3866   return result;
   3867 }
   3868 
   3869 void
   3870 APFloat::makeInf(bool Negative) {
   3871   category = fcInfinity;
   3872   sign = Negative;
   3873   exponent = semantics->maxExponent + 1;
   3874   APInt::tcSet(significandParts(), 0, partCount());
   3875 }
   3876 
   3877 void
   3878 APFloat::makeZero(bool Negative) {
   3879   category = fcZero;
   3880   sign = Negative;
   3881   exponent = semantics->minExponent-1;
   3882   APInt::tcSet(significandParts(), 0, partCount());
   3883 }
   3884