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