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