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