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