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