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