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