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