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