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