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