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