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