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