Make special cases (0 inf nan) work for frem.
[oota-llvm.git] / lib / Support / APFloat.cpp
1 //===-- APFloat.cpp - Implement APFloat class -----------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a class to represent arbitrary precision floating
11 // point values and provide a variety of arithmetic operations on them.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/ADT/APFloat.h"
16 #include "llvm/ADT/FoldingSet.h"
17 #include "llvm/Support/MathExtras.h"
18 #include <cstring>
19
20 using namespace llvm;
21
22 #define convolve(lhs, rhs) ((lhs) * 4 + (rhs))
23
24 /* Assumed in hexadecimal significand parsing, and conversion to
25    hexadecimal strings.  */
26 #define COMPILE_TIME_ASSERT(cond) extern int CTAssert[(cond) ? 1 : -1]
27 COMPILE_TIME_ASSERT(integerPartWidth % 4 == 0);
28
29 namespace llvm {
30
31   /* Represents floating point arithmetic semantics.  */
32   struct fltSemantics {
33     /* The largest E such that 2^E is representable; this matches the
34        definition of IEEE 754.  */
35     exponent_t maxExponent;
36
37     /* The smallest E such that 2^E is a normalized number; this
38        matches the definition of IEEE 754.  */
39     exponent_t minExponent;
40
41     /* Number of bits in the significand.  This includes the integer
42        bit.  */
43     unsigned int precision;
44
45     /* True if arithmetic is supported.  */
46     unsigned int arithmeticOK;
47   };
48
49   const fltSemantics APFloat::IEEEsingle = { 127, -126, 24, true };
50   const fltSemantics APFloat::IEEEdouble = { 1023, -1022, 53, true };
51   const fltSemantics APFloat::IEEEquad = { 16383, -16382, 113, true };
52   const fltSemantics APFloat::x87DoubleExtended = { 16383, -16382, 64, true };
53   const fltSemantics APFloat::Bogus = { 0, 0, 0, true };
54
55   // The PowerPC format consists of two doubles.  It does not map cleanly
56   // onto the usual format above.  For now only storage of constants of
57   // this type is supported, no arithmetic.
58   const fltSemantics APFloat::PPCDoubleDouble = { 1023, -1022, 106, false };
59
60   /* A tight upper bound on number of parts required to hold the value
61      pow(5, power) is
62
63        power * 815 / (351 * integerPartWidth) + 1
64        
65      However, whilst the result may require only this many parts,
66      because we are multiplying two values to get it, the
67      multiplication may require an extra part with the excess part
68      being zero (consider the trivial case of 1 * 1, tcFullMultiply
69      requires two parts to hold the single-part result).  So we add an
70      extra one to guarantee enough space whilst multiplying.  */
71   const unsigned int maxExponent = 16383;
72   const unsigned int maxPrecision = 113;
73   const unsigned int maxPowerOfFiveExponent = maxExponent + maxPrecision - 1;
74   const unsigned int maxPowerOfFiveParts = 2 + ((maxPowerOfFiveExponent * 815)
75                                                 / (351 * integerPartWidth));
76 }
77
78 /* Put a bunch of private, handy routines in an anonymous namespace.  */
79 namespace {
80
81   static inline unsigned int
82   partCountForBits(unsigned int bits)
83   {
84     return ((bits) + integerPartWidth - 1) / integerPartWidth;
85   }
86
87   /* Returns 0U-9U.  Return values >= 10U are not digits.  */
88   static inline unsigned int
89   decDigitValue(unsigned int c)
90   {
91     return c - '0';
92   }
93
94   static unsigned int
95   hexDigitValue(unsigned int c)
96   {
97     unsigned int r;
98
99     r = c - '0';
100     if(r <= 9)
101       return r;
102
103     r = c - 'A';
104     if(r <= 5)
105       return r + 10;
106
107     r = c - 'a';
108     if(r <= 5)
109       return r + 10;
110
111     return -1U;
112   }
113
114   static inline void
115   assertArithmeticOK(const llvm::fltSemantics &semantics) {
116     assert(semantics.arithmeticOK
117            && "Compile-time arithmetic does not support these semantics");
118   }
119
120   /* Return the value of a decimal exponent of the form
121      [+-]ddddddd.
122
123      If the exponent overflows, returns a large exponent with the
124      appropriate sign.  */
125   static int
126   readExponent(const char *p)
127   {
128     bool isNegative;
129     unsigned int absExponent;
130     const unsigned int overlargeExponent = 24000;  /* FIXME.  */
131
132     isNegative = (*p == '-');
133     if (*p == '-' || *p == '+')
134       p++;
135
136     absExponent = decDigitValue(*p++);
137     assert (absExponent < 10U);
138
139     for (;;) {
140       unsigned int value;
141
142       value = decDigitValue(*p);
143       if (value >= 10U)
144         break;
145
146       p++;
147       value += absExponent * 10;
148       if (absExponent >= overlargeExponent) {
149         absExponent = overlargeExponent;
150         break;
151       }
152       absExponent = value;
153     }
154
155     if (isNegative)
156       return -(int) absExponent;
157     else
158       return (int) absExponent;
159   }
160
161   /* This is ugly and needs cleaning up, but I don't immediately see
162      how whilst remaining safe.  */
163   static int
164   totalExponent(const char *p, int exponentAdjustment)
165   {
166     int unsignedExponent;
167     bool negative, overflow;
168     int exponent;
169
170     /* Move past the exponent letter and sign to the digits.  */
171     p++;
172     negative = *p == '-';
173     if(*p == '-' || *p == '+')
174       p++;
175
176     unsignedExponent = 0;
177     overflow = false;
178     for(;;) {
179       unsigned int value;
180
181       value = decDigitValue(*p);
182       if(value >= 10U)
183         break;
184
185       p++;
186       unsignedExponent = unsignedExponent * 10 + value;
187       if(unsignedExponent > 65535)
188         overflow = true;
189     }
190
191     if(exponentAdjustment > 65535 || exponentAdjustment < -65536)
192       overflow = true;
193
194     if(!overflow) {
195       exponent = unsignedExponent;
196       if(negative)
197         exponent = -exponent;
198       exponent += exponentAdjustment;
199       if(exponent > 65535 || exponent < -65536)
200         overflow = true;
201     }
202
203     if(overflow)
204       exponent = negative ? -65536: 65535;
205
206     return exponent;
207   }
208
209   static const char *
210   skipLeadingZeroesAndAnyDot(const char *p, const char **dot)
211   {
212     *dot = 0;
213     while(*p == '0')
214       p++;
215
216     if(*p == '.') {
217       *dot = p++;
218       while(*p == '0')
219         p++;
220     }
221
222     return p;
223   }
224
225   /* Given a normal decimal floating point number of the form
226
227        dddd.dddd[eE][+-]ddd
228
229      where the decimal point and exponent are optional, fill out the
230      structure D.  Exponent is appropriate if the significand is
231      treated as an integer, and normalizedExponent if the significand
232      is taken to have the decimal point after a single leading
233      non-zero digit.
234
235      If the value is zero, V->firstSigDigit points to a non-digit, and
236      the return exponent is zero.
237   */
238   struct decimalInfo {
239     const char *firstSigDigit;
240     const char *lastSigDigit;
241     int exponent;
242     int normalizedExponent;
243   };
244
245   static void
246   interpretDecimal(const char *p, decimalInfo *D)
247   {
248     const char *dot;
249
250     p = skipLeadingZeroesAndAnyDot (p, &dot);
251
252     D->firstSigDigit = p;
253     D->exponent = 0;
254     D->normalizedExponent = 0;
255
256     for (;;) {
257       if (*p == '.') {
258         assert(dot == 0);
259         dot = p++;
260       }
261       if (decDigitValue(*p) >= 10U)
262         break;
263       p++;
264     }
265
266     /* If number is all zerooes accept any exponent.  */
267     if (p != D->firstSigDigit) {
268       if (*p == 'e' || *p == 'E')
269         D->exponent = readExponent(p + 1);
270
271       /* Implied decimal point?  */
272       if (!dot)
273         dot = p;
274
275       /* Drop insignificant trailing zeroes.  */
276       do
277         do
278           p--;
279         while (*p == '0');
280       while (*p == '.');
281
282       /* Adjust the exponents for any decimal point.  */
283       D->exponent += static_cast<exponent_t>((dot - p) - (dot > p));
284       D->normalizedExponent = (D->exponent +
285                 static_cast<exponent_t>((p - D->firstSigDigit)
286                                         - (dot > D->firstSigDigit && dot < p)));
287     }
288
289     D->lastSigDigit = p;
290   }
291
292   /* Return the trailing fraction of a hexadecimal number.
293      DIGITVALUE is the first hex digit of the fraction, P points to
294      the next digit.  */
295   static lostFraction
296   trailingHexadecimalFraction(const char *p, unsigned int digitValue)
297   {
298     unsigned int hexDigit;
299
300     /* If the first trailing digit isn't 0 or 8 we can work out the
301        fraction immediately.  */
302     if(digitValue > 8)
303       return lfMoreThanHalf;
304     else if(digitValue < 8 && digitValue > 0)
305       return lfLessThanHalf;
306
307     /* Otherwise we need to find the first non-zero digit.  */
308     while(*p == '0')
309       p++;
310
311     hexDigit = hexDigitValue(*p);
312
313     /* If we ran off the end it is exactly zero or one-half, otherwise
314        a little more.  */
315     if(hexDigit == -1U)
316       return digitValue == 0 ? lfExactlyZero: lfExactlyHalf;
317     else
318       return digitValue == 0 ? lfLessThanHalf: lfMoreThanHalf;
319   }
320
321   /* Return the fraction lost were a bignum truncated losing the least
322      significant BITS bits.  */
323   static lostFraction
324   lostFractionThroughTruncation(const integerPart *parts,
325                                 unsigned int partCount,
326                                 unsigned int bits)
327   {
328     unsigned int lsb;
329
330     lsb = APInt::tcLSB(parts, partCount);
331
332     /* Note this is guaranteed true if bits == 0, or LSB == -1U.  */
333     if(bits <= lsb)
334       return lfExactlyZero;
335     if(bits == lsb + 1)
336       return lfExactlyHalf;
337     if(bits <= partCount * integerPartWidth
338        && APInt::tcExtractBit(parts, bits - 1))
339       return lfMoreThanHalf;
340
341     return lfLessThanHalf;
342   }
343
344   /* Shift DST right BITS bits noting lost fraction.  */
345   static lostFraction
346   shiftRight(integerPart *dst, unsigned int parts, unsigned int bits)
347   {
348     lostFraction lost_fraction;
349
350     lost_fraction = lostFractionThroughTruncation(dst, parts, bits);
351
352     APInt::tcShiftRight(dst, parts, bits);
353
354     return lost_fraction;
355   }
356
357   /* Combine the effect of two lost fractions.  */
358   static lostFraction
359   combineLostFractions(lostFraction moreSignificant,
360                        lostFraction lessSignificant)
361   {
362     if(lessSignificant != lfExactlyZero) {
363       if(moreSignificant == lfExactlyZero)
364         moreSignificant = lfLessThanHalf;
365       else if(moreSignificant == lfExactlyHalf)
366         moreSignificant = lfMoreThanHalf;
367     }
368
369     return moreSignificant;
370   }
371
372   /* The error from the true value, in half-ulps, on multiplying two
373      floating point numbers, which differ from the value they
374      approximate by at most HUE1 and HUE2 half-ulps, is strictly less
375      than the returned value.
376
377      See "How to Read Floating Point Numbers Accurately" by William D
378      Clinger.  */
379   static unsigned int
380   HUerrBound(bool inexactMultiply, unsigned int HUerr1, unsigned int HUerr2)
381   {
382     assert(HUerr1 < 2 || HUerr2 < 2 || (HUerr1 + HUerr2 < 8));
383
384     if (HUerr1 + HUerr2 == 0)
385       return inexactMultiply * 2;  /* <= inexactMultiply half-ulps.  */
386     else
387       return inexactMultiply + 2 * (HUerr1 + HUerr2);
388   }
389
390   /* The number of ulps from the boundary (zero, or half if ISNEAREST)
391      when the least significant BITS are truncated.  BITS cannot be
392      zero.  */
393   static integerPart
394   ulpsFromBoundary(const integerPart *parts, unsigned int bits, bool isNearest)
395   {
396     unsigned int count, partBits;
397     integerPart part, boundary;
398
399     assert (bits != 0);
400
401     bits--;
402     count = bits / integerPartWidth;
403     partBits = bits % integerPartWidth + 1;
404
405     part = parts[count] & (~(integerPart) 0 >> (integerPartWidth - partBits));
406
407     if (isNearest)
408       boundary = (integerPart) 1 << (partBits - 1);
409     else
410       boundary = 0;
411
412     if (count == 0) {
413       if (part - boundary <= boundary - part)
414         return part - boundary;
415       else
416         return boundary - part;
417     }
418
419     if (part == boundary) {
420       while (--count)
421         if (parts[count])
422           return ~(integerPart) 0; /* A lot.  */
423
424       return parts[0];
425     } else if (part == boundary - 1) {
426       while (--count)
427         if (~parts[count])
428           return ~(integerPart) 0; /* A lot.  */
429
430       return -parts[0];
431     }
432
433     return ~(integerPart) 0; /* A lot.  */
434   }
435
436   /* Place pow(5, power) in DST, and return the number of parts used.
437      DST must be at least one part larger than size of the answer.  */
438   static unsigned int
439   powerOf5(integerPart *dst, unsigned int power)
440   {
441     static const integerPart firstEightPowers[] = { 1, 5, 25, 125, 625, 3125,
442                                                     15625, 78125 };
443     static integerPart pow5s[maxPowerOfFiveParts * 2 + 5] = { 78125 * 5 };
444     static unsigned int partsCount[16] = { 1 };
445
446     integerPart scratch[maxPowerOfFiveParts], *p1, *p2, *pow5;
447     unsigned int result;
448
449     assert(power <= maxExponent);
450
451     p1 = dst;
452     p2 = scratch;
453
454     *p1 = firstEightPowers[power & 7];
455     power >>= 3;
456
457     result = 1;
458     pow5 = pow5s;
459
460     for (unsigned int n = 0; power; power >>= 1, n++) {
461       unsigned int pc;
462
463       pc = partsCount[n];
464
465       /* Calculate pow(5,pow(2,n+3)) if we haven't yet.  */
466       if (pc == 0) {
467         pc = partsCount[n - 1];
468         APInt::tcFullMultiply(pow5, pow5 - pc, pow5 - pc, pc, pc);
469         pc *= 2;
470         if (pow5[pc - 1] == 0)
471           pc--;
472         partsCount[n] = pc;
473       }
474
475       if (power & 1) {
476         integerPart *tmp;
477
478         APInt::tcFullMultiply(p2, p1, pow5, result, pc);
479         result += pc;
480         if (p2[result - 1] == 0)
481           result--;
482
483         /* Now result is in p1 with partsCount parts and p2 is scratch
484            space.  */
485         tmp = p1, p1 = p2, p2 = tmp;
486       }
487
488       pow5 += pc;
489     }
490
491     if (p1 != dst)
492       APInt::tcAssign(dst, p1, result);
493
494     return result;
495   }
496
497   /* Zero at the end to avoid modular arithmetic when adding one; used
498      when rounding up during hexadecimal output.  */
499   static const char hexDigitsLower[] = "0123456789abcdef0";
500   static const char hexDigitsUpper[] = "0123456789ABCDEF0";
501   static const char infinityL[] = "infinity";
502   static const char infinityU[] = "INFINITY";
503   static const char NaNL[] = "nan";
504   static const char NaNU[] = "NAN";
505
506   /* Write out an integerPart in hexadecimal, starting with the most
507      significant nibble.  Write out exactly COUNT hexdigits, return
508      COUNT.  */
509   static unsigned int
510   partAsHex (char *dst, integerPart part, unsigned int count,
511              const char *hexDigitChars)
512   {
513     unsigned int result = count;
514
515     assert (count != 0 && count <= integerPartWidth / 4);
516
517     part >>= (integerPartWidth - 4 * count);
518     while (count--) {
519       dst[count] = hexDigitChars[part & 0xf];
520       part >>= 4;
521     }
522
523     return result;
524   }
525
526   /* Write out an unsigned decimal integer.  */
527   static char *
528   writeUnsignedDecimal (char *dst, unsigned int n)
529   {
530     char buff[40], *p;
531
532     p = buff;
533     do
534       *p++ = '0' + n % 10;
535     while (n /= 10);
536
537     do
538       *dst++ = *--p;
539     while (p != buff);
540
541     return dst;
542   }
543
544   /* Write out a signed decimal integer.  */
545   static char *
546   writeSignedDecimal (char *dst, int value)
547   {
548     if (value < 0) {
549       *dst++ = '-';
550       dst = writeUnsignedDecimal(dst, -(unsigned) value);
551     } else
552       dst = writeUnsignedDecimal(dst, value);
553
554     return dst;
555   }
556 }
557
558 /* Constructors.  */
559 void
560 APFloat::initialize(const fltSemantics *ourSemantics)
561 {
562   unsigned int count;
563
564   semantics = ourSemantics;
565   count = partCount();
566   if(count > 1)
567     significand.parts = new integerPart[count];
568 }
569
570 void
571 APFloat::freeSignificand()
572 {
573   if(partCount() > 1)
574     delete [] significand.parts;
575 }
576
577 void
578 APFloat::assign(const APFloat &rhs)
579 {
580   assert(semantics == rhs.semantics);
581
582   sign = rhs.sign;
583   category = rhs.category;
584   exponent = rhs.exponent;
585   sign2 = rhs.sign2;
586   exponent2 = rhs.exponent2;
587   if(category == fcNormal || category == fcNaN)
588     copySignificand(rhs);
589 }
590
591 void
592 APFloat::copySignificand(const APFloat &rhs)
593 {
594   assert(category == fcNormal || category == fcNaN);
595   assert(rhs.partCount() >= partCount());
596
597   APInt::tcAssign(significandParts(), rhs.significandParts(),
598                   partCount());
599 }
600
601 /* Make this number a NaN, with an arbitrary but deterministic value
602    for the significand.  */
603 void
604 APFloat::makeNaN(void)
605 {
606   category = fcNaN;
607   APInt::tcSet(significandParts(), ~0U, partCount());
608 }
609
610 APFloat &
611 APFloat::operator=(const APFloat &rhs)
612 {
613   if(this != &rhs) {
614     if(semantics != rhs.semantics) {
615       freeSignificand();
616       initialize(rhs.semantics);
617     }
618     assign(rhs);
619   }
620
621   return *this;
622 }
623
624 bool
625 APFloat::bitwiseIsEqual(const APFloat &rhs) const {
626   if (this == &rhs)
627     return true;
628   if (semantics != rhs.semantics ||
629       category != rhs.category ||
630       sign != rhs.sign)
631     return false;
632   if (semantics==(const llvm::fltSemantics*)&PPCDoubleDouble &&
633       sign2 != rhs.sign2)
634     return false;
635   if (category==fcZero || category==fcInfinity)
636     return true;
637   else if (category==fcNormal && exponent!=rhs.exponent)
638     return false;
639   else if (semantics==(const llvm::fltSemantics*)&PPCDoubleDouble &&
640            exponent2!=rhs.exponent2)
641     return false;
642   else {
643     int i= partCount();
644     const integerPart* p=significandParts();
645     const integerPart* q=rhs.significandParts();
646     for (; i>0; i--, p++, q++) {
647       if (*p != *q)
648         return false;
649     }
650     return true;
651   }
652 }
653
654 APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value)
655 {
656   assertArithmeticOK(ourSemantics);
657   initialize(&ourSemantics);
658   sign = 0;
659   zeroSignificand();
660   exponent = ourSemantics.precision - 1;
661   significandParts()[0] = value;
662   normalize(rmNearestTiesToEven, lfExactlyZero);
663 }
664
665 APFloat::APFloat(const fltSemantics &ourSemantics,
666                  fltCategory ourCategory, bool negative)
667 {
668   assertArithmeticOK(ourSemantics);
669   initialize(&ourSemantics);
670   category = ourCategory;
671   sign = negative;
672   if(category == fcNormal)
673     category = fcZero;
674   else if (ourCategory == fcNaN)
675     makeNaN();
676 }
677
678 APFloat::APFloat(const fltSemantics &ourSemantics, const char *text)
679 {
680   assertArithmeticOK(ourSemantics);
681   initialize(&ourSemantics);
682   convertFromString(text, rmNearestTiesToEven);
683 }
684
685 APFloat::APFloat(const APFloat &rhs)
686 {
687   initialize(rhs.semantics);
688   assign(rhs);
689 }
690
691 APFloat::~APFloat()
692 {
693   freeSignificand();
694 }
695
696 // Profile - This method 'profiles' an APFloat for use with FoldingSet.
697 void APFloat::Profile(FoldingSetNodeID& ID) const {
698   ID.Add(bitcastToAPInt());
699 }
700
701 unsigned int
702 APFloat::partCount() const
703 {
704   return partCountForBits(semantics->precision + 1);
705 }
706
707 unsigned int
708 APFloat::semanticsPrecision(const fltSemantics &semantics)
709 {
710   return semantics.precision;
711 }
712
713 const integerPart *
714 APFloat::significandParts() const
715 {
716   return const_cast<APFloat *>(this)->significandParts();
717 }
718
719 integerPart *
720 APFloat::significandParts()
721 {
722   assert(category == fcNormal || category == fcNaN);
723
724   if(partCount() > 1)
725     return significand.parts;
726   else
727     return &significand.part;
728 }
729
730 void
731 APFloat::zeroSignificand()
732 {
733   category = fcNormal;
734   APInt::tcSet(significandParts(), 0, partCount());
735 }
736
737 /* Increment an fcNormal floating point number's significand.  */
738 void
739 APFloat::incrementSignificand()
740 {
741   integerPart carry;
742
743   carry = APInt::tcIncrement(significandParts(), partCount());
744
745   /* Our callers should never cause us to overflow.  */
746   assert(carry == 0);
747 }
748
749 /* Add the significand of the RHS.  Returns the carry flag.  */
750 integerPart
751 APFloat::addSignificand(const APFloat &rhs)
752 {
753   integerPart *parts;
754
755   parts = significandParts();
756
757   assert(semantics == rhs.semantics);
758   assert(exponent == rhs.exponent);
759
760   return APInt::tcAdd(parts, rhs.significandParts(), 0, partCount());
761 }
762
763 /* Subtract the significand of the RHS with a borrow flag.  Returns
764    the borrow flag.  */
765 integerPart
766 APFloat::subtractSignificand(const APFloat &rhs, integerPart borrow)
767 {
768   integerPart *parts;
769
770   parts = significandParts();
771
772   assert(semantics == rhs.semantics);
773   assert(exponent == rhs.exponent);
774
775   return APInt::tcSubtract(parts, rhs.significandParts(), borrow,
776                            partCount());
777 }
778
779 /* Multiply the significand of the RHS.  If ADDEND is non-NULL, add it
780    on to the full-precision result of the multiplication.  Returns the
781    lost fraction.  */
782 lostFraction
783 APFloat::multiplySignificand(const APFloat &rhs, const APFloat *addend)
784 {
785   unsigned int omsb;        // One, not zero, based MSB.
786   unsigned int partsCount, newPartsCount, precision;
787   integerPart *lhsSignificand;
788   integerPart scratch[4];
789   integerPart *fullSignificand;
790   lostFraction lost_fraction;
791   bool ignored;
792
793   assert(semantics == rhs.semantics);
794
795   precision = semantics->precision;
796   newPartsCount = partCountForBits(precision * 2);
797
798   if(newPartsCount > 4)
799     fullSignificand = new integerPart[newPartsCount];
800   else
801     fullSignificand = scratch;
802
803   lhsSignificand = significandParts();
804   partsCount = partCount();
805
806   APInt::tcFullMultiply(fullSignificand, lhsSignificand,
807                         rhs.significandParts(), partsCount, partsCount);
808
809   lost_fraction = lfExactlyZero;
810   omsb = APInt::tcMSB(fullSignificand, newPartsCount) + 1;
811   exponent += rhs.exponent;
812
813   if(addend) {
814     Significand savedSignificand = significand;
815     const fltSemantics *savedSemantics = semantics;
816     fltSemantics extendedSemantics;
817     opStatus status;
818     unsigned int extendedPrecision;
819
820     /* Normalize our MSB.  */
821     extendedPrecision = precision + precision - 1;
822     if(omsb != extendedPrecision)
823       {
824         APInt::tcShiftLeft(fullSignificand, newPartsCount,
825                            extendedPrecision - omsb);
826         exponent -= extendedPrecision - omsb;
827       }
828
829     /* Create new semantics.  */
830     extendedSemantics = *semantics;
831     extendedSemantics.precision = extendedPrecision;
832
833     if(newPartsCount == 1)
834       significand.part = fullSignificand[0];
835     else
836       significand.parts = fullSignificand;
837     semantics = &extendedSemantics;
838
839     APFloat extendedAddend(*addend);
840     status = extendedAddend.convert(extendedSemantics, rmTowardZero, &ignored);
841     assert(status == opOK);
842     lost_fraction = addOrSubtractSignificand(extendedAddend, false);
843
844     /* Restore our state.  */
845     if(newPartsCount == 1)
846       fullSignificand[0] = significand.part;
847     significand = savedSignificand;
848     semantics = savedSemantics;
849
850     omsb = APInt::tcMSB(fullSignificand, newPartsCount) + 1;
851   }
852
853   exponent -= (precision - 1);
854
855   if(omsb > precision) {
856     unsigned int bits, significantParts;
857     lostFraction lf;
858
859     bits = omsb - precision;
860     significantParts = partCountForBits(omsb);
861     lf = shiftRight(fullSignificand, significantParts, bits);
862     lost_fraction = combineLostFractions(lf, lost_fraction);
863     exponent += bits;
864   }
865
866   APInt::tcAssign(lhsSignificand, fullSignificand, partsCount);
867
868   if(newPartsCount > 4)
869     delete [] fullSignificand;
870
871   return lost_fraction;
872 }
873
874 /* Multiply the significands of LHS and RHS to DST.  */
875 lostFraction
876 APFloat::divideSignificand(const APFloat &rhs)
877 {
878   unsigned int bit, i, partsCount;
879   const integerPart *rhsSignificand;
880   integerPart *lhsSignificand, *dividend, *divisor;
881   integerPart scratch[4];
882   lostFraction lost_fraction;
883
884   assert(semantics == rhs.semantics);
885
886   lhsSignificand = significandParts();
887   rhsSignificand = rhs.significandParts();
888   partsCount = partCount();
889
890   if(partsCount > 2)
891     dividend = new integerPart[partsCount * 2];
892   else
893     dividend = scratch;
894
895   divisor = dividend + partsCount;
896
897   /* Copy the dividend and divisor as they will be modified in-place.  */
898   for(i = 0; i < partsCount; i++) {
899     dividend[i] = lhsSignificand[i];
900     divisor[i] = rhsSignificand[i];
901     lhsSignificand[i] = 0;
902   }
903
904   exponent -= rhs.exponent;
905
906   unsigned int precision = semantics->precision;
907
908   /* Normalize the divisor.  */
909   bit = precision - APInt::tcMSB(divisor, partsCount) - 1;
910   if(bit) {
911     exponent += bit;
912     APInt::tcShiftLeft(divisor, partsCount, bit);
913   }
914
915   /* Normalize the dividend.  */
916   bit = precision - APInt::tcMSB(dividend, partsCount) - 1;
917   if(bit) {
918     exponent -= bit;
919     APInt::tcShiftLeft(dividend, partsCount, bit);
920   }
921
922   /* Ensure the dividend >= divisor initially for the loop below.
923      Incidentally, this means that the division loop below is
924      guaranteed to set the integer bit to one.  */
925   if(APInt::tcCompare(dividend, divisor, partsCount) < 0) {
926     exponent--;
927     APInt::tcShiftLeft(dividend, partsCount, 1);
928     assert(APInt::tcCompare(dividend, divisor, partsCount) >= 0);
929   }
930
931   /* Long division.  */
932   for(bit = precision; bit; bit -= 1) {
933     if(APInt::tcCompare(dividend, divisor, partsCount) >= 0) {
934       APInt::tcSubtract(dividend, divisor, 0, partsCount);
935       APInt::tcSetBit(lhsSignificand, bit - 1);
936     }
937
938     APInt::tcShiftLeft(dividend, partsCount, 1);
939   }
940
941   /* Figure out the lost fraction.  */
942   int cmp = APInt::tcCompare(dividend, divisor, partsCount);
943
944   if(cmp > 0)
945     lost_fraction = lfMoreThanHalf;
946   else if(cmp == 0)
947     lost_fraction = lfExactlyHalf;
948   else if(APInt::tcIsZero(dividend, partsCount))
949     lost_fraction = lfExactlyZero;
950   else
951     lost_fraction = lfLessThanHalf;
952
953   if(partsCount > 2)
954     delete [] dividend;
955
956   return lost_fraction;
957 }
958
959 unsigned int
960 APFloat::significandMSB() const
961 {
962   return APInt::tcMSB(significandParts(), partCount());
963 }
964
965 unsigned int
966 APFloat::significandLSB() const
967 {
968   return APInt::tcLSB(significandParts(), partCount());
969 }
970
971 /* Note that a zero result is NOT normalized to fcZero.  */
972 lostFraction
973 APFloat::shiftSignificandRight(unsigned int bits)
974 {
975   /* Our exponent should not overflow.  */
976   assert((exponent_t) (exponent + bits) >= exponent);
977
978   exponent += bits;
979
980   return shiftRight(significandParts(), partCount(), bits);
981 }
982
983 /* Shift the significand left BITS bits, subtract BITS from its exponent.  */
984 void
985 APFloat::shiftSignificandLeft(unsigned int bits)
986 {
987   assert(bits < semantics->precision);
988
989   if(bits) {
990     unsigned int partsCount = partCount();
991
992     APInt::tcShiftLeft(significandParts(), partsCount, bits);
993     exponent -= bits;
994
995     assert(!APInt::tcIsZero(significandParts(), partsCount));
996   }
997 }
998
999 APFloat::cmpResult
1000 APFloat::compareAbsoluteValue(const APFloat &rhs) const
1001 {
1002   int compare;
1003
1004   assert(semantics == rhs.semantics);
1005   assert(category == fcNormal);
1006   assert(rhs.category == fcNormal);
1007
1008   compare = exponent - rhs.exponent;
1009
1010   /* If exponents are equal, do an unsigned bignum comparison of the
1011      significands.  */
1012   if(compare == 0)
1013     compare = APInt::tcCompare(significandParts(), rhs.significandParts(),
1014                                partCount());
1015
1016   if(compare > 0)
1017     return cmpGreaterThan;
1018   else if(compare < 0)
1019     return cmpLessThan;
1020   else
1021     return cmpEqual;
1022 }
1023
1024 /* Handle overflow.  Sign is preserved.  We either become infinity or
1025    the largest finite number.  */
1026 APFloat::opStatus
1027 APFloat::handleOverflow(roundingMode rounding_mode)
1028 {
1029   /* Infinity?  */
1030   if(rounding_mode == rmNearestTiesToEven
1031      || rounding_mode == rmNearestTiesToAway
1032      || (rounding_mode == rmTowardPositive && !sign)
1033      || (rounding_mode == rmTowardNegative && sign))
1034     {
1035       category = fcInfinity;
1036       return (opStatus) (opOverflow | opInexact);
1037     }
1038
1039   /* Otherwise we become the largest finite number.  */
1040   category = fcNormal;
1041   exponent = semantics->maxExponent;
1042   APInt::tcSetLeastSignificantBits(significandParts(), partCount(),
1043                                    semantics->precision);
1044
1045   return opInexact;
1046 }
1047
1048 /* Returns TRUE if, when truncating the current number, with BIT the
1049    new LSB, with the given lost fraction and rounding mode, the result
1050    would need to be rounded away from zero (i.e., by increasing the
1051    signficand).  This routine must work for fcZero of both signs, and
1052    fcNormal numbers.  */
1053 bool
1054 APFloat::roundAwayFromZero(roundingMode rounding_mode,
1055                            lostFraction lost_fraction,
1056                            unsigned int bit) const
1057 {
1058   /* NaNs and infinities should not have lost fractions.  */
1059   assert(category == fcNormal || category == fcZero);
1060
1061   /* Current callers never pass this so we don't handle it.  */
1062   assert(lost_fraction != lfExactlyZero);
1063
1064   switch(rounding_mode) {
1065   default:
1066     assert(0);
1067
1068   case rmNearestTiesToAway:
1069     return lost_fraction == lfExactlyHalf || lost_fraction == lfMoreThanHalf;
1070
1071   case rmNearestTiesToEven:
1072     if(lost_fraction == lfMoreThanHalf)
1073       return true;
1074
1075     /* Our zeroes don't have a significand to test.  */
1076     if(lost_fraction == lfExactlyHalf && category != fcZero)
1077       return APInt::tcExtractBit(significandParts(), bit);
1078
1079     return false;
1080
1081   case rmTowardZero:
1082     return false;
1083
1084   case rmTowardPositive:
1085     return sign == false;
1086
1087   case rmTowardNegative:
1088     return sign == true;
1089   }
1090 }
1091
1092 APFloat::opStatus
1093 APFloat::normalize(roundingMode rounding_mode,
1094                    lostFraction lost_fraction)
1095 {
1096   unsigned int omsb;                /* One, not zero, based MSB.  */
1097   int exponentChange;
1098
1099   if(category != fcNormal)
1100     return opOK;
1101
1102   /* Before rounding normalize the exponent of fcNormal numbers.  */
1103   omsb = significandMSB() + 1;
1104
1105   if(omsb) {
1106     /* OMSB is numbered from 1.  We want to place it in the integer
1107        bit numbered PRECISON if possible, with a compensating change in
1108        the exponent.  */
1109     exponentChange = omsb - semantics->precision;
1110
1111     /* If the resulting exponent is too high, overflow according to
1112        the rounding mode.  */
1113     if(exponent + exponentChange > semantics->maxExponent)
1114       return handleOverflow(rounding_mode);
1115
1116     /* Subnormal numbers have exponent minExponent, and their MSB
1117        is forced based on that.  */
1118     if(exponent + exponentChange < semantics->minExponent)
1119       exponentChange = semantics->minExponent - exponent;
1120
1121     /* Shifting left is easy as we don't lose precision.  */
1122     if(exponentChange < 0) {
1123       assert(lost_fraction == lfExactlyZero);
1124
1125       shiftSignificandLeft(-exponentChange);
1126
1127       return opOK;
1128     }
1129
1130     if(exponentChange > 0) {
1131       lostFraction lf;
1132
1133       /* Shift right and capture any new lost fraction.  */
1134       lf = shiftSignificandRight(exponentChange);
1135
1136       lost_fraction = combineLostFractions(lf, lost_fraction);
1137
1138       /* Keep OMSB up-to-date.  */
1139       if(omsb > (unsigned) exponentChange)
1140         omsb -= exponentChange;
1141       else
1142         omsb = 0;
1143     }
1144   }
1145
1146   /* Now round the number according to rounding_mode given the lost
1147      fraction.  */
1148
1149   /* As specified in IEEE 754, since we do not trap we do not report
1150      underflow for exact results.  */
1151   if(lost_fraction == lfExactlyZero) {
1152     /* Canonicalize zeroes.  */
1153     if(omsb == 0)
1154       category = fcZero;
1155
1156     return opOK;
1157   }
1158
1159   /* Increment the significand if we're rounding away from zero.  */
1160   if(roundAwayFromZero(rounding_mode, lost_fraction, 0)) {
1161     if(omsb == 0)
1162       exponent = semantics->minExponent;
1163
1164     incrementSignificand();
1165     omsb = significandMSB() + 1;
1166
1167     /* Did the significand increment overflow?  */
1168     if(omsb == (unsigned) semantics->precision + 1) {
1169       /* Renormalize by incrementing the exponent and shifting our
1170          significand right one.  However if we already have the
1171          maximum exponent we overflow to infinity.  */
1172       if(exponent == semantics->maxExponent) {
1173         category = fcInfinity;
1174
1175         return (opStatus) (opOverflow | opInexact);
1176       }
1177
1178       shiftSignificandRight(1);
1179
1180       return opInexact;
1181     }
1182   }
1183
1184   /* The normal case - we were and are not denormal, and any
1185      significand increment above didn't overflow.  */
1186   if(omsb == semantics->precision)
1187     return opInexact;
1188
1189   /* We have a non-zero denormal.  */
1190   assert(omsb < semantics->precision);
1191
1192   /* Canonicalize zeroes.  */
1193   if(omsb == 0)
1194     category = fcZero;
1195
1196   /* The fcZero case is a denormal that underflowed to zero.  */
1197   return (opStatus) (opUnderflow | opInexact);
1198 }
1199
1200 APFloat::opStatus
1201 APFloat::addOrSubtractSpecials(const APFloat &rhs, bool subtract)
1202 {
1203   switch(convolve(category, rhs.category)) {
1204   default:
1205     assert(0);
1206
1207   case convolve(fcNaN, fcZero):
1208   case convolve(fcNaN, fcNormal):
1209   case convolve(fcNaN, fcInfinity):
1210   case convolve(fcNaN, fcNaN):
1211   case convolve(fcNormal, fcZero):
1212   case convolve(fcInfinity, fcNormal):
1213   case convolve(fcInfinity, fcZero):
1214     return opOK;
1215
1216   case convolve(fcZero, fcNaN):
1217   case convolve(fcNormal, fcNaN):
1218   case convolve(fcInfinity, fcNaN):
1219     category = fcNaN;
1220     copySignificand(rhs);
1221     return opOK;
1222
1223   case convolve(fcNormal, fcInfinity):
1224   case convolve(fcZero, fcInfinity):
1225     category = fcInfinity;
1226     sign = rhs.sign ^ subtract;
1227     return opOK;
1228
1229   case convolve(fcZero, fcNormal):
1230     assign(rhs);
1231     sign = rhs.sign ^ subtract;
1232     return opOK;
1233
1234   case convolve(fcZero, fcZero):
1235     /* Sign depends on rounding mode; handled by caller.  */
1236     return opOK;
1237
1238   case convolve(fcInfinity, fcInfinity):
1239     /* Differently signed infinities can only be validly
1240        subtracted.  */
1241     if((sign ^ rhs.sign) != subtract) {
1242       makeNaN();
1243       return opInvalidOp;
1244     }
1245
1246     return opOK;
1247
1248   case convolve(fcNormal, fcNormal):
1249     return opDivByZero;
1250   }
1251 }
1252
1253 /* Add or subtract two normal numbers.  */
1254 lostFraction
1255 APFloat::addOrSubtractSignificand(const APFloat &rhs, bool subtract)
1256 {
1257   integerPart carry;
1258   lostFraction lost_fraction;
1259   int bits;
1260
1261   /* Determine if the operation on the absolute values is effectively
1262      an addition or subtraction.  */
1263   subtract ^= (sign ^ rhs.sign) ? true : false;
1264
1265   /* Are we bigger exponent-wise than the RHS?  */
1266   bits = exponent - rhs.exponent;
1267
1268   /* Subtraction is more subtle than one might naively expect.  */
1269   if(subtract) {
1270     APFloat temp_rhs(rhs);
1271     bool reverse;
1272
1273     if (bits == 0) {
1274       reverse = compareAbsoluteValue(temp_rhs) == cmpLessThan;
1275       lost_fraction = lfExactlyZero;
1276     } else if (bits > 0) {
1277       lost_fraction = temp_rhs.shiftSignificandRight(bits - 1);
1278       shiftSignificandLeft(1);
1279       reverse = false;
1280     } else {
1281       lost_fraction = shiftSignificandRight(-bits - 1);
1282       temp_rhs.shiftSignificandLeft(1);
1283       reverse = true;
1284     }
1285
1286     if (reverse) {
1287       carry = temp_rhs.subtractSignificand
1288         (*this, lost_fraction != lfExactlyZero);
1289       copySignificand(temp_rhs);
1290       sign = !sign;
1291     } else {
1292       carry = subtractSignificand
1293         (temp_rhs, lost_fraction != lfExactlyZero);
1294     }
1295
1296     /* Invert the lost fraction - it was on the RHS and
1297        subtracted.  */
1298     if(lost_fraction == lfLessThanHalf)
1299       lost_fraction = lfMoreThanHalf;
1300     else if(lost_fraction == lfMoreThanHalf)
1301       lost_fraction = lfLessThanHalf;
1302
1303     /* The code above is intended to ensure that no borrow is
1304        necessary.  */
1305     assert(!carry);
1306   } else {
1307     if(bits > 0) {
1308       APFloat temp_rhs(rhs);
1309
1310       lost_fraction = temp_rhs.shiftSignificandRight(bits);
1311       carry = addSignificand(temp_rhs);
1312     } else {
1313       lost_fraction = shiftSignificandRight(-bits);
1314       carry = addSignificand(rhs);
1315     }
1316
1317     /* We have a guard bit; generating a carry cannot happen.  */
1318     assert(!carry);
1319   }
1320
1321   return lost_fraction;
1322 }
1323
1324 APFloat::opStatus
1325 APFloat::multiplySpecials(const APFloat &rhs)
1326 {
1327   switch(convolve(category, rhs.category)) {
1328   default:
1329     assert(0);
1330
1331   case convolve(fcNaN, fcZero):
1332   case convolve(fcNaN, fcNormal):
1333   case convolve(fcNaN, fcInfinity):
1334   case convolve(fcNaN, fcNaN):
1335     return opOK;
1336
1337   case convolve(fcZero, fcNaN):
1338   case convolve(fcNormal, fcNaN):
1339   case convolve(fcInfinity, fcNaN):
1340     category = fcNaN;
1341     copySignificand(rhs);
1342     return opOK;
1343
1344   case convolve(fcNormal, fcInfinity):
1345   case convolve(fcInfinity, fcNormal):
1346   case convolve(fcInfinity, fcInfinity):
1347     category = fcInfinity;
1348     return opOK;
1349
1350   case convolve(fcZero, fcNormal):
1351   case convolve(fcNormal, fcZero):
1352   case convolve(fcZero, fcZero):
1353     category = fcZero;
1354     return opOK;
1355
1356   case convolve(fcZero, fcInfinity):
1357   case convolve(fcInfinity, fcZero):
1358     makeNaN();
1359     return opInvalidOp;
1360
1361   case convolve(fcNormal, fcNormal):
1362     return opOK;
1363   }
1364 }
1365
1366 APFloat::opStatus
1367 APFloat::divideSpecials(const APFloat &rhs)
1368 {
1369   switch(convolve(category, rhs.category)) {
1370   default:
1371     assert(0);
1372
1373   case convolve(fcNaN, fcZero):
1374   case convolve(fcNaN, fcNormal):
1375   case convolve(fcNaN, fcInfinity):
1376   case convolve(fcNaN, fcNaN):
1377   case convolve(fcInfinity, fcZero):
1378   case convolve(fcInfinity, fcNormal):
1379   case convolve(fcZero, fcInfinity):
1380   case convolve(fcZero, fcNormal):
1381     return opOK;
1382
1383   case convolve(fcZero, fcNaN):
1384   case convolve(fcNormal, fcNaN):
1385   case convolve(fcInfinity, fcNaN):
1386     category = fcNaN;
1387     copySignificand(rhs);
1388     return opOK;
1389
1390   case convolve(fcNormal, fcInfinity):
1391     category = fcZero;
1392     return opOK;
1393
1394   case convolve(fcNormal, fcZero):
1395     category = fcInfinity;
1396     return opDivByZero;
1397
1398   case convolve(fcInfinity, fcInfinity):
1399   case convolve(fcZero, fcZero):
1400     makeNaN();
1401     return opInvalidOp;
1402
1403   case convolve(fcNormal, fcNormal):
1404     return opOK;
1405   }
1406 }
1407
1408 APFloat::opStatus
1409 APFloat::modSpecials(const APFloat &rhs)
1410 {
1411   switch(convolve(category, rhs.category)) {
1412   default:
1413     assert(0);
1414
1415   case convolve(fcNaN, fcZero):
1416   case convolve(fcNaN, fcNormal):
1417   case convolve(fcNaN, fcInfinity):
1418   case convolve(fcNaN, fcNaN):
1419   case convolve(fcZero, fcInfinity):
1420   case convolve(fcZero, fcNormal):
1421   case convolve(fcNormal, fcInfinity):
1422     return opOK;
1423
1424   case convolve(fcZero, fcNaN):
1425   case convolve(fcNormal, fcNaN):
1426   case convolve(fcInfinity, fcNaN):
1427     category = fcNaN;
1428     copySignificand(rhs);
1429     return opOK;
1430
1431   case convolve(fcNormal, fcZero):
1432   case convolve(fcInfinity, fcZero):
1433   case convolve(fcInfinity, fcNormal):
1434   case convolve(fcInfinity, fcInfinity):
1435   case convolve(fcZero, fcZero):
1436     makeNaN();
1437     return opInvalidOp;
1438
1439   case convolve(fcNormal, fcNormal):
1440     return opOK;
1441   }
1442 }
1443
1444 /* Change sign.  */
1445 void
1446 APFloat::changeSign()
1447 {
1448   /* Look mummy, this one's easy.  */
1449   sign = !sign;
1450 }
1451
1452 void
1453 APFloat::clearSign()
1454 {
1455   /* So is this one. */
1456   sign = 0;
1457 }
1458
1459 void
1460 APFloat::copySign(const APFloat &rhs)
1461 {
1462   /* And this one. */
1463   sign = rhs.sign;
1464 }
1465
1466 /* Normalized addition or subtraction.  */
1467 APFloat::opStatus
1468 APFloat::addOrSubtract(const APFloat &rhs, roundingMode rounding_mode,
1469                        bool subtract)
1470 {
1471   opStatus fs;
1472
1473   assertArithmeticOK(*semantics);
1474
1475   fs = addOrSubtractSpecials(rhs, subtract);
1476
1477   /* This return code means it was not a simple case.  */
1478   if(fs == opDivByZero) {
1479     lostFraction lost_fraction;
1480
1481     lost_fraction = addOrSubtractSignificand(rhs, subtract);
1482     fs = normalize(rounding_mode, lost_fraction);
1483
1484     /* Can only be zero if we lost no fraction.  */
1485     assert(category != fcZero || lost_fraction == lfExactlyZero);
1486   }
1487
1488   /* If two numbers add (exactly) to zero, IEEE 754 decrees it is a
1489      positive zero unless rounding to minus infinity, except that
1490      adding two like-signed zeroes gives that zero.  */
1491   if(category == fcZero) {
1492     if(rhs.category != fcZero || (sign == rhs.sign) == subtract)
1493       sign = (rounding_mode == rmTowardNegative);
1494   }
1495
1496   return fs;
1497 }
1498
1499 /* Normalized addition.  */
1500 APFloat::opStatus
1501 APFloat::add(const APFloat &rhs, roundingMode rounding_mode)
1502 {
1503   return addOrSubtract(rhs, rounding_mode, false);
1504 }
1505
1506 /* Normalized subtraction.  */
1507 APFloat::opStatus
1508 APFloat::subtract(const APFloat &rhs, roundingMode rounding_mode)
1509 {
1510   return addOrSubtract(rhs, rounding_mode, true);
1511 }
1512
1513 /* Normalized multiply.  */
1514 APFloat::opStatus
1515 APFloat::multiply(const APFloat &rhs, roundingMode rounding_mode)
1516 {
1517   opStatus fs;
1518
1519   assertArithmeticOK(*semantics);
1520   sign ^= rhs.sign;
1521   fs = multiplySpecials(rhs);
1522
1523   if(category == fcNormal) {
1524     lostFraction lost_fraction = multiplySignificand(rhs, 0);
1525     fs = normalize(rounding_mode, lost_fraction);
1526     if(lost_fraction != lfExactlyZero)
1527       fs = (opStatus) (fs | opInexact);
1528   }
1529
1530   return fs;
1531 }
1532
1533 /* Normalized divide.  */
1534 APFloat::opStatus
1535 APFloat::divide(const APFloat &rhs, roundingMode rounding_mode)
1536 {
1537   opStatus fs;
1538
1539   assertArithmeticOK(*semantics);
1540   sign ^= rhs.sign;
1541   fs = divideSpecials(rhs);
1542
1543   if(category == fcNormal) {
1544     lostFraction lost_fraction = divideSignificand(rhs);
1545     fs = normalize(rounding_mode, lost_fraction);
1546     if(lost_fraction != lfExactlyZero)
1547       fs = (opStatus) (fs | opInexact);
1548   }
1549
1550   return fs;
1551 }
1552
1553 /* Normalized remainder.  This is not currently correct in all cases.  */
1554 APFloat::opStatus
1555 APFloat::remainder(const APFloat &rhs)
1556 {
1557   opStatus fs;
1558   APFloat V = *this;
1559   unsigned int origSign = sign;
1560
1561   assertArithmeticOK(*semantics);
1562   fs = V.divide(rhs, rmNearestTiesToEven);
1563   if (fs == opDivByZero)
1564     return fs;
1565
1566   int parts = partCount();
1567   integerPart *x = new integerPart[parts];
1568   bool ignored;
1569   fs = V.convertToInteger(x, parts * integerPartWidth, true,
1570                           rmNearestTiesToEven, &ignored);
1571   if (fs==opInvalidOp)
1572     return fs;
1573
1574   fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true,
1575                                         rmNearestTiesToEven);
1576   assert(fs==opOK);   // should always work
1577
1578   fs = V.multiply(rhs, rmNearestTiesToEven);
1579   assert(fs==opOK || fs==opInexact);   // should not overflow or underflow
1580
1581   fs = subtract(V, rmNearestTiesToEven);
1582   assert(fs==opOK || fs==opInexact);   // likewise
1583
1584   if (isZero())
1585     sign = origSign;    // IEEE754 requires this
1586   delete[] x;
1587   return fs;
1588 }
1589
1590 /* Normalized llvm frem (C fmod).  
1591    This is not currently correct in all cases.  */
1592 APFloat::opStatus
1593 APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
1594 {
1595   opStatus fs;
1596   assertArithmeticOK(*semantics);
1597   fs = modSpecials(rhs);
1598
1599   if (category == fcNormal && rhs.category == fcNormal) {
1600     APFloat V = *this;
1601     unsigned int origSign = sign;
1602
1603     fs = V.divide(rhs, rmNearestTiesToEven);
1604     if (fs == opDivByZero)
1605       return fs;
1606
1607     int parts = partCount();
1608     integerPart *x = new integerPart[parts];
1609     bool ignored;
1610     fs = V.convertToInteger(x, parts * integerPartWidth, true,
1611                             rmTowardZero, &ignored);
1612     if (fs==opInvalidOp)
1613       return fs;
1614
1615     fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true,
1616                                           rmNearestTiesToEven);
1617     assert(fs==opOK);   // should always work
1618
1619     fs = V.multiply(rhs, rounding_mode);
1620     assert(fs==opOK || fs==opInexact);   // should not overflow or underflow
1621
1622     fs = subtract(V, rounding_mode);
1623     assert(fs==opOK || fs==opInexact);   // likewise
1624
1625     if (isZero())
1626       sign = origSign;    // IEEE754 requires this
1627     delete[] x;
1628   }
1629   return fs;
1630 }
1631
1632 /* Normalized fused-multiply-add.  */
1633 APFloat::opStatus
1634 APFloat::fusedMultiplyAdd(const APFloat &multiplicand,
1635                           const APFloat &addend,
1636                           roundingMode rounding_mode)
1637 {
1638   opStatus fs;
1639
1640   assertArithmeticOK(*semantics);
1641
1642   /* Post-multiplication sign, before addition.  */
1643   sign ^= multiplicand.sign;
1644
1645   /* If and only if all arguments are normal do we need to do an
1646      extended-precision calculation.  */
1647   if(category == fcNormal
1648      && multiplicand.category == fcNormal
1649      && addend.category == fcNormal) {
1650     lostFraction lost_fraction;
1651
1652     lost_fraction = multiplySignificand(multiplicand, &addend);
1653     fs = normalize(rounding_mode, lost_fraction);
1654     if(lost_fraction != lfExactlyZero)
1655       fs = (opStatus) (fs | opInexact);
1656
1657     /* If two numbers add (exactly) to zero, IEEE 754 decrees it is a
1658        positive zero unless rounding to minus infinity, except that
1659        adding two like-signed zeroes gives that zero.  */
1660     if(category == fcZero && sign != addend.sign)
1661       sign = (rounding_mode == rmTowardNegative);
1662   } else {
1663     fs = multiplySpecials(multiplicand);
1664
1665     /* FS can only be opOK or opInvalidOp.  There is no more work
1666        to do in the latter case.  The IEEE-754R standard says it is
1667        implementation-defined in this case whether, if ADDEND is a
1668        quiet NaN, we raise invalid op; this implementation does so.
1669
1670        If we need to do the addition we can do so with normal
1671        precision.  */
1672     if(fs == opOK)
1673       fs = addOrSubtract(addend, rounding_mode, false);
1674   }
1675
1676   return fs;
1677 }
1678
1679 /* Comparison requires normalized numbers.  */
1680 APFloat::cmpResult
1681 APFloat::compare(const APFloat &rhs) const
1682 {
1683   cmpResult result;
1684
1685   assertArithmeticOK(*semantics);
1686   assert(semantics == rhs.semantics);
1687
1688   switch(convolve(category, rhs.category)) {
1689   default:
1690     assert(0);
1691
1692   case convolve(fcNaN, fcZero):
1693   case convolve(fcNaN, fcNormal):
1694   case convolve(fcNaN, fcInfinity):
1695   case convolve(fcNaN, fcNaN):
1696   case convolve(fcZero, fcNaN):
1697   case convolve(fcNormal, fcNaN):
1698   case convolve(fcInfinity, fcNaN):
1699     return cmpUnordered;
1700
1701   case convolve(fcInfinity, fcNormal):
1702   case convolve(fcInfinity, fcZero):
1703   case convolve(fcNormal, fcZero):
1704     if(sign)
1705       return cmpLessThan;
1706     else
1707       return cmpGreaterThan;
1708
1709   case convolve(fcNormal, fcInfinity):
1710   case convolve(fcZero, fcInfinity):
1711   case convolve(fcZero, fcNormal):
1712     if(rhs.sign)
1713       return cmpGreaterThan;
1714     else
1715       return cmpLessThan;
1716
1717   case convolve(fcInfinity, fcInfinity):
1718     if(sign == rhs.sign)
1719       return cmpEqual;
1720     else if(sign)
1721       return cmpLessThan;
1722     else
1723       return cmpGreaterThan;
1724
1725   case convolve(fcZero, fcZero):
1726     return cmpEqual;
1727
1728   case convolve(fcNormal, fcNormal):
1729     break;
1730   }
1731
1732   /* Two normal numbers.  Do they have the same sign?  */
1733   if(sign != rhs.sign) {
1734     if(sign)
1735       result = cmpLessThan;
1736     else
1737       result = cmpGreaterThan;
1738   } else {
1739     /* Compare absolute values; invert result if negative.  */
1740     result = compareAbsoluteValue(rhs);
1741
1742     if(sign) {
1743       if(result == cmpLessThan)
1744         result = cmpGreaterThan;
1745       else if(result == cmpGreaterThan)
1746         result = cmpLessThan;
1747     }
1748   }
1749
1750   return result;
1751 }
1752
1753 /// APFloat::convert - convert a value of one floating point type to another.
1754 /// The return value corresponds to the IEEE754 exceptions.  *losesInfo
1755 /// records whether the transformation lost information, i.e. whether
1756 /// converting the result back to the original type will produce the
1757 /// original value (this is almost the same as return value==fsOK, but there
1758 /// are edge cases where this is not so).
1759
1760 APFloat::opStatus
1761 APFloat::convert(const fltSemantics &toSemantics,
1762                  roundingMode rounding_mode, bool *losesInfo)
1763 {
1764   lostFraction lostFraction;
1765   unsigned int newPartCount, oldPartCount;
1766   opStatus fs;
1767
1768   assertArithmeticOK(*semantics);
1769   assertArithmeticOK(toSemantics);
1770   lostFraction = lfExactlyZero;
1771   newPartCount = partCountForBits(toSemantics.precision + 1);
1772   oldPartCount = partCount();
1773
1774   /* Handle storage complications.  If our new form is wider,
1775      re-allocate our bit pattern into wider storage.  If it is
1776      narrower, we ignore the excess parts, but if narrowing to a
1777      single part we need to free the old storage.
1778      Be careful not to reference significandParts for zeroes
1779      and infinities, since it aborts.  */
1780   if (newPartCount > oldPartCount) {
1781     integerPart *newParts;
1782     newParts = new integerPart[newPartCount];
1783     APInt::tcSet(newParts, 0, newPartCount);
1784     if (category==fcNormal || category==fcNaN)
1785       APInt::tcAssign(newParts, significandParts(), oldPartCount);
1786     freeSignificand();
1787     significand.parts = newParts;
1788   } else if (newPartCount < oldPartCount) {
1789     /* Capture any lost fraction through truncation of parts so we get
1790        correct rounding whilst normalizing.  */
1791     if (category==fcNormal)
1792       lostFraction = lostFractionThroughTruncation
1793         (significandParts(), oldPartCount, toSemantics.precision);
1794     if (newPartCount == 1) {
1795         integerPart newPart = 0;
1796         if (category==fcNormal || category==fcNaN)
1797           newPart = significandParts()[0];
1798         freeSignificand();
1799         significand.part = newPart;
1800     }
1801   }
1802
1803   if(category == fcNormal) {
1804     /* Re-interpret our bit-pattern.  */
1805     exponent += toSemantics.precision - semantics->precision;
1806     semantics = &toSemantics;
1807     fs = normalize(rounding_mode, lostFraction);
1808     *losesInfo = (fs != opOK);
1809   } else if (category == fcNaN) {
1810     int shift = toSemantics.precision - semantics->precision;
1811     // Do this now so significandParts gets the right answer
1812     const fltSemantics *oldSemantics = semantics;
1813     semantics = &toSemantics;
1814     *losesInfo = false;
1815     // No normalization here, just truncate
1816     if (shift>0)
1817       APInt::tcShiftLeft(significandParts(), newPartCount, shift);
1818     else if (shift < 0) {
1819       unsigned ushift = -shift;
1820       // Figure out if we are losing information.  This happens
1821       // if are shifting out something other than 0s, or if the x87 long
1822       // double input did not have its integer bit set (pseudo-NaN), or if the
1823       // x87 long double input did not have its QNan bit set (because the x87
1824       // hardware sets this bit when converting a lower-precision NaN to
1825       // x87 long double).
1826       if (APInt::tcLSB(significandParts(), newPartCount) < ushift)
1827         *losesInfo = true;
1828       if (oldSemantics == &APFloat::x87DoubleExtended && 
1829           (!(*significandParts() & 0x8000000000000000ULL) ||
1830            !(*significandParts() & 0x4000000000000000ULL)))
1831         *losesInfo = true;
1832       APInt::tcShiftRight(significandParts(), newPartCount, ushift);
1833     }
1834     // gcc forces the Quiet bit on, which means (float)(double)(float_sNan)
1835     // does not give you back the same bits.  This is dubious, and we
1836     // don't currently do it.  You're really supposed to get
1837     // an invalid operation signal at runtime, but nobody does that.
1838     fs = opOK;
1839   } else {
1840     semantics = &toSemantics;
1841     fs = opOK;
1842     *losesInfo = false;
1843   }
1844
1845   return fs;
1846 }
1847
1848 /* Convert a floating point number to an integer according to the
1849    rounding mode.  If the rounded integer value is out of range this
1850    returns an invalid operation exception and the contents of the
1851    destination parts are unspecified.  If the rounded value is in
1852    range but the floating point number is not the exact integer, the C
1853    standard doesn't require an inexact exception to be raised.  IEEE
1854    854 does require it so we do that.
1855
1856    Note that for conversions to integer type the C standard requires
1857    round-to-zero to always be used.  */
1858 APFloat::opStatus
1859 APFloat::convertToSignExtendedInteger(integerPart *parts, unsigned int width,
1860                                       bool isSigned,
1861                                       roundingMode rounding_mode,
1862                                       bool *isExact) const
1863 {
1864   lostFraction lost_fraction;
1865   const integerPart *src;
1866   unsigned int dstPartsCount, truncatedBits;
1867
1868   assertArithmeticOK(*semantics);
1869
1870   *isExact = false;
1871
1872   /* Handle the three special cases first.  */
1873   if(category == fcInfinity || category == fcNaN)
1874     return opInvalidOp;
1875
1876   dstPartsCount = partCountForBits(width);
1877
1878   if(category == fcZero) {
1879     APInt::tcSet(parts, 0, dstPartsCount);
1880     // Negative zero can't be represented as an int.
1881     *isExact = !sign;
1882     return opOK;
1883   }
1884
1885   src = significandParts();
1886
1887   /* Step 1: place our absolute value, with any fraction truncated, in
1888      the destination.  */
1889   if (exponent < 0) {
1890     /* Our absolute value is less than one; truncate everything.  */
1891     APInt::tcSet(parts, 0, dstPartsCount);
1892     /* For exponent -1 the integer bit represents .5, look at that.
1893        For smaller exponents leftmost truncated bit is 0. */
1894     truncatedBits = semantics->precision -1U - exponent;
1895   } else {
1896     /* We want the most significant (exponent + 1) bits; the rest are
1897        truncated.  */
1898     unsigned int bits = exponent + 1U;
1899
1900     /* Hopelessly large in magnitude?  */
1901     if (bits > width)
1902       return opInvalidOp;
1903
1904     if (bits < semantics->precision) {
1905       /* We truncate (semantics->precision - bits) bits.  */
1906       truncatedBits = semantics->precision - bits;
1907       APInt::tcExtract(parts, dstPartsCount, src, bits, truncatedBits);
1908     } else {
1909       /* We want at least as many bits as are available.  */
1910       APInt::tcExtract(parts, dstPartsCount, src, semantics->precision, 0);
1911       APInt::tcShiftLeft(parts, dstPartsCount, bits - semantics->precision);
1912       truncatedBits = 0;
1913     }
1914   }
1915
1916   /* Step 2: work out any lost fraction, and increment the absolute
1917      value if we would round away from zero.  */
1918   if (truncatedBits) {
1919     lost_fraction = lostFractionThroughTruncation(src, partCount(),
1920                                                   truncatedBits);
1921     if (lost_fraction != lfExactlyZero
1922         && roundAwayFromZero(rounding_mode, lost_fraction, truncatedBits)) {
1923       if (APInt::tcIncrement(parts, dstPartsCount))
1924         return opInvalidOp;     /* Overflow.  */
1925     }
1926   } else {
1927     lost_fraction = lfExactlyZero;
1928   }
1929
1930   /* Step 3: check if we fit in the destination.  */
1931   unsigned int omsb = APInt::tcMSB(parts, dstPartsCount) + 1;
1932
1933   if (sign) {
1934     if (!isSigned) {
1935       /* Negative numbers cannot be represented as unsigned.  */
1936       if (omsb != 0)
1937         return opInvalidOp;
1938     } else {
1939       /* It takes omsb bits to represent the unsigned integer value.
1940          We lose a bit for the sign, but care is needed as the
1941          maximally negative integer is a special case.  */
1942       if (omsb == width && APInt::tcLSB(parts, dstPartsCount) + 1 != omsb)
1943         return opInvalidOp;
1944
1945       /* This case can happen because of rounding.  */
1946       if (omsb > width)
1947         return opInvalidOp;
1948     }
1949
1950     APInt::tcNegate (parts, dstPartsCount);
1951   } else {
1952     if (omsb >= width + !isSigned)
1953       return opInvalidOp;
1954   }
1955
1956   if (lost_fraction == lfExactlyZero) {
1957     *isExact = true;
1958     return opOK;
1959   } else
1960     return opInexact;
1961 }
1962
1963 /* Same as convertToSignExtendedInteger, except we provide
1964    deterministic values in case of an invalid operation exception,
1965    namely zero for NaNs and the minimal or maximal value respectively
1966    for underflow or overflow.
1967    The *isExact output tells whether the result is exact, in the sense
1968    that converting it back to the original floating point type produces
1969    the original value.  This is almost equivalent to result==opOK,
1970    except for negative zeroes.
1971 */
1972 APFloat::opStatus
1973 APFloat::convertToInteger(integerPart *parts, unsigned int width,
1974                           bool isSigned,
1975                           roundingMode rounding_mode, bool *isExact) const
1976 {
1977   opStatus fs;
1978
1979   fs = convertToSignExtendedInteger(parts, width, isSigned, rounding_mode, 
1980                                     isExact);
1981
1982   if (fs == opInvalidOp) {
1983     unsigned int bits, dstPartsCount;
1984
1985     dstPartsCount = partCountForBits(width);
1986
1987     if (category == fcNaN)
1988       bits = 0;
1989     else if (sign)
1990       bits = isSigned;
1991     else
1992       bits = width - isSigned;
1993
1994     APInt::tcSetLeastSignificantBits(parts, dstPartsCount, bits);
1995     if (sign && isSigned)
1996       APInt::tcShiftLeft(parts, dstPartsCount, width - 1);
1997   }
1998
1999   return fs;
2000 }
2001
2002 /* Convert an unsigned integer SRC to a floating point number,
2003    rounding according to ROUNDING_MODE.  The sign of the floating
2004    point number is not modified.  */
2005 APFloat::opStatus
2006 APFloat::convertFromUnsignedParts(const integerPart *src,
2007                                   unsigned int srcCount,
2008                                   roundingMode rounding_mode)
2009 {
2010   unsigned int omsb, precision, dstCount;
2011   integerPart *dst;
2012   lostFraction lost_fraction;
2013
2014   assertArithmeticOK(*semantics);
2015   category = fcNormal;
2016   omsb = APInt::tcMSB(src, srcCount) + 1;
2017   dst = significandParts();
2018   dstCount = partCount();
2019   precision = semantics->precision;
2020
2021   /* We want the most significant PRECISON bits of SRC.  There may not
2022      be that many; extract what we can.  */
2023   if (precision <= omsb) {
2024     exponent = omsb - 1;
2025     lost_fraction = lostFractionThroughTruncation(src, srcCount,
2026                                                   omsb - precision);
2027     APInt::tcExtract(dst, dstCount, src, precision, omsb - precision);
2028   } else {
2029     exponent = precision - 1;
2030     lost_fraction = lfExactlyZero;
2031     APInt::tcExtract(dst, dstCount, src, omsb, 0);
2032   }
2033
2034   return normalize(rounding_mode, lost_fraction);
2035 }
2036
2037 APFloat::opStatus
2038 APFloat::convertFromAPInt(const APInt &Val,
2039                           bool isSigned,
2040                           roundingMode rounding_mode)
2041 {
2042   unsigned int partCount = Val.getNumWords();
2043   APInt api = Val;
2044
2045   sign = false;
2046   if (isSigned && api.isNegative()) {
2047     sign = true;
2048     api = -api;
2049   }
2050
2051   return convertFromUnsignedParts(api.getRawData(), partCount, rounding_mode);
2052 }
2053
2054 /* Convert a two's complement integer SRC to a floating point number,
2055    rounding according to ROUNDING_MODE.  ISSIGNED is true if the
2056    integer is signed, in which case it must be sign-extended.  */
2057 APFloat::opStatus
2058 APFloat::convertFromSignExtendedInteger(const integerPart *src,
2059                                         unsigned int srcCount,
2060                                         bool isSigned,
2061                                         roundingMode rounding_mode)
2062 {
2063   opStatus status;
2064
2065   assertArithmeticOK(*semantics);
2066   if (isSigned
2067       && APInt::tcExtractBit(src, srcCount * integerPartWidth - 1)) {
2068     integerPart *copy;
2069
2070     /* If we're signed and negative negate a copy.  */
2071     sign = true;
2072     copy = new integerPart[srcCount];
2073     APInt::tcAssign(copy, src, srcCount);
2074     APInt::tcNegate(copy, srcCount);
2075     status = convertFromUnsignedParts(copy, srcCount, rounding_mode);
2076     delete [] copy;
2077   } else {
2078     sign = false;
2079     status = convertFromUnsignedParts(src, srcCount, rounding_mode);
2080   }
2081
2082   return status;
2083 }
2084
2085 /* FIXME: should this just take a const APInt reference?  */
2086 APFloat::opStatus
2087 APFloat::convertFromZeroExtendedInteger(const integerPart *parts,
2088                                         unsigned int width, bool isSigned,
2089                                         roundingMode rounding_mode)
2090 {
2091   unsigned int partCount = partCountForBits(width);
2092   APInt api = APInt(width, partCount, parts);
2093
2094   sign = false;
2095   if(isSigned && APInt::tcExtractBit(parts, width - 1)) {
2096     sign = true;
2097     api = -api;
2098   }
2099
2100   return convertFromUnsignedParts(api.getRawData(), partCount, rounding_mode);
2101 }
2102
2103 APFloat::opStatus
2104 APFloat::convertFromHexadecimalString(const char *p,
2105                                       roundingMode rounding_mode)
2106 {
2107   lostFraction lost_fraction;
2108   integerPart *significand;
2109   unsigned int bitPos, partsCount;
2110   const char *dot, *firstSignificantDigit;
2111
2112   zeroSignificand();
2113   exponent = 0;
2114   category = fcNormal;
2115
2116   significand = significandParts();
2117   partsCount = partCount();
2118   bitPos = partsCount * integerPartWidth;
2119
2120   /* Skip leading zeroes and any (hexa)decimal point.  */
2121   p = skipLeadingZeroesAndAnyDot(p, &dot);
2122   firstSignificantDigit = p;
2123
2124   for(;;) {
2125     integerPart hex_value;
2126
2127     if(*p == '.') {
2128       assert(dot == 0);
2129       dot = p++;
2130     }
2131
2132     hex_value = hexDigitValue(*p);
2133     if(hex_value == -1U) {
2134       lost_fraction = lfExactlyZero;
2135       break;
2136     }
2137
2138     p++;
2139
2140     /* Store the number whilst 4-bit nibbles remain.  */
2141     if(bitPos) {
2142       bitPos -= 4;
2143       hex_value <<= bitPos % integerPartWidth;
2144       significand[bitPos / integerPartWidth] |= hex_value;
2145     } else {
2146       lost_fraction = trailingHexadecimalFraction(p, hex_value);
2147       while(hexDigitValue(*p) != -1U)
2148         p++;
2149       break;
2150     }
2151   }
2152
2153   /* Hex floats require an exponent but not a hexadecimal point.  */
2154   assert(*p == 'p' || *p == 'P');
2155
2156   /* Ignore the exponent if we are zero.  */
2157   if(p != firstSignificantDigit) {
2158     int expAdjustment;
2159
2160     /* Implicit hexadecimal point?  */
2161     if(!dot)
2162       dot = p;
2163
2164     /* Calculate the exponent adjustment implicit in the number of
2165        significant digits.  */
2166     expAdjustment = static_cast<int>(dot - firstSignificantDigit);
2167     if(expAdjustment < 0)
2168       expAdjustment++;
2169     expAdjustment = expAdjustment * 4 - 1;
2170
2171     /* Adjust for writing the significand starting at the most
2172        significant nibble.  */
2173     expAdjustment += semantics->precision;
2174     expAdjustment -= partsCount * integerPartWidth;
2175
2176     /* Adjust for the given exponent.  */
2177     exponent = totalExponent(p, expAdjustment);
2178   }
2179
2180   return normalize(rounding_mode, lost_fraction);
2181 }
2182
2183 APFloat::opStatus
2184 APFloat::roundSignificandWithExponent(const integerPart *decSigParts,
2185                                       unsigned sigPartCount, int exp,
2186                                       roundingMode rounding_mode)
2187 {
2188   unsigned int parts, pow5PartCount;
2189   fltSemantics calcSemantics = { 32767, -32767, 0, true };
2190   integerPart pow5Parts[maxPowerOfFiveParts];
2191   bool isNearest;
2192
2193   isNearest = (rounding_mode == rmNearestTiesToEven
2194                || rounding_mode == rmNearestTiesToAway);
2195
2196   parts = partCountForBits(semantics->precision + 11);
2197
2198   /* Calculate pow(5, abs(exp)).  */
2199   pow5PartCount = powerOf5(pow5Parts, exp >= 0 ? exp: -exp);
2200
2201   for (;; parts *= 2) {
2202     opStatus sigStatus, powStatus;
2203     unsigned int excessPrecision, truncatedBits;
2204
2205     calcSemantics.precision = parts * integerPartWidth - 1;
2206     excessPrecision = calcSemantics.precision - semantics->precision;
2207     truncatedBits = excessPrecision;
2208
2209     APFloat decSig(calcSemantics, fcZero, sign);
2210     APFloat pow5(calcSemantics, fcZero, false);
2211
2212     sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount,
2213                                                 rmNearestTiesToEven);
2214     powStatus = pow5.convertFromUnsignedParts(pow5Parts, pow5PartCount,
2215                                               rmNearestTiesToEven);
2216     /* Add exp, as 10^n = 5^n * 2^n.  */
2217     decSig.exponent += exp;
2218
2219     lostFraction calcLostFraction;
2220     integerPart HUerr, HUdistance;
2221     unsigned int powHUerr;
2222
2223     if (exp >= 0) {
2224       /* multiplySignificand leaves the precision-th bit set to 1.  */
2225       calcLostFraction = decSig.multiplySignificand(pow5, NULL);
2226       powHUerr = powStatus != opOK;
2227     } else {
2228       calcLostFraction = decSig.divideSignificand(pow5);
2229       /* Denormal numbers have less precision.  */
2230       if (decSig.exponent < semantics->minExponent) {
2231         excessPrecision += (semantics->minExponent - decSig.exponent);
2232         truncatedBits = excessPrecision;
2233         if (excessPrecision > calcSemantics.precision)
2234           excessPrecision = calcSemantics.precision;
2235       }
2236       /* Extra half-ulp lost in reciprocal of exponent.  */
2237       powHUerr = (powStatus == opOK && calcLostFraction == lfExactlyZero) ? 0:2;
2238     }
2239
2240     /* Both multiplySignificand and divideSignificand return the
2241        result with the integer bit set.  */
2242     assert (APInt::tcExtractBit
2243             (decSig.significandParts(), calcSemantics.precision - 1) == 1);
2244
2245     HUerr = HUerrBound(calcLostFraction != lfExactlyZero, sigStatus != opOK,
2246                        powHUerr);
2247     HUdistance = 2 * ulpsFromBoundary(decSig.significandParts(),
2248                                       excessPrecision, isNearest);
2249
2250     /* Are we guaranteed to round correctly if we truncate?  */
2251     if (HUdistance >= HUerr) {
2252       APInt::tcExtract(significandParts(), partCount(), decSig.significandParts(),
2253                        calcSemantics.precision - excessPrecision,
2254                        excessPrecision);
2255       /* Take the exponent of decSig.  If we tcExtract-ed less bits
2256          above we must adjust our exponent to compensate for the
2257          implicit right shift.  */
2258       exponent = (decSig.exponent + semantics->precision
2259                   - (calcSemantics.precision - excessPrecision));
2260       calcLostFraction = lostFractionThroughTruncation(decSig.significandParts(),
2261                                                        decSig.partCount(),
2262                                                        truncatedBits);
2263       return normalize(rounding_mode, calcLostFraction);
2264     }
2265   }
2266 }
2267
2268 APFloat::opStatus
2269 APFloat::convertFromDecimalString(const char *p, roundingMode rounding_mode)
2270 {
2271   decimalInfo D;
2272   opStatus fs;
2273
2274   /* Scan the text.  */
2275   interpretDecimal(p, &D);
2276
2277   /* Handle the quick cases.  First the case of no significant digits,
2278      i.e. zero, and then exponents that are obviously too large or too
2279      small.  Writing L for log 10 / log 2, a number d.ddddd*10^exp
2280      definitely overflows if
2281
2282            (exp - 1) * L >= maxExponent
2283
2284      and definitely underflows to zero where
2285
2286            (exp + 1) * L <= minExponent - precision
2287
2288      With integer arithmetic the tightest bounds for L are
2289
2290            93/28 < L < 196/59            [ numerator <= 256 ]
2291            42039/12655 < L < 28738/8651  [ numerator <= 65536 ]
2292   */
2293
2294   if (decDigitValue(*D.firstSigDigit) >= 10U) {
2295     category = fcZero;
2296     fs = opOK;
2297   } else if ((D.normalizedExponent + 1) * 28738
2298              <= 8651 * (semantics->minExponent - (int) semantics->precision)) {
2299     /* Underflow to zero and round.  */
2300     zeroSignificand();
2301     fs = normalize(rounding_mode, lfLessThanHalf);
2302   } else if ((D.normalizedExponent - 1) * 42039
2303              >= 12655 * semantics->maxExponent) {
2304     /* Overflow and round.  */
2305     fs = handleOverflow(rounding_mode);
2306   } else {
2307     integerPart *decSignificand;
2308     unsigned int partCount;
2309
2310     /* A tight upper bound on number of bits required to hold an
2311        N-digit decimal integer is N * 196 / 59.  Allocate enough space
2312        to hold the full significand, and an extra part required by
2313        tcMultiplyPart.  */
2314     partCount = static_cast<unsigned int>(D.lastSigDigit - D.firstSigDigit) + 1;
2315     partCount = partCountForBits(1 + 196 * partCount / 59);
2316     decSignificand = new integerPart[partCount + 1];
2317     partCount = 0;
2318
2319     /* Convert to binary efficiently - we do almost all multiplication
2320        in an integerPart.  When this would overflow do we do a single
2321        bignum multiplication, and then revert again to multiplication
2322        in an integerPart.  */
2323     do {
2324       integerPart decValue, val, multiplier;
2325
2326       val = 0;
2327       multiplier = 1;
2328
2329       do {
2330         if (*p == '.')
2331           p++;
2332
2333         decValue = decDigitValue(*p++);
2334         multiplier *= 10;
2335         val = val * 10 + decValue;
2336         /* The maximum number that can be multiplied by ten with any
2337            digit added without overflowing an integerPart.  */
2338       } while (p <= D.lastSigDigit && multiplier <= (~ (integerPart) 0 - 9) / 10);
2339
2340       /* Multiply out the current part.  */
2341       APInt::tcMultiplyPart(decSignificand, decSignificand, multiplier, val,
2342                             partCount, partCount + 1, false);
2343
2344       /* If we used another part (likely but not guaranteed), increase
2345          the count.  */
2346       if (decSignificand[partCount])
2347         partCount++;
2348     } while (p <= D.lastSigDigit);
2349
2350     category = fcNormal;
2351     fs = roundSignificandWithExponent(decSignificand, partCount,
2352                                       D.exponent, rounding_mode);
2353
2354     delete [] decSignificand;
2355   }
2356
2357   return fs;
2358 }
2359
2360 APFloat::opStatus
2361 APFloat::convertFromString(const char *p, roundingMode rounding_mode)
2362 {
2363   assertArithmeticOK(*semantics);
2364
2365   /* Handle a leading minus sign.  */
2366   if(*p == '-')
2367     sign = 1, p++;
2368   else
2369     sign = 0;
2370
2371   if(p[0] == '0' && (p[1] == 'x' || p[1] == 'X'))
2372     return convertFromHexadecimalString(p + 2, rounding_mode);
2373
2374   return convertFromDecimalString(p, rounding_mode);
2375 }
2376
2377 /* Write out a hexadecimal representation of the floating point value
2378    to DST, which must be of sufficient size, in the C99 form
2379    [-]0xh.hhhhp[+-]d.  Return the number of characters written,
2380    excluding the terminating NUL.
2381
2382    If UPPERCASE, the output is in upper case, otherwise in lower case.
2383
2384    HEXDIGITS digits appear altogether, rounding the value if
2385    necessary.  If HEXDIGITS is 0, the minimal precision to display the
2386    number precisely is used instead.  If nothing would appear after
2387    the decimal point it is suppressed.
2388
2389    The decimal exponent is always printed and has at least one digit.
2390    Zero values display an exponent of zero.  Infinities and NaNs
2391    appear as "infinity" or "nan" respectively.
2392
2393    The above rules are as specified by C99.  There is ambiguity about
2394    what the leading hexadecimal digit should be.  This implementation
2395    uses whatever is necessary so that the exponent is displayed as
2396    stored.  This implies the exponent will fall within the IEEE format
2397    range, and the leading hexadecimal digit will be 0 (for denormals),
2398    1 (normal numbers) or 2 (normal numbers rounded-away-from-zero with
2399    any other digits zero).
2400 */
2401 unsigned int
2402 APFloat::convertToHexString(char *dst, unsigned int hexDigits,
2403                             bool upperCase, roundingMode rounding_mode) const
2404 {
2405   char *p;
2406
2407   assertArithmeticOK(*semantics);
2408
2409   p = dst;
2410   if (sign)
2411     *dst++ = '-';
2412
2413   switch (category) {
2414   case fcInfinity:
2415     memcpy (dst, upperCase ? infinityU: infinityL, sizeof infinityU - 1);
2416     dst += sizeof infinityL - 1;
2417     break;
2418
2419   case fcNaN:
2420     memcpy (dst, upperCase ? NaNU: NaNL, sizeof NaNU - 1);
2421     dst += sizeof NaNU - 1;
2422     break;
2423
2424   case fcZero:
2425     *dst++ = '0';
2426     *dst++ = upperCase ? 'X': 'x';
2427     *dst++ = '0';
2428     if (hexDigits > 1) {
2429       *dst++ = '.';
2430       memset (dst, '0', hexDigits - 1);
2431       dst += hexDigits - 1;
2432     }
2433     *dst++ = upperCase ? 'P': 'p';
2434     *dst++ = '0';
2435     break;
2436
2437   case fcNormal:
2438     dst = convertNormalToHexString (dst, hexDigits, upperCase, rounding_mode);
2439     break;
2440   }
2441
2442   *dst = 0;
2443
2444   return static_cast<unsigned int>(dst - p);
2445 }
2446
2447 /* Does the hard work of outputting the correctly rounded hexadecimal
2448    form of a normal floating point number with the specified number of
2449    hexadecimal digits.  If HEXDIGITS is zero the minimum number of
2450    digits necessary to print the value precisely is output.  */
2451 char *
2452 APFloat::convertNormalToHexString(char *dst, unsigned int hexDigits,
2453                                   bool upperCase,
2454                                   roundingMode rounding_mode) const
2455 {
2456   unsigned int count, valueBits, shift, partsCount, outputDigits;
2457   const char *hexDigitChars;
2458   const integerPart *significand;
2459   char *p;
2460   bool roundUp;
2461
2462   *dst++ = '0';
2463   *dst++ = upperCase ? 'X': 'x';
2464
2465   roundUp = false;
2466   hexDigitChars = upperCase ? hexDigitsUpper: hexDigitsLower;
2467
2468   significand = significandParts();
2469   partsCount = partCount();
2470
2471   /* +3 because the first digit only uses the single integer bit, so
2472      we have 3 virtual zero most-significant-bits.  */
2473   valueBits = semantics->precision + 3;
2474   shift = integerPartWidth - valueBits % integerPartWidth;
2475
2476   /* The natural number of digits required ignoring trailing
2477      insignificant zeroes.  */
2478   outputDigits = (valueBits - significandLSB () + 3) / 4;
2479
2480   /* hexDigits of zero means use the required number for the
2481      precision.  Otherwise, see if we are truncating.  If we are,
2482      find out if we need to round away from zero.  */
2483   if (hexDigits) {
2484     if (hexDigits < outputDigits) {
2485       /* We are dropping non-zero bits, so need to check how to round.
2486          "bits" is the number of dropped bits.  */
2487       unsigned int bits;
2488       lostFraction fraction;
2489
2490       bits = valueBits - hexDigits * 4;
2491       fraction = lostFractionThroughTruncation (significand, partsCount, bits);
2492       roundUp = roundAwayFromZero(rounding_mode, fraction, bits);
2493     }
2494     outputDigits = hexDigits;
2495   }
2496
2497   /* Write the digits consecutively, and start writing in the location
2498      of the hexadecimal point.  We move the most significant digit
2499      left and add the hexadecimal point later.  */
2500   p = ++dst;
2501
2502   count = (valueBits + integerPartWidth - 1) / integerPartWidth;
2503
2504   while (outputDigits && count) {
2505     integerPart part;
2506
2507     /* Put the most significant integerPartWidth bits in "part".  */
2508     if (--count == partsCount)
2509       part = 0;  /* An imaginary higher zero part.  */
2510     else
2511       part = significand[count] << shift;
2512
2513     if (count && shift)
2514       part |= significand[count - 1] >> (integerPartWidth - shift);
2515
2516     /* Convert as much of "part" to hexdigits as we can.  */
2517     unsigned int curDigits = integerPartWidth / 4;
2518
2519     if (curDigits > outputDigits)
2520       curDigits = outputDigits;
2521     dst += partAsHex (dst, part, curDigits, hexDigitChars);
2522     outputDigits -= curDigits;
2523   }
2524
2525   if (roundUp) {
2526     char *q = dst;
2527
2528     /* Note that hexDigitChars has a trailing '0'.  */
2529     do {
2530       q--;
2531       *q = hexDigitChars[hexDigitValue (*q) + 1];
2532     } while (*q == '0');
2533     assert (q >= p);
2534   } else {
2535     /* Add trailing zeroes.  */
2536     memset (dst, '0', outputDigits);
2537     dst += outputDigits;
2538   }
2539
2540   /* Move the most significant digit to before the point, and if there
2541      is something after the decimal point add it.  This must come
2542      after rounding above.  */
2543   p[-1] = p[0];
2544   if (dst -1 == p)
2545     dst--;
2546   else
2547     p[0] = '.';
2548
2549   /* Finally output the exponent.  */
2550   *dst++ = upperCase ? 'P': 'p';
2551
2552   return writeSignedDecimal (dst, exponent);
2553 }
2554
2555 // For good performance it is desirable for different APFloats
2556 // to produce different integers.
2557 uint32_t
2558 APFloat::getHashValue() const
2559 {
2560   if (category==fcZero) return sign<<8 | semantics->precision ;
2561   else if (category==fcInfinity) return sign<<9 | semantics->precision;
2562   else if (category==fcNaN) return 1<<10 | semantics->precision;
2563   else {
2564     uint32_t hash = sign<<11 | semantics->precision | exponent<<12;
2565     const integerPart* p = significandParts();
2566     for (int i=partCount(); i>0; i--, p++)
2567       hash ^= ((uint32_t)*p) ^ (uint32_t)((*p)>>32);
2568     return hash;
2569   }
2570 }
2571
2572 // Conversion from APFloat to/from host float/double.  It may eventually be
2573 // possible to eliminate these and have everybody deal with APFloats, but that
2574 // will take a while.  This approach will not easily extend to long double.
2575 // Current implementation requires integerPartWidth==64, which is correct at
2576 // the moment but could be made more general.
2577
2578 // Denormals have exponent minExponent in APFloat, but minExponent-1 in
2579 // the actual IEEE respresentations.  We compensate for that here.
2580
2581 APInt
2582 APFloat::convertF80LongDoubleAPFloatToAPInt() const
2583 {
2584   assert(semantics == (const llvm::fltSemantics*)&x87DoubleExtended);
2585   assert (partCount()==2);
2586
2587   uint64_t myexponent, mysignificand;
2588
2589   if (category==fcNormal) {
2590     myexponent = exponent+16383; //bias
2591     mysignificand = significandParts()[0];
2592     if (myexponent==1 && !(mysignificand & 0x8000000000000000ULL))
2593       myexponent = 0;   // denormal
2594   } else if (category==fcZero) {
2595     myexponent = 0;
2596     mysignificand = 0;
2597   } else if (category==fcInfinity) {
2598     myexponent = 0x7fff;
2599     mysignificand = 0x8000000000000000ULL;
2600   } else {
2601     assert(category == fcNaN && "Unknown category");
2602     myexponent = 0x7fff;
2603     mysignificand = significandParts()[0];
2604   }
2605
2606   uint64_t words[2];
2607   words[0] =  ((uint64_t)(sign & 1) << 63) |
2608               ((myexponent & 0x7fffLL) <<  48) |
2609               ((mysignificand >>16) & 0xffffffffffffLL);
2610   words[1] = mysignificand & 0xffff;
2611   return APInt(80, 2, words);
2612 }
2613
2614 APInt
2615 APFloat::convertPPCDoubleDoubleAPFloatToAPInt() const
2616 {
2617   assert(semantics == (const llvm::fltSemantics*)&PPCDoubleDouble);
2618   assert (partCount()==2);
2619
2620   uint64_t myexponent, mysignificand, myexponent2, mysignificand2;
2621
2622   if (category==fcNormal) {
2623     myexponent = exponent + 1023; //bias
2624     myexponent2 = exponent2 + 1023;
2625     mysignificand = significandParts()[0];
2626     mysignificand2 = significandParts()[1];
2627     if (myexponent==1 && !(mysignificand & 0x10000000000000LL))
2628       myexponent = 0;   // denormal
2629     if (myexponent2==1 && !(mysignificand2 & 0x10000000000000LL))
2630       myexponent2 = 0;   // denormal
2631   } else if (category==fcZero) {
2632     myexponent = 0;
2633     mysignificand = 0;
2634     myexponent2 = 0;
2635     mysignificand2 = 0;
2636   } else if (category==fcInfinity) {
2637     myexponent = 0x7ff;
2638     myexponent2 = 0;
2639     mysignificand = 0;
2640     mysignificand2 = 0;
2641   } else {
2642     assert(category == fcNaN && "Unknown category");
2643     myexponent = 0x7ff;
2644     mysignificand = significandParts()[0];
2645     myexponent2 = exponent2;
2646     mysignificand2 = significandParts()[1];
2647   }
2648
2649   uint64_t words[2];
2650   words[0] =  ((uint64_t)(sign & 1) << 63) |
2651               ((myexponent & 0x7ff) <<  52) |
2652               (mysignificand & 0xfffffffffffffLL);
2653   words[1] =  ((uint64_t)(sign2 & 1) << 63) |
2654               ((myexponent2 & 0x7ff) <<  52) |
2655               (mysignificand2 & 0xfffffffffffffLL);
2656   return APInt(128, 2, words);
2657 }
2658
2659 APInt
2660 APFloat::convertDoubleAPFloatToAPInt() const
2661 {
2662   assert(semantics == (const llvm::fltSemantics*)&IEEEdouble);
2663   assert (partCount()==1);
2664
2665   uint64_t myexponent, mysignificand;
2666
2667   if (category==fcNormal) {
2668     myexponent = exponent+1023; //bias
2669     mysignificand = *significandParts();
2670     if (myexponent==1 && !(mysignificand & 0x10000000000000LL))
2671       myexponent = 0;   // denormal
2672   } else if (category==fcZero) {
2673     myexponent = 0;
2674     mysignificand = 0;
2675   } else if (category==fcInfinity) {
2676     myexponent = 0x7ff;
2677     mysignificand = 0;
2678   } else {
2679     assert(category == fcNaN && "Unknown category!");
2680     myexponent = 0x7ff;
2681     mysignificand = *significandParts();
2682   }
2683
2684   return APInt(64, ((((uint64_t)(sign & 1) << 63) |
2685                      ((myexponent & 0x7ff) <<  52) |
2686                      (mysignificand & 0xfffffffffffffLL))));
2687 }
2688
2689 APInt
2690 APFloat::convertFloatAPFloatToAPInt() const
2691 {
2692   assert(semantics == (const llvm::fltSemantics*)&IEEEsingle);
2693   assert (partCount()==1);
2694
2695   uint32_t myexponent, mysignificand;
2696
2697   if (category==fcNormal) {
2698     myexponent = exponent+127; //bias
2699     mysignificand = (uint32_t)*significandParts();
2700     if (myexponent == 1 && !(mysignificand & 0x800000))
2701       myexponent = 0;   // denormal
2702   } else if (category==fcZero) {
2703     myexponent = 0;
2704     mysignificand = 0;
2705   } else if (category==fcInfinity) {
2706     myexponent = 0xff;
2707     mysignificand = 0;
2708   } else {
2709     assert(category == fcNaN && "Unknown category!");
2710     myexponent = 0xff;
2711     mysignificand = (uint32_t)*significandParts();
2712   }
2713
2714   return APInt(32, (((sign&1) << 31) | ((myexponent&0xff) << 23) |
2715                     (mysignificand & 0x7fffff)));
2716 }
2717
2718 // This function creates an APInt that is just a bit map of the floating
2719 // point constant as it would appear in memory.  It is not a conversion,
2720 // and treating the result as a normal integer is unlikely to be useful.
2721
2722 APInt
2723 APFloat::bitcastToAPInt() const
2724 {
2725   if (semantics == (const llvm::fltSemantics*)&IEEEsingle)
2726     return convertFloatAPFloatToAPInt();
2727   
2728   if (semantics == (const llvm::fltSemantics*)&IEEEdouble)
2729     return convertDoubleAPFloatToAPInt();
2730
2731   if (semantics == (const llvm::fltSemantics*)&PPCDoubleDouble)
2732     return convertPPCDoubleDoubleAPFloatToAPInt();
2733
2734   assert(semantics == (const llvm::fltSemantics*)&x87DoubleExtended &&
2735          "unknown format!");
2736   return convertF80LongDoubleAPFloatToAPInt();
2737 }
2738
2739 float
2740 APFloat::convertToFloat() const
2741 {
2742   assert(semantics == (const llvm::fltSemantics*)&IEEEsingle);
2743   APInt api = bitcastToAPInt();
2744   return api.bitsToFloat();
2745 }
2746
2747 double
2748 APFloat::convertToDouble() const
2749 {
2750   assert(semantics == (const llvm::fltSemantics*)&IEEEdouble);
2751   APInt api = bitcastToAPInt();
2752   return api.bitsToDouble();
2753 }
2754
2755 /// Integer bit is explicit in this format.  Intel hardware (387 and later)
2756 /// does not support these bit patterns:
2757 ///  exponent = all 1's, integer bit 0, significand 0 ("pseudoinfinity")
2758 ///  exponent = all 1's, integer bit 0, significand nonzero ("pseudoNaN")
2759 ///  exponent = 0, integer bit 1 ("pseudodenormal")
2760 ///  exponent!=0 nor all 1's, integer bit 0 ("unnormal")
2761 /// At the moment, the first two are treated as NaNs, the second two as Normal.
2762 void
2763 APFloat::initFromF80LongDoubleAPInt(const APInt &api)
2764 {
2765   assert(api.getBitWidth()==80);
2766   uint64_t i1 = api.getRawData()[0];
2767   uint64_t i2 = api.getRawData()[1];
2768   uint64_t myexponent = (i1 >> 48) & 0x7fff;
2769   uint64_t mysignificand = ((i1 << 16) &  0xffffffffffff0000ULL) |
2770                           (i2 & 0xffff);
2771
2772   initialize(&APFloat::x87DoubleExtended);
2773   assert(partCount()==2);
2774
2775   sign = static_cast<unsigned int>(i1>>63);
2776   if (myexponent==0 && mysignificand==0) {
2777     // exponent, significand meaningless
2778     category = fcZero;
2779   } else if (myexponent==0x7fff && mysignificand==0x8000000000000000ULL) {
2780     // exponent, significand meaningless
2781     category = fcInfinity;
2782   } else if (myexponent==0x7fff && mysignificand!=0x8000000000000000ULL) {
2783     // exponent meaningless
2784     category = fcNaN;
2785     significandParts()[0] = mysignificand;
2786     significandParts()[1] = 0;
2787   } else {
2788     category = fcNormal;
2789     exponent = myexponent - 16383;
2790     significandParts()[0] = mysignificand;
2791     significandParts()[1] = 0;
2792     if (myexponent==0)          // denormal
2793       exponent = -16382;
2794   }
2795 }
2796
2797 void
2798 APFloat::initFromPPCDoubleDoubleAPInt(const APInt &api)
2799 {
2800   assert(api.getBitWidth()==128);
2801   uint64_t i1 = api.getRawData()[0];
2802   uint64_t i2 = api.getRawData()[1];
2803   uint64_t myexponent = (i1 >> 52) & 0x7ff;
2804   uint64_t mysignificand = i1 & 0xfffffffffffffLL;
2805   uint64_t myexponent2 = (i2 >> 52) & 0x7ff;
2806   uint64_t mysignificand2 = i2 & 0xfffffffffffffLL;
2807
2808   initialize(&APFloat::PPCDoubleDouble);
2809   assert(partCount()==2);
2810
2811   sign = static_cast<unsigned int>(i1>>63);
2812   sign2 = static_cast<unsigned int>(i2>>63);
2813   if (myexponent==0 && mysignificand==0) {
2814     // exponent, significand meaningless
2815     // exponent2 and significand2 are required to be 0; we don't check
2816     category = fcZero;
2817   } else if (myexponent==0x7ff && mysignificand==0) {
2818     // exponent, significand meaningless
2819     // exponent2 and significand2 are required to be 0; we don't check
2820     category = fcInfinity;
2821   } else if (myexponent==0x7ff && mysignificand!=0) {
2822     // exponent meaningless.  So is the whole second word, but keep it 
2823     // for determinism.
2824     category = fcNaN;
2825     exponent2 = myexponent2;
2826     significandParts()[0] = mysignificand;
2827     significandParts()[1] = mysignificand2;
2828   } else {
2829     category = fcNormal;
2830     // Note there is no category2; the second word is treated as if it is
2831     // fcNormal, although it might be something else considered by itself.
2832     exponent = myexponent - 1023;
2833     exponent2 = myexponent2 - 1023;
2834     significandParts()[0] = mysignificand;
2835     significandParts()[1] = mysignificand2;
2836     if (myexponent==0)          // denormal
2837       exponent = -1022;
2838     else
2839       significandParts()[0] |= 0x10000000000000LL;  // integer bit
2840     if (myexponent2==0) 
2841       exponent2 = -1022;
2842     else
2843       significandParts()[1] |= 0x10000000000000LL;  // integer bit
2844   }
2845 }
2846
2847 void
2848 APFloat::initFromDoubleAPInt(const APInt &api)
2849 {
2850   assert(api.getBitWidth()==64);
2851   uint64_t i = *api.getRawData();
2852   uint64_t myexponent = (i >> 52) & 0x7ff;
2853   uint64_t mysignificand = i & 0xfffffffffffffLL;
2854
2855   initialize(&APFloat::IEEEdouble);
2856   assert(partCount()==1);
2857
2858   sign = static_cast<unsigned int>(i>>63);
2859   if (myexponent==0 && mysignificand==0) {
2860     // exponent, significand meaningless
2861     category = fcZero;
2862   } else if (myexponent==0x7ff && mysignificand==0) {
2863     // exponent, significand meaningless
2864     category = fcInfinity;
2865   } else if (myexponent==0x7ff && mysignificand!=0) {
2866     // exponent meaningless
2867     category = fcNaN;
2868     *significandParts() = mysignificand;
2869   } else {
2870     category = fcNormal;
2871     exponent = myexponent - 1023;
2872     *significandParts() = mysignificand;
2873     if (myexponent==0)          // denormal
2874       exponent = -1022;
2875     else
2876       *significandParts() |= 0x10000000000000LL;  // integer bit
2877   }
2878 }
2879
2880 void
2881 APFloat::initFromFloatAPInt(const APInt & api)
2882 {
2883   assert(api.getBitWidth()==32);
2884   uint32_t i = (uint32_t)*api.getRawData();
2885   uint32_t myexponent = (i >> 23) & 0xff;
2886   uint32_t mysignificand = i & 0x7fffff;
2887
2888   initialize(&APFloat::IEEEsingle);
2889   assert(partCount()==1);
2890
2891   sign = i >> 31;
2892   if (myexponent==0 && mysignificand==0) {
2893     // exponent, significand meaningless
2894     category = fcZero;
2895   } else if (myexponent==0xff && mysignificand==0) {
2896     // exponent, significand meaningless
2897     category = fcInfinity;
2898   } else if (myexponent==0xff && mysignificand!=0) {
2899     // sign, exponent, significand meaningless
2900     category = fcNaN;
2901     *significandParts() = mysignificand;
2902   } else {
2903     category = fcNormal;
2904     exponent = myexponent - 127;  //bias
2905     *significandParts() = mysignificand;
2906     if (myexponent==0)    // denormal
2907       exponent = -126;
2908     else
2909       *significandParts() |= 0x800000; // integer bit
2910   }
2911 }
2912
2913 /// Treat api as containing the bits of a floating point number.  Currently
2914 /// we infer the floating point type from the size of the APInt.  The
2915 /// isIEEE argument distinguishes between PPC128 and IEEE128 (not meaningful
2916 /// when the size is anything else).
2917 void
2918 APFloat::initFromAPInt(const APInt& api, bool isIEEE)
2919 {
2920   if (api.getBitWidth() == 32)
2921     return initFromFloatAPInt(api);
2922   else if (api.getBitWidth()==64)
2923     return initFromDoubleAPInt(api);
2924   else if (api.getBitWidth()==80)
2925     return initFromF80LongDoubleAPInt(api);
2926   else if (api.getBitWidth()==128 && !isIEEE)
2927     return initFromPPCDoubleDoubleAPInt(api);
2928   else
2929     assert(0);
2930 }
2931
2932 APFloat::APFloat(const APInt& api, bool isIEEE)
2933 {
2934   initFromAPInt(api, isIEEE);
2935 }
2936
2937 APFloat::APFloat(float f)
2938 {
2939   APInt api = APInt(32, 0);
2940   initFromAPInt(api.floatToBits(f));
2941 }
2942
2943 APFloat::APFloat(double d)
2944 {
2945   APInt api = APInt(64, 0);
2946   initFromAPInt(api.doubleToBits(d));
2947 }