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