1 //===-- APInt.cpp - Implement APInt 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 integer 11 // constant values and provide a variety of arithmetic operations on them. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/ADT/APInt.h" 16 #include "llvm/ADT/ArrayRef.h" 17 #include "llvm/ADT/FoldingSet.h" 18 #include "llvm/ADT/Hashing.h" 19 #include "llvm/ADT/SmallString.h" 20 #include "llvm/ADT/StringRef.h" 21 #include "llvm/Support/Debug.h" 22 #include "llvm/Support/ErrorHandling.h" 23 #include "llvm/Support/MathExtras.h" 24 #include "llvm/Support/raw_ostream.h" 25 #include <climits> 26 #include <cmath> 27 #include <cstdlib> 28 #include <cstring> 29 using namespace llvm; 30 31 #define DEBUG_TYPE "apint" 32 33 /// A utility function for allocating memory, checking for allocation failures, 34 /// and ensuring the contents are zeroed. 35 inline static uint64_t* getClearedMemory(unsigned numWords) { 36 uint64_t *result = new uint64_t[numWords]; 37 memset(result, 0, numWords * sizeof(uint64_t)); 38 return result; 39 } 40 41 /// A utility function for allocating memory and checking for allocation 42 /// failure. The content is not zeroed. 43 inline static uint64_t* getMemory(unsigned numWords) { 44 return new uint64_t[numWords]; 45 } 46 47 /// A utility function that converts a character to a digit. 48 inline static unsigned getDigit(char cdigit, uint8_t radix) { 49 unsigned r; 50 51 if (radix == 16 || radix == 36) { 52 r = cdigit - '0'; 53 if (r <= 9) 54 return r; 55 56 r = cdigit - 'A'; 57 if (r <= radix - 11U) 58 return r + 10; 59 60 r = cdigit - 'a'; 61 if (r <= radix - 11U) 62 return r + 10; 63 64 radix = 10; 65 } 66 67 r = cdigit - '0'; 68 if (r < radix) 69 return r; 70 71 return -1U; 72 } 73 74 75 void APInt::initSlowCase(uint64_t val, bool isSigned) { 76 U.pVal = getClearedMemory(getNumWords()); 77 U.pVal[0] = val; 78 if (isSigned && int64_t(val) < 0) 79 for (unsigned i = 1; i < getNumWords(); ++i) 80 U.pVal[i] = WORD_MAX; 81 clearUnusedBits(); 82 } 83 84 void APInt::initSlowCase(const APInt& that) { 85 U.pVal = getMemory(getNumWords()); 86 memcpy(U.pVal, that.U.pVal, getNumWords() * APINT_WORD_SIZE); 87 } 88 89 void APInt::initFromArray(ArrayRef<uint64_t> bigVal) { 90 assert(BitWidth && "Bitwidth too small"); 91 assert(bigVal.data() && "Null pointer detected!"); 92 if (isSingleWord()) 93 U.VAL = bigVal[0]; 94 else { 95 // Get memory, cleared to 0 96 U.pVal = getClearedMemory(getNumWords()); 97 // Calculate the number of words to copy 98 unsigned words = std::min<unsigned>(bigVal.size(), getNumWords()); 99 // Copy the words from bigVal to pVal 100 memcpy(U.pVal, bigVal.data(), words * APINT_WORD_SIZE); 101 } 102 // Make sure unused high bits are cleared 103 clearUnusedBits(); 104 } 105 106 APInt::APInt(unsigned numBits, ArrayRef<uint64_t> bigVal) 107 : BitWidth(numBits) { 108 initFromArray(bigVal); 109 } 110 111 APInt::APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[]) 112 : BitWidth(numBits) { 113 initFromArray(makeArrayRef(bigVal, numWords)); 114 } 115 116 APInt::APInt(unsigned numbits, StringRef Str, uint8_t radix) 117 : BitWidth(numbits) { 118 assert(BitWidth && "Bitwidth too small"); 119 fromString(numbits, Str, radix); 120 } 121 122 void APInt::reallocate(unsigned NewBitWidth) { 123 // If the number of words is the same we can just change the width and stop. 124 if (getNumWords() == getNumWords(NewBitWidth)) { 125 BitWidth = NewBitWidth; 126 return; 127 } 128 129 // If we have an allocation, delete it. 130 if (!isSingleWord()) 131 delete [] U.pVal; 132 133 // Update BitWidth. 134 BitWidth = NewBitWidth; 135 136 // If we are supposed to have an allocation, create it. 137 if (!isSingleWord()) 138 U.pVal = getMemory(getNumWords()); 139 } 140 141 void APInt::AssignSlowCase(const APInt& RHS) { 142 // Don't do anything for X = X 143 if (this == &RHS) 144 return; 145 146 // Adjust the bit width and handle allocations as necessary. 147 reallocate(RHS.getBitWidth()); 148 149 // Copy the data. 150 if (isSingleWord()) 151 U.VAL = RHS.U.VAL; 152 else 153 memcpy(U.pVal, RHS.U.pVal, getNumWords() * APINT_WORD_SIZE); 154 } 155 156 /// This method 'profiles' an APInt for use with FoldingSet. 157 void APInt::Profile(FoldingSetNodeID& ID) const { 158 ID.AddInteger(BitWidth); 159 160 if (isSingleWord()) { 161 ID.AddInteger(U.VAL); 162 return; 163 } 164 165 unsigned NumWords = getNumWords(); 166 for (unsigned i = 0; i < NumWords; ++i) 167 ID.AddInteger(U.pVal[i]); 168 } 169 170 /// @brief Prefix increment operator. Increments the APInt by one. 171 APInt& APInt::operator++() { 172 if (isSingleWord()) 173 ++U.VAL; 174 else 175 tcIncrement(U.pVal, getNumWords()); 176 return clearUnusedBits(); 177 } 178 179 /// @brief Prefix decrement operator. Decrements the APInt by one. 180 APInt& APInt::operator--() { 181 if (isSingleWord()) 182 --U.VAL; 183 else 184 tcDecrement(U.pVal, getNumWords()); 185 return clearUnusedBits(); 186 } 187 188 /// Adds the RHS APint to this APInt. 189 /// @returns this, after addition of RHS. 190 /// @brief Addition assignment operator. 191 APInt& APInt::operator+=(const APInt& RHS) { 192 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 193 if (isSingleWord()) 194 U.VAL += RHS.U.VAL; 195 else 196 tcAdd(U.pVal, RHS.U.pVal, 0, getNumWords()); 197 return clearUnusedBits(); 198 } 199 200 APInt& APInt::operator+=(uint64_t RHS) { 201 if (isSingleWord()) 202 U.VAL += RHS; 203 else 204 tcAddPart(U.pVal, RHS, getNumWords()); 205 return clearUnusedBits(); 206 } 207 208 /// Subtracts the RHS APInt from this APInt 209 /// @returns this, after subtraction 210 /// @brief Subtraction assignment operator. 211 APInt& APInt::operator-=(const APInt& RHS) { 212 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 213 if (isSingleWord()) 214 U.VAL -= RHS.U.VAL; 215 else 216 tcSubtract(U.pVal, RHS.U.pVal, 0, getNumWords()); 217 return clearUnusedBits(); 218 } 219 220 APInt& APInt::operator-=(uint64_t RHS) { 221 if (isSingleWord()) 222 U.VAL -= RHS; 223 else 224 tcSubtractPart(U.pVal, RHS, getNumWords()); 225 return clearUnusedBits(); 226 } 227 228 APInt APInt::operator*(const APInt& RHS) const { 229 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 230 if (isSingleWord()) 231 return APInt(BitWidth, U.VAL * RHS.U.VAL); 232 233 APInt Result(getMemory(getNumWords()), getBitWidth()); 234 235 tcMultiply(Result.U.pVal, U.pVal, RHS.U.pVal, getNumWords()); 236 237 Result.clearUnusedBits(); 238 return Result; 239 } 240 241 void APInt::AndAssignSlowCase(const APInt& RHS) { 242 tcAnd(U.pVal, RHS.U.pVal, getNumWords()); 243 } 244 245 void APInt::OrAssignSlowCase(const APInt& RHS) { 246 tcOr(U.pVal, RHS.U.pVal, getNumWords()); 247 } 248 249 void APInt::XorAssignSlowCase(const APInt& RHS) { 250 tcXor(U.pVal, RHS.U.pVal, getNumWords()); 251 } 252 253 APInt& APInt::operator*=(const APInt& RHS) { 254 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 255 *this = *this * RHS; 256 return *this; 257 } 258 259 APInt& APInt::operator*=(uint64_t RHS) { 260 if (isSingleWord()) { 261 U.VAL *= RHS; 262 } else { 263 unsigned NumWords = getNumWords(); 264 tcMultiplyPart(U.pVal, U.pVal, RHS, 0, NumWords, NumWords, false); 265 } 266 return clearUnusedBits(); 267 } 268 269 bool APInt::EqualSlowCase(const APInt& RHS) const { 270 return std::equal(U.pVal, U.pVal + getNumWords(), RHS.U.pVal); 271 } 272 273 int APInt::compare(const APInt& RHS) const { 274 assert(BitWidth == RHS.BitWidth && "Bit widths must be same for comparison"); 275 if (isSingleWord()) 276 return U.VAL < RHS.U.VAL ? -1 : U.VAL > RHS.U.VAL; 277 278 return tcCompare(U.pVal, RHS.U.pVal, getNumWords()); 279 } 280 281 int APInt::compareSigned(const APInt& RHS) const { 282 assert(BitWidth == RHS.BitWidth && "Bit widths must be same for comparison"); 283 if (isSingleWord()) { 284 int64_t lhsSext = SignExtend64(U.VAL, BitWidth); 285 int64_t rhsSext = SignExtend64(RHS.U.VAL, BitWidth); 286 return lhsSext < rhsSext ? -1 : lhsSext > rhsSext; 287 } 288 289 bool lhsNeg = isNegative(); 290 bool rhsNeg = RHS.isNegative(); 291 292 // If the sign bits don't match, then (LHS < RHS) if LHS is negative 293 if (lhsNeg != rhsNeg) 294 return lhsNeg ? -1 : 1; 295 296 // Otherwise we can just use an unsigned comparison, because even negative 297 // numbers compare correctly this way if both have the same signed-ness. 298 return tcCompare(U.pVal, RHS.U.pVal, getNumWords()); 299 } 300 301 void APInt::setBitsSlowCase(unsigned loBit, unsigned hiBit) { 302 unsigned loWord = whichWord(loBit); 303 unsigned hiWord = whichWord(hiBit); 304 305 // Create an initial mask for the low word with zeros below loBit. 306 uint64_t loMask = WORD_MAX << whichBit(loBit); 307 308 // If hiBit is not aligned, we need a high mask. 309 unsigned hiShiftAmt = whichBit(hiBit); 310 if (hiShiftAmt != 0) { 311 // Create a high mask with zeros above hiBit. 312 uint64_t hiMask = WORD_MAX >> (APINT_BITS_PER_WORD - hiShiftAmt); 313 // If loWord and hiWord are equal, then we combine the masks. Otherwise, 314 // set the bits in hiWord. 315 if (hiWord == loWord) 316 loMask &= hiMask; 317 else 318 U.pVal[hiWord] |= hiMask; 319 } 320 // Apply the mask to the low word. 321 U.pVal[loWord] |= loMask; 322 323 // Fill any words between loWord and hiWord with all ones. 324 for (unsigned word = loWord + 1; word < hiWord; ++word) 325 U.pVal[word] = WORD_MAX; 326 } 327 328 /// @brief Toggle every bit to its opposite value. 329 void APInt::flipAllBitsSlowCase() { 330 tcComplement(U.pVal, getNumWords()); 331 clearUnusedBits(); 332 } 333 334 /// Toggle a given bit to its opposite value whose position is given 335 /// as "bitPosition". 336 /// @brief Toggles a given bit to its opposite value. 337 void APInt::flipBit(unsigned bitPosition) { 338 assert(bitPosition < BitWidth && "Out of the bit-width range!"); 339 if ((*this)[bitPosition]) clearBit(bitPosition); 340 else setBit(bitPosition); 341 } 342 343 void APInt::insertBits(const APInt &subBits, unsigned bitPosition) { 344 unsigned subBitWidth = subBits.getBitWidth(); 345 assert(0 < subBitWidth && (subBitWidth + bitPosition) <= BitWidth && 346 "Illegal bit insertion"); 347 348 // Insertion is a direct copy. 349 if (subBitWidth == BitWidth) { 350 *this = subBits; 351 return; 352 } 353 354 // Single word result can be done as a direct bitmask. 355 if (isSingleWord()) { 356 uint64_t mask = WORD_MAX >> (APINT_BITS_PER_WORD - subBitWidth); 357 U.VAL &= ~(mask << bitPosition); 358 U.VAL |= (subBits.U.VAL << bitPosition); 359 return; 360 } 361 362 unsigned loBit = whichBit(bitPosition); 363 unsigned loWord = whichWord(bitPosition); 364 unsigned hi1Word = whichWord(bitPosition + subBitWidth - 1); 365 366 // Insertion within a single word can be done as a direct bitmask. 367 if (loWord == hi1Word) { 368 uint64_t mask = WORD_MAX >> (APINT_BITS_PER_WORD - subBitWidth); 369 U.pVal[loWord] &= ~(mask << loBit); 370 U.pVal[loWord] |= (subBits.U.VAL << loBit); 371 return; 372 } 373 374 // Insert on word boundaries. 375 if (loBit == 0) { 376 // Direct copy whole words. 377 unsigned numWholeSubWords = subBitWidth / APINT_BITS_PER_WORD; 378 memcpy(U.pVal + loWord, subBits.getRawData(), 379 numWholeSubWords * APINT_WORD_SIZE); 380 381 // Mask+insert remaining bits. 382 unsigned remainingBits = subBitWidth % APINT_BITS_PER_WORD; 383 if (remainingBits != 0) { 384 uint64_t mask = WORD_MAX >> (APINT_BITS_PER_WORD - remainingBits); 385 U.pVal[hi1Word] &= ~mask; 386 U.pVal[hi1Word] |= subBits.getWord(subBitWidth - 1); 387 } 388 return; 389 } 390 391 // General case - set/clear individual bits in dst based on src. 392 // TODO - there is scope for optimization here, but at the moment this code 393 // path is barely used so prefer readability over performance. 394 for (unsigned i = 0; i != subBitWidth; ++i) { 395 if (subBits[i]) 396 setBit(bitPosition + i); 397 else 398 clearBit(bitPosition + i); 399 } 400 } 401 402 APInt APInt::extractBits(unsigned numBits, unsigned bitPosition) const { 403 assert(numBits > 0 && "Can't extract zero bits"); 404 assert(bitPosition < BitWidth && (numBits + bitPosition) <= BitWidth && 405 "Illegal bit extraction"); 406 407 if (isSingleWord()) 408 return APInt(numBits, U.VAL >> bitPosition); 409 410 unsigned loBit = whichBit(bitPosition); 411 unsigned loWord = whichWord(bitPosition); 412 unsigned hiWord = whichWord(bitPosition + numBits - 1); 413 414 // Single word result extracting bits from a single word source. 415 if (loWord == hiWord) 416 return APInt(numBits, U.pVal[loWord] >> loBit); 417 418 // Extracting bits that start on a source word boundary can be done 419 // as a fast memory copy. 420 if (loBit == 0) 421 return APInt(numBits, makeArrayRef(U.pVal + loWord, 1 + hiWord - loWord)); 422 423 // General case - shift + copy source words directly into place. 424 APInt Result(numBits, 0); 425 unsigned NumSrcWords = getNumWords(); 426 unsigned NumDstWords = Result.getNumWords(); 427 428 uint64_t *DestPtr = Result.isSingleWord() ? &Result.U.VAL : Result.U.pVal; 429 for (unsigned word = 0; word < NumDstWords; ++word) { 430 uint64_t w0 = U.pVal[loWord + word]; 431 uint64_t w1 = 432 (loWord + word + 1) < NumSrcWords ? U.pVal[loWord + word + 1] : 0; 433 DestPtr[word] = (w0 >> loBit) | (w1 << (APINT_BITS_PER_WORD - loBit)); 434 } 435 436 return Result.clearUnusedBits(); 437 } 438 439 unsigned APInt::getBitsNeeded(StringRef str, uint8_t radix) { 440 assert(!str.empty() && "Invalid string length"); 441 assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 || 442 radix == 36) && 443 "Radix should be 2, 8, 10, 16, or 36!"); 444 445 size_t slen = str.size(); 446 447 // Each computation below needs to know if it's negative. 448 StringRef::iterator p = str.begin(); 449 unsigned isNegative = *p == '-'; 450 if (*p == '-' || *p == '+') { 451 p++; 452 slen--; 453 assert(slen && "String is only a sign, needs a value."); 454 } 455 456 // For radixes of power-of-two values, the bits required is accurately and 457 // easily computed 458 if (radix == 2) 459 return slen + isNegative; 460 if (radix == 8) 461 return slen * 3 + isNegative; 462 if (radix == 16) 463 return slen * 4 + isNegative; 464 465 // FIXME: base 36 466 467 // This is grossly inefficient but accurate. We could probably do something 468 // with a computation of roughly slen*64/20 and then adjust by the value of 469 // the first few digits. But, I'm not sure how accurate that could be. 470 471 // Compute a sufficient number of bits that is always large enough but might 472 // be too large. This avoids the assertion in the constructor. This 473 // calculation doesn't work appropriately for the numbers 0-9, so just use 4 474 // bits in that case. 475 unsigned sufficient 476 = radix == 10? (slen == 1 ? 4 : slen * 64/18) 477 : (slen == 1 ? 7 : slen * 16/3); 478 479 // Convert to the actual binary value. 480 APInt tmp(sufficient, StringRef(p, slen), radix); 481 482 // Compute how many bits are required. If the log is infinite, assume we need 483 // just bit. 484 unsigned log = tmp.logBase2(); 485 if (log == (unsigned)-1) { 486 return isNegative + 1; 487 } else { 488 return isNegative + log + 1; 489 } 490 } 491 492 hash_code llvm::hash_value(const APInt &Arg) { 493 if (Arg.isSingleWord()) 494 return hash_combine(Arg.U.VAL); 495 496 return hash_combine_range(Arg.U.pVal, Arg.U.pVal + Arg.getNumWords()); 497 } 498 499 bool APInt::isSplat(unsigned SplatSizeInBits) const { 500 assert(getBitWidth() % SplatSizeInBits == 0 && 501 "SplatSizeInBits must divide width!"); 502 // We can check that all parts of an integer are equal by making use of a 503 // little trick: rotate and check if it's still the same value. 504 return *this == rotl(SplatSizeInBits); 505 } 506 507 /// This function returns the high "numBits" bits of this APInt. 508 APInt APInt::getHiBits(unsigned numBits) const { 509 return this->lshr(BitWidth - numBits); 510 } 511 512 /// This function returns the low "numBits" bits of this APInt. 513 APInt APInt::getLoBits(unsigned numBits) const { 514 APInt Result(getLowBitsSet(BitWidth, numBits)); 515 Result &= *this; 516 return Result; 517 } 518 519 /// Return a value containing V broadcasted over NewLen bits. 520 APInt APInt::getSplat(unsigned NewLen, const APInt &V) { 521 assert(NewLen >= V.getBitWidth() && "Can't splat to smaller bit width!"); 522 523 APInt Val = V.zextOrSelf(NewLen); 524 for (unsigned I = V.getBitWidth(); I < NewLen; I <<= 1) 525 Val |= Val << I; 526 527 return Val; 528 } 529 530 unsigned APInt::countLeadingZerosSlowCase() const { 531 unsigned Count = 0; 532 for (int i = getNumWords()-1; i >= 0; --i) { 533 uint64_t V = U.pVal[i]; 534 if (V == 0) 535 Count += APINT_BITS_PER_WORD; 536 else { 537 Count += llvm::countLeadingZeros(V); 538 break; 539 } 540 } 541 // Adjust for unused bits in the most significant word (they are zero). 542 unsigned Mod = BitWidth % APINT_BITS_PER_WORD; 543 Count -= Mod > 0 ? APINT_BITS_PER_WORD - Mod : 0; 544 return Count; 545 } 546 547 unsigned APInt::countLeadingOnesSlowCase() const { 548 unsigned highWordBits = BitWidth % APINT_BITS_PER_WORD; 549 unsigned shift; 550 if (!highWordBits) { 551 highWordBits = APINT_BITS_PER_WORD; 552 shift = 0; 553 } else { 554 shift = APINT_BITS_PER_WORD - highWordBits; 555 } 556 int i = getNumWords() - 1; 557 unsigned Count = llvm::countLeadingOnes(U.pVal[i] << shift); 558 if (Count == highWordBits) { 559 for (i--; i >= 0; --i) { 560 if (U.pVal[i] == WORD_MAX) 561 Count += APINT_BITS_PER_WORD; 562 else { 563 Count += llvm::countLeadingOnes(U.pVal[i]); 564 break; 565 } 566 } 567 } 568 return Count; 569 } 570 571 unsigned APInt::countTrailingZerosSlowCase() const { 572 unsigned Count = 0; 573 unsigned i = 0; 574 for (; i < getNumWords() && U.pVal[i] == 0; ++i) 575 Count += APINT_BITS_PER_WORD; 576 if (i < getNumWords()) 577 Count += llvm::countTrailingZeros(U.pVal[i]); 578 return std::min(Count, BitWidth); 579 } 580 581 unsigned APInt::countTrailingOnesSlowCase() const { 582 unsigned Count = 0; 583 unsigned i = 0; 584 for (; i < getNumWords() && U.pVal[i] == WORD_MAX; ++i) 585 Count += APINT_BITS_PER_WORD; 586 if (i < getNumWords()) 587 Count += llvm::countTrailingOnes(U.pVal[i]); 588 assert(Count <= BitWidth); 589 return Count; 590 } 591 592 unsigned APInt::countPopulationSlowCase() const { 593 unsigned Count = 0; 594 for (unsigned i = 0; i < getNumWords(); ++i) 595 Count += llvm::countPopulation(U.pVal[i]); 596 return Count; 597 } 598 599 bool APInt::intersectsSlowCase(const APInt &RHS) const { 600 for (unsigned i = 0, e = getNumWords(); i != e; ++i) 601 if ((U.pVal[i] & RHS.U.pVal[i]) != 0) 602 return true; 603 604 return false; 605 } 606 607 bool APInt::isSubsetOfSlowCase(const APInt &RHS) const { 608 for (unsigned i = 0, e = getNumWords(); i != e; ++i) 609 if ((U.pVal[i] & ~RHS.U.pVal[i]) != 0) 610 return false; 611 612 return true; 613 } 614 615 APInt APInt::byteSwap() const { 616 assert(BitWidth >= 16 && BitWidth % 16 == 0 && "Cannot byteswap!"); 617 if (BitWidth == 16) 618 return APInt(BitWidth, ByteSwap_16(uint16_t(U.VAL))); 619 if (BitWidth == 32) 620 return APInt(BitWidth, ByteSwap_32(unsigned(U.VAL))); 621 if (BitWidth == 48) { 622 unsigned Tmp1 = unsigned(U.VAL >> 16); 623 Tmp1 = ByteSwap_32(Tmp1); 624 uint16_t Tmp2 = uint16_t(U.VAL); 625 Tmp2 = ByteSwap_16(Tmp2); 626 return APInt(BitWidth, (uint64_t(Tmp2) << 32) | Tmp1); 627 } 628 if (BitWidth == 64) 629 return APInt(BitWidth, ByteSwap_64(U.VAL)); 630 631 APInt Result(getNumWords() * APINT_BITS_PER_WORD, 0); 632 for (unsigned I = 0, N = getNumWords(); I != N; ++I) 633 Result.U.pVal[I] = ByteSwap_64(U.pVal[N - I - 1]); 634 if (Result.BitWidth != BitWidth) { 635 Result.lshrInPlace(Result.BitWidth - BitWidth); 636 Result.BitWidth = BitWidth; 637 } 638 return Result; 639 } 640 641 APInt APInt::reverseBits() const { 642 switch (BitWidth) { 643 case 64: 644 return APInt(BitWidth, llvm::reverseBits<uint64_t>(U.VAL)); 645 case 32: 646 return APInt(BitWidth, llvm::reverseBits<uint32_t>(U.VAL)); 647 case 16: 648 return APInt(BitWidth, llvm::reverseBits<uint16_t>(U.VAL)); 649 case 8: 650 return APInt(BitWidth, llvm::reverseBits<uint8_t>(U.VAL)); 651 default: 652 break; 653 } 654 655 APInt Val(*this); 656 APInt Reversed(BitWidth, 0); 657 unsigned S = BitWidth; 658 659 for (; Val != 0; Val.lshrInPlace(1)) { 660 Reversed <<= 1; 661 Reversed |= Val[0]; 662 --S; 663 } 664 665 Reversed <<= S; 666 return Reversed; 667 } 668 669 APInt llvm::APIntOps::GreatestCommonDivisor(APInt A, APInt B) { 670 // Fast-path a common case. 671 if (A == B) return A; 672 673 // Corner cases: if either operand is zero, the other is the gcd. 674 if (!A) return B; 675 if (!B) return A; 676 677 // Count common powers of 2 and remove all other powers of 2. 678 unsigned Pow2; 679 { 680 unsigned Pow2_A = A.countTrailingZeros(); 681 unsigned Pow2_B = B.countTrailingZeros(); 682 if (Pow2_A > Pow2_B) { 683 A.lshrInPlace(Pow2_A - Pow2_B); 684 Pow2 = Pow2_B; 685 } else if (Pow2_B > Pow2_A) { 686 B.lshrInPlace(Pow2_B - Pow2_A); 687 Pow2 = Pow2_A; 688 } else { 689 Pow2 = Pow2_A; 690 } 691 } 692 693 // Both operands are odd multiples of 2^Pow_2: 694 // 695 // gcd(a, b) = gcd(|a - b| / 2^i, min(a, b)) 696 // 697 // This is a modified version of Stein's algorithm, taking advantage of 698 // efficient countTrailingZeros(). 699 while (A != B) { 700 if (A.ugt(B)) { 701 A -= B; 702 A.lshrInPlace(A.countTrailingZeros() - Pow2); 703 } else { 704 B -= A; 705 B.lshrInPlace(B.countTrailingZeros() - Pow2); 706 } 707 } 708 709 return A; 710 } 711 712 APInt llvm::APIntOps::RoundDoubleToAPInt(double Double, unsigned width) { 713 union { 714 double D; 715 uint64_t I; 716 } T; 717 T.D = Double; 718 719 // Get the sign bit from the highest order bit 720 bool isNeg = T.I >> 63; 721 722 // Get the 11-bit exponent and adjust for the 1023 bit bias 723 int64_t exp = ((T.I >> 52) & 0x7ff) - 1023; 724 725 // If the exponent is negative, the value is < 0 so just return 0. 726 if (exp < 0) 727 return APInt(width, 0u); 728 729 // Extract the mantissa by clearing the top 12 bits (sign + exponent). 730 uint64_t mantissa = (T.I & (~0ULL >> 12)) | 1ULL << 52; 731 732 // If the exponent doesn't shift all bits out of the mantissa 733 if (exp < 52) 734 return isNeg ? -APInt(width, mantissa >> (52 - exp)) : 735 APInt(width, mantissa >> (52 - exp)); 736 737 // If the client didn't provide enough bits for us to shift the mantissa into 738 // then the result is undefined, just return 0 739 if (width <= exp - 52) 740 return APInt(width, 0); 741 742 // Otherwise, we have to shift the mantissa bits up to the right location 743 APInt Tmp(width, mantissa); 744 Tmp <<= (unsigned)exp - 52; 745 return isNeg ? -Tmp : Tmp; 746 } 747 748 /// This function converts this APInt to a double. 749 /// The layout for double is as following (IEEE Standard 754): 750 /// -------------------------------------- 751 /// | Sign Exponent Fraction Bias | 752 /// |-------------------------------------- | 753 /// | 1[63] 11[62-52] 52[51-00] 1023 | 754 /// -------------------------------------- 755 double APInt::roundToDouble(bool isSigned) const { 756 757 // Handle the simple case where the value is contained in one uint64_t. 758 // It is wrong to optimize getWord(0) to VAL; there might be more than one word. 759 if (isSingleWord() || getActiveBits() <= APINT_BITS_PER_WORD) { 760 if (isSigned) { 761 int64_t sext = SignExtend64(getWord(0), BitWidth); 762 return double(sext); 763 } else 764 return double(getWord(0)); 765 } 766 767 // Determine if the value is negative. 768 bool isNeg = isSigned ? (*this)[BitWidth-1] : false; 769 770 // Construct the absolute value if we're negative. 771 APInt Tmp(isNeg ? -(*this) : (*this)); 772 773 // Figure out how many bits we're using. 774 unsigned n = Tmp.getActiveBits(); 775 776 // The exponent (without bias normalization) is just the number of bits 777 // we are using. Note that the sign bit is gone since we constructed the 778 // absolute value. 779 uint64_t exp = n; 780 781 // Return infinity for exponent overflow 782 if (exp > 1023) { 783 if (!isSigned || !isNeg) 784 return std::numeric_limits<double>::infinity(); 785 else 786 return -std::numeric_limits<double>::infinity(); 787 } 788 exp += 1023; // Increment for 1023 bias 789 790 // Number of bits in mantissa is 52. To obtain the mantissa value, we must 791 // extract the high 52 bits from the correct words in pVal. 792 uint64_t mantissa; 793 unsigned hiWord = whichWord(n-1); 794 if (hiWord == 0) { 795 mantissa = Tmp.U.pVal[0]; 796 if (n > 52) 797 mantissa >>= n - 52; // shift down, we want the top 52 bits. 798 } else { 799 assert(hiWord > 0 && "huh?"); 800 uint64_t hibits = Tmp.U.pVal[hiWord] << (52 - n % APINT_BITS_PER_WORD); 801 uint64_t lobits = Tmp.U.pVal[hiWord-1] >> (11 + n % APINT_BITS_PER_WORD); 802 mantissa = hibits | lobits; 803 } 804 805 // The leading bit of mantissa is implicit, so get rid of it. 806 uint64_t sign = isNeg ? (1ULL << (APINT_BITS_PER_WORD - 1)) : 0; 807 union { 808 double D; 809 uint64_t I; 810 } T; 811 T.I = sign | (exp << 52) | mantissa; 812 return T.D; 813 } 814 815 // Truncate to new width. 816 APInt APInt::trunc(unsigned width) const { 817 assert(width < BitWidth && "Invalid APInt Truncate request"); 818 assert(width && "Can't truncate to 0 bits"); 819 820 if (width <= APINT_BITS_PER_WORD) 821 return APInt(width, getRawData()[0]); 822 823 APInt Result(getMemory(getNumWords(width)), width); 824 825 // Copy full words. 826 unsigned i; 827 for (i = 0; i != width / APINT_BITS_PER_WORD; i++) 828 Result.U.pVal[i] = U.pVal[i]; 829 830 // Truncate and copy any partial word. 831 unsigned bits = (0 - width) % APINT_BITS_PER_WORD; 832 if (bits != 0) 833 Result.U.pVal[i] = U.pVal[i] << bits >> bits; 834 835 return Result; 836 } 837 838 // Sign extend to a new width. 839 APInt APInt::sext(unsigned Width) const { 840 assert(Width > BitWidth && "Invalid APInt SignExtend request"); 841 842 if (Width <= APINT_BITS_PER_WORD) 843 return APInt(Width, SignExtend64(U.VAL, BitWidth)); 844 845 APInt Result(getMemory(getNumWords(Width)), Width); 846 847 // Copy words. 848 std::memcpy(Result.U.pVal, getRawData(), getNumWords() * APINT_WORD_SIZE); 849 850 // Sign extend the last word since there may be unused bits in the input. 851 Result.U.pVal[getNumWords() - 1] = 852 SignExtend64(Result.U.pVal[getNumWords() - 1], 853 ((BitWidth - 1) % APINT_BITS_PER_WORD) + 1); 854 855 // Fill with sign bits. 856 std::memset(Result.U.pVal + getNumWords(), isNegative() ? -1 : 0, 857 (Result.getNumWords() - getNumWords()) * APINT_WORD_SIZE); 858 Result.clearUnusedBits(); 859 return Result; 860 } 861 862 // Zero extend to a new width. 863 APInt APInt::zext(unsigned width) const { 864 assert(width > BitWidth && "Invalid APInt ZeroExtend request"); 865 866 if (width <= APINT_BITS_PER_WORD) 867 return APInt(width, U.VAL); 868 869 APInt Result(getMemory(getNumWords(width)), width); 870 871 // Copy words. 872 std::memcpy(Result.U.pVal, getRawData(), getNumWords() * APINT_WORD_SIZE); 873 874 // Zero remaining words. 875 std::memset(Result.U.pVal + getNumWords(), 0, 876 (Result.getNumWords() - getNumWords()) * APINT_WORD_SIZE); 877 878 return Result; 879 } 880 881 APInt APInt::zextOrTrunc(unsigned width) const { 882 if (BitWidth < width) 883 return zext(width); 884 if (BitWidth > width) 885 return trunc(width); 886 return *this; 887 } 888 889 APInt APInt::sextOrTrunc(unsigned width) const { 890 if (BitWidth < width) 891 return sext(width); 892 if (BitWidth > width) 893 return trunc(width); 894 return *this; 895 } 896 897 APInt APInt::zextOrSelf(unsigned width) const { 898 if (BitWidth < width) 899 return zext(width); 900 return *this; 901 } 902 903 APInt APInt::sextOrSelf(unsigned width) const { 904 if (BitWidth < width) 905 return sext(width); 906 return *this; 907 } 908 909 /// Arithmetic right-shift this APInt by shiftAmt. 910 /// @brief Arithmetic right-shift function. 911 void APInt::ashrInPlace(const APInt &shiftAmt) { 912 ashrInPlace((unsigned)shiftAmt.getLimitedValue(BitWidth)); 913 } 914 915 /// Arithmetic right-shift this APInt by shiftAmt. 916 /// @brief Arithmetic right-shift function. 917 void APInt::ashrSlowCase(unsigned ShiftAmt) { 918 // Don't bother performing a no-op shift. 919 if (!ShiftAmt) 920 return; 921 922 // Save the original sign bit for later. 923 bool Negative = isNegative(); 924 925 // WordShift is the inter-part shift; BitShift is intra-part shift. 926 unsigned WordShift = ShiftAmt / APINT_BITS_PER_WORD; 927 unsigned BitShift = ShiftAmt % APINT_BITS_PER_WORD; 928 929 unsigned WordsToMove = getNumWords() - WordShift; 930 if (WordsToMove != 0) { 931 // Sign extend the last word to fill in the unused bits. 932 U.pVal[getNumWords() - 1] = SignExtend64( 933 U.pVal[getNumWords() - 1], ((BitWidth - 1) % APINT_BITS_PER_WORD) + 1); 934 935 // Fastpath for moving by whole words. 936 if (BitShift == 0) { 937 std::memmove(U.pVal, U.pVal + WordShift, WordsToMove * APINT_WORD_SIZE); 938 } else { 939 // Move the words containing significant bits. 940 for (unsigned i = 0; i != WordsToMove - 1; ++i) 941 U.pVal[i] = (U.pVal[i + WordShift] >> BitShift) | 942 (U.pVal[i + WordShift + 1] << (APINT_BITS_PER_WORD - BitShift)); 943 944 // Handle the last word which has no high bits to copy. 945 U.pVal[WordsToMove - 1] = U.pVal[WordShift + WordsToMove - 1] >> BitShift; 946 // Sign extend one more time. 947 U.pVal[WordsToMove - 1] = 948 SignExtend64(U.pVal[WordsToMove - 1], APINT_BITS_PER_WORD - BitShift); 949 } 950 } 951 952 // Fill in the remainder based on the original sign. 953 std::memset(U.pVal + WordsToMove, Negative ? -1 : 0, 954 WordShift * APINT_WORD_SIZE); 955 clearUnusedBits(); 956 } 957 958 /// Logical right-shift this APInt by shiftAmt. 959 /// @brief Logical right-shift function. 960 void APInt::lshrInPlace(const APInt &shiftAmt) { 961 lshrInPlace((unsigned)shiftAmt.getLimitedValue(BitWidth)); 962 } 963 964 /// Logical right-shift this APInt by shiftAmt. 965 /// @brief Logical right-shift function. 966 void APInt::lshrSlowCase(unsigned ShiftAmt) { 967 tcShiftRight(U.pVal, getNumWords(), ShiftAmt); 968 } 969 970 /// Left-shift this APInt by shiftAmt. 971 /// @brief Left-shift function. 972 APInt &APInt::operator<<=(const APInt &shiftAmt) { 973 // It's undefined behavior in C to shift by BitWidth or greater. 974 *this <<= (unsigned)shiftAmt.getLimitedValue(BitWidth); 975 return *this; 976 } 977 978 void APInt::shlSlowCase(unsigned ShiftAmt) { 979 tcShiftLeft(U.pVal, getNumWords(), ShiftAmt); 980 clearUnusedBits(); 981 } 982 983 // Calculate the rotate amount modulo the bit width. 984 static unsigned rotateModulo(unsigned BitWidth, const APInt &rotateAmt) { 985 unsigned rotBitWidth = rotateAmt.getBitWidth(); 986 APInt rot = rotateAmt; 987 if (rotBitWidth < BitWidth) { 988 // Extend the rotate APInt, so that the urem doesn't divide by 0. 989 // e.g. APInt(1, 32) would give APInt(1, 0). 990 rot = rotateAmt.zext(BitWidth); 991 } 992 rot = rot.urem(APInt(rot.getBitWidth(), BitWidth)); 993 return rot.getLimitedValue(BitWidth); 994 } 995 996 APInt APInt::rotl(const APInt &rotateAmt) const { 997 return rotl(rotateModulo(BitWidth, rotateAmt)); 998 } 999 1000 APInt APInt::rotl(unsigned rotateAmt) const { 1001 rotateAmt %= BitWidth; 1002 if (rotateAmt == 0) 1003 return *this; 1004 return shl(rotateAmt) | lshr(BitWidth - rotateAmt); 1005 } 1006 1007 APInt APInt::rotr(const APInt &rotateAmt) const { 1008 return rotr(rotateModulo(BitWidth, rotateAmt)); 1009 } 1010 1011 APInt APInt::rotr(unsigned rotateAmt) const { 1012 rotateAmt %= BitWidth; 1013 if (rotateAmt == 0) 1014 return *this; 1015 return lshr(rotateAmt) | shl(BitWidth - rotateAmt); 1016 } 1017 1018 // Square Root - this method computes and returns the square root of "this". 1019 // Three mechanisms are used for computation. For small values (<= 5 bits), 1020 // a table lookup is done. This gets some performance for common cases. For 1021 // values using less than 52 bits, the value is converted to double and then 1022 // the libc sqrt function is called. The result is rounded and then converted 1023 // back to a uint64_t which is then used to construct the result. Finally, 1024 // the Babylonian method for computing square roots is used. 1025 APInt APInt::sqrt() const { 1026 1027 // Determine the magnitude of the value. 1028 unsigned magnitude = getActiveBits(); 1029 1030 // Use a fast table for some small values. This also gets rid of some 1031 // rounding errors in libc sqrt for small values. 1032 if (magnitude <= 5) { 1033 static const uint8_t results[32] = { 1034 /* 0 */ 0, 1035 /* 1- 2 */ 1, 1, 1036 /* 3- 6 */ 2, 2, 2, 2, 1037 /* 7-12 */ 3, 3, 3, 3, 3, 3, 1038 /* 13-20 */ 4, 4, 4, 4, 4, 4, 4, 4, 1039 /* 21-30 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1040 /* 31 */ 6 1041 }; 1042 return APInt(BitWidth, results[ (isSingleWord() ? U.VAL : U.pVal[0]) ]); 1043 } 1044 1045 // If the magnitude of the value fits in less than 52 bits (the precision of 1046 // an IEEE double precision floating point value), then we can use the 1047 // libc sqrt function which will probably use a hardware sqrt computation. 1048 // This should be faster than the algorithm below. 1049 if (magnitude < 52) { 1050 return APInt(BitWidth, 1051 uint64_t(::round(::sqrt(double(isSingleWord() ? U.VAL 1052 : U.pVal[0]))))); 1053 } 1054 1055 // Okay, all the short cuts are exhausted. We must compute it. The following 1056 // is a classical Babylonian method for computing the square root. This code 1057 // was adapted to APInt from a wikipedia article on such computations. 1058 // See http://www.wikipedia.org/ and go to the page named 1059 // Calculate_an_integer_square_root. 1060 unsigned nbits = BitWidth, i = 4; 1061 APInt testy(BitWidth, 16); 1062 APInt x_old(BitWidth, 1); 1063 APInt x_new(BitWidth, 0); 1064 APInt two(BitWidth, 2); 1065 1066 // Select a good starting value using binary logarithms. 1067 for (;; i += 2, testy = testy.shl(2)) 1068 if (i >= nbits || this->ule(testy)) { 1069 x_old = x_old.shl(i / 2); 1070 break; 1071 } 1072 1073 // Use the Babylonian method to arrive at the integer square root: 1074 for (;;) { 1075 x_new = (this->udiv(x_old) + x_old).udiv(two); 1076 if (x_old.ule(x_new)) 1077 break; 1078 x_old = x_new; 1079 } 1080 1081 // Make sure we return the closest approximation 1082 // NOTE: The rounding calculation below is correct. It will produce an 1083 // off-by-one discrepancy with results from pari/gp. That discrepancy has been 1084 // determined to be a rounding issue with pari/gp as it begins to use a 1085 // floating point representation after 192 bits. There are no discrepancies 1086 // between this algorithm and pari/gp for bit widths < 192 bits. 1087 APInt square(x_old * x_old); 1088 APInt nextSquare((x_old + 1) * (x_old +1)); 1089 if (this->ult(square)) 1090 return x_old; 1091 assert(this->ule(nextSquare) && "Error in APInt::sqrt computation"); 1092 APInt midpoint((nextSquare - square).udiv(two)); 1093 APInt offset(*this - square); 1094 if (offset.ult(midpoint)) 1095 return x_old; 1096 return x_old + 1; 1097 } 1098 1099 /// Computes the multiplicative inverse of this APInt for a given modulo. The 1100 /// iterative extended Euclidean algorithm is used to solve for this value, 1101 /// however we simplify it to speed up calculating only the inverse, and take 1102 /// advantage of div+rem calculations. We also use some tricks to avoid copying 1103 /// (potentially large) APInts around. 1104 APInt APInt::multiplicativeInverse(const APInt& modulo) const { 1105 assert(ult(modulo) && "This APInt must be smaller than the modulo"); 1106 1107 // Using the properties listed at the following web page (accessed 06/21/08): 1108 // http://www.numbertheory.org/php/euclid.html 1109 // (especially the properties numbered 3, 4 and 9) it can be proved that 1110 // BitWidth bits suffice for all the computations in the algorithm implemented 1111 // below. More precisely, this number of bits suffice if the multiplicative 1112 // inverse exists, but may not suffice for the general extended Euclidean 1113 // algorithm. 1114 1115 APInt r[2] = { modulo, *this }; 1116 APInt t[2] = { APInt(BitWidth, 0), APInt(BitWidth, 1) }; 1117 APInt q(BitWidth, 0); 1118 1119 unsigned i; 1120 for (i = 0; r[i^1] != 0; i ^= 1) { 1121 // An overview of the math without the confusing bit-flipping: 1122 // q = r[i-2] / r[i-1] 1123 // r[i] = r[i-2] % r[i-1] 1124 // t[i] = t[i-2] - t[i-1] * q 1125 udivrem(r[i], r[i^1], q, r[i]); 1126 t[i] -= t[i^1] * q; 1127 } 1128 1129 // If this APInt and the modulo are not coprime, there is no multiplicative 1130 // inverse, so return 0. We check this by looking at the next-to-last 1131 // remainder, which is the gcd(*this,modulo) as calculated by the Euclidean 1132 // algorithm. 1133 if (r[i] != 1) 1134 return APInt(BitWidth, 0); 1135 1136 // The next-to-last t is the multiplicative inverse. However, we are 1137 // interested in a positive inverse. Calculate a positive one from a negative 1138 // one if necessary. A simple addition of the modulo suffices because 1139 // abs(t[i]) is known to be less than *this/2 (see the link above). 1140 if (t[i].isNegative()) 1141 t[i] += modulo; 1142 1143 return std::move(t[i]); 1144 } 1145 1146 /// Calculate the magic numbers required to implement a signed integer division 1147 /// by a constant as a sequence of multiplies, adds and shifts. Requires that 1148 /// the divisor not be 0, 1, or -1. Taken from "Hacker's Delight", Henry S. 1149 /// Warren, Jr., chapter 10. 1150 APInt::ms APInt::magic() const { 1151 const APInt& d = *this; 1152 unsigned p; 1153 APInt ad, anc, delta, q1, r1, q2, r2, t; 1154 APInt signedMin = APInt::getSignedMinValue(d.getBitWidth()); 1155 struct ms mag; 1156 1157 ad = d.abs(); 1158 t = signedMin + (d.lshr(d.getBitWidth() - 1)); 1159 anc = t - 1 - t.urem(ad); // absolute value of nc 1160 p = d.getBitWidth() - 1; // initialize p 1161 q1 = signedMin.udiv(anc); // initialize q1 = 2p/abs(nc) 1162 r1 = signedMin - q1*anc; // initialize r1 = rem(2p,abs(nc)) 1163 q2 = signedMin.udiv(ad); // initialize q2 = 2p/abs(d) 1164 r2 = signedMin - q2*ad; // initialize r2 = rem(2p,abs(d)) 1165 do { 1166 p = p + 1; 1167 q1 = q1<<1; // update q1 = 2p/abs(nc) 1168 r1 = r1<<1; // update r1 = rem(2p/abs(nc)) 1169 if (r1.uge(anc)) { // must be unsigned comparison 1170 q1 = q1 + 1; 1171 r1 = r1 - anc; 1172 } 1173 q2 = q2<<1; // update q2 = 2p/abs(d) 1174 r2 = r2<<1; // update r2 = rem(2p/abs(d)) 1175 if (r2.uge(ad)) { // must be unsigned comparison 1176 q2 = q2 + 1; 1177 r2 = r2 - ad; 1178 } 1179 delta = ad - r2; 1180 } while (q1.ult(delta) || (q1 == delta && r1 == 0)); 1181 1182 mag.m = q2 + 1; 1183 if (d.isNegative()) mag.m = -mag.m; // resulting magic number 1184 mag.s = p - d.getBitWidth(); // resulting shift 1185 return mag; 1186 } 1187 1188 /// Calculate the magic numbers required to implement an unsigned integer 1189 /// division by a constant as a sequence of multiplies, adds and shifts. 1190 /// Requires that the divisor not be 0. Taken from "Hacker's Delight", Henry 1191 /// S. Warren, Jr., chapter 10. 1192 /// LeadingZeros can be used to simplify the calculation if the upper bits 1193 /// of the divided value are known zero. 1194 APInt::mu APInt::magicu(unsigned LeadingZeros) const { 1195 const APInt& d = *this; 1196 unsigned p; 1197 APInt nc, delta, q1, r1, q2, r2; 1198 struct mu magu; 1199 magu.a = 0; // initialize "add" indicator 1200 APInt allOnes = APInt::getAllOnesValue(d.getBitWidth()).lshr(LeadingZeros); 1201 APInt signedMin = APInt::getSignedMinValue(d.getBitWidth()); 1202 APInt signedMax = APInt::getSignedMaxValue(d.getBitWidth()); 1203 1204 nc = allOnes - (allOnes - d).urem(d); 1205 p = d.getBitWidth() - 1; // initialize p 1206 q1 = signedMin.udiv(nc); // initialize q1 = 2p/nc 1207 r1 = signedMin - q1*nc; // initialize r1 = rem(2p,nc) 1208 q2 = signedMax.udiv(d); // initialize q2 = (2p-1)/d 1209 r2 = signedMax - q2*d; // initialize r2 = rem((2p-1),d) 1210 do { 1211 p = p + 1; 1212 if (r1.uge(nc - r1)) { 1213 q1 = q1 + q1 + 1; // update q1 1214 r1 = r1 + r1 - nc; // update r1 1215 } 1216 else { 1217 q1 = q1+q1; // update q1 1218 r1 = r1+r1; // update r1 1219 } 1220 if ((r2 + 1).uge(d - r2)) { 1221 if (q2.uge(signedMax)) magu.a = 1; 1222 q2 = q2+q2 + 1; // update q2 1223 r2 = r2+r2 + 1 - d; // update r2 1224 } 1225 else { 1226 if (q2.uge(signedMin)) magu.a = 1; 1227 q2 = q2+q2; // update q2 1228 r2 = r2+r2 + 1; // update r2 1229 } 1230 delta = d - 1 - r2; 1231 } while (p < d.getBitWidth()*2 && 1232 (q1.ult(delta) || (q1 == delta && r1 == 0))); 1233 magu.m = q2 + 1; // resulting magic number 1234 magu.s = p - d.getBitWidth(); // resulting shift 1235 return magu; 1236 } 1237 1238 /// Implementation of Knuth's Algorithm D (Division of nonnegative integers) 1239 /// from "Art of Computer Programming, Volume 2", section 4.3.1, p. 272. The 1240 /// variables here have the same names as in the algorithm. Comments explain 1241 /// the algorithm and any deviation from it. 1242 static void KnuthDiv(uint32_t *u, uint32_t *v, uint32_t *q, uint32_t* r, 1243 unsigned m, unsigned n) { 1244 assert(u && "Must provide dividend"); 1245 assert(v && "Must provide divisor"); 1246 assert(q && "Must provide quotient"); 1247 assert(u != v && u != q && v != q && "Must use different memory"); 1248 assert(n>1 && "n must be > 1"); 1249 1250 // b denotes the base of the number system. In our case b is 2^32. 1251 const uint64_t b = uint64_t(1) << 32; 1252 1253 // The DEBUG macros here tend to be spam in the debug output if you're not 1254 // debugging this code. Disable them unless KNUTH_DEBUG is defined. 1255 #pragma push_macro("DEBUG") 1256 #ifndef KNUTH_DEBUG 1257 #undef DEBUG 1258 #define DEBUG(X) do {} while (false) 1259 #endif 1260 1261 DEBUG(dbgs() << "KnuthDiv: m=" << m << " n=" << n << '\n'); 1262 DEBUG(dbgs() << "KnuthDiv: original:"); 1263 DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]); 1264 DEBUG(dbgs() << " by"); 1265 DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]); 1266 DEBUG(dbgs() << '\n'); 1267 // D1. [Normalize.] Set d = b / (v[n-1] + 1) and multiply all the digits of 1268 // u and v by d. Note that we have taken Knuth's advice here to use a power 1269 // of 2 value for d such that d * v[n-1] >= b/2 (b is the base). A power of 1270 // 2 allows us to shift instead of multiply and it is easy to determine the 1271 // shift amount from the leading zeros. We are basically normalizing the u 1272 // and v so that its high bits are shifted to the top of v's range without 1273 // overflow. Note that this can require an extra word in u so that u must 1274 // be of length m+n+1. 1275 unsigned shift = countLeadingZeros(v[n-1]); 1276 uint32_t v_carry = 0; 1277 uint32_t u_carry = 0; 1278 if (shift) { 1279 for (unsigned i = 0; i < m+n; ++i) { 1280 uint32_t u_tmp = u[i] >> (32 - shift); 1281 u[i] = (u[i] << shift) | u_carry; 1282 u_carry = u_tmp; 1283 } 1284 for (unsigned i = 0; i < n; ++i) { 1285 uint32_t v_tmp = v[i] >> (32 - shift); 1286 v[i] = (v[i] << shift) | v_carry; 1287 v_carry = v_tmp; 1288 } 1289 } 1290 u[m+n] = u_carry; 1291 1292 DEBUG(dbgs() << "KnuthDiv: normal:"); 1293 DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]); 1294 DEBUG(dbgs() << " by"); 1295 DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]); 1296 DEBUG(dbgs() << '\n'); 1297 1298 // D2. [Initialize j.] Set j to m. This is the loop counter over the places. 1299 int j = m; 1300 do { 1301 DEBUG(dbgs() << "KnuthDiv: quotient digit #" << j << '\n'); 1302 // D3. [Calculate q'.]. 1303 // Set qp = (u[j+n]*b + u[j+n-1]) / v[n-1]. (qp=qprime=q') 1304 // Set rp = (u[j+n]*b + u[j+n-1]) % v[n-1]. (rp=rprime=r') 1305 // Now test if qp == b or qp*v[n-2] > b*rp + u[j+n-2]; if so, decrease 1306 // qp by 1, increase rp by v[n-1], and repeat this test if rp < b. The test 1307 // on v[n-2] determines at high speed most of the cases in which the trial 1308 // value qp is one too large, and it eliminates all cases where qp is two 1309 // too large. 1310 uint64_t dividend = Make_64(u[j+n], u[j+n-1]); 1311 DEBUG(dbgs() << "KnuthDiv: dividend == " << dividend << '\n'); 1312 uint64_t qp = dividend / v[n-1]; 1313 uint64_t rp = dividend % v[n-1]; 1314 if (qp == b || qp*v[n-2] > b*rp + u[j+n-2]) { 1315 qp--; 1316 rp += v[n-1]; 1317 if (rp < b && (qp == b || qp*v[n-2] > b*rp + u[j+n-2])) 1318 qp--; 1319 } 1320 DEBUG(dbgs() << "KnuthDiv: qp == " << qp << ", rp == " << rp << '\n'); 1321 1322 // D4. [Multiply and subtract.] Replace (u[j+n]u[j+n-1]...u[j]) with 1323 // (u[j+n]u[j+n-1]..u[j]) - qp * (v[n-1]...v[1]v[0]). This computation 1324 // consists of a simple multiplication by a one-place number, combined with 1325 // a subtraction. 1326 // The digits (u[j+n]...u[j]) should be kept positive; if the result of 1327 // this step is actually negative, (u[j+n]...u[j]) should be left as the 1328 // true value plus b**(n+1), namely as the b's complement of 1329 // the true value, and a "borrow" to the left should be remembered. 1330 int64_t borrow = 0; 1331 for (unsigned i = 0; i < n; ++i) { 1332 uint64_t p = uint64_t(qp) * uint64_t(v[i]); 1333 int64_t subres = int64_t(u[j+i]) - borrow - Lo_32(p); 1334 u[j+i] = Lo_32(subres); 1335 borrow = Hi_32(p) - Hi_32(subres); 1336 DEBUG(dbgs() << "KnuthDiv: u[j+i] = " << u[j+i] 1337 << ", borrow = " << borrow << '\n'); 1338 } 1339 bool isNeg = u[j+n] < borrow; 1340 u[j+n] -= Lo_32(borrow); 1341 1342 DEBUG(dbgs() << "KnuthDiv: after subtraction:"); 1343 DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]); 1344 DEBUG(dbgs() << '\n'); 1345 1346 // D5. [Test remainder.] Set q[j] = qp. If the result of step D4 was 1347 // negative, go to step D6; otherwise go on to step D7. 1348 q[j] = Lo_32(qp); 1349 if (isNeg) { 1350 // D6. [Add back]. The probability that this step is necessary is very 1351 // small, on the order of only 2/b. Make sure that test data accounts for 1352 // this possibility. Decrease q[j] by 1 1353 q[j]--; 1354 // and add (0v[n-1]...v[1]v[0]) to (u[j+n]u[j+n-1]...u[j+1]u[j]). 1355 // A carry will occur to the left of u[j+n], and it should be ignored 1356 // since it cancels with the borrow that occurred in D4. 1357 bool carry = false; 1358 for (unsigned i = 0; i < n; i++) { 1359 uint32_t limit = std::min(u[j+i],v[i]); 1360 u[j+i] += v[i] + carry; 1361 carry = u[j+i] < limit || (carry && u[j+i] == limit); 1362 } 1363 u[j+n] += carry; 1364 } 1365 DEBUG(dbgs() << "KnuthDiv: after correction:"); 1366 DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]); 1367 DEBUG(dbgs() << "\nKnuthDiv: digit result = " << q[j] << '\n'); 1368 1369 // D7. [Loop on j.] Decrease j by one. Now if j >= 0, go back to D3. 1370 } while (--j >= 0); 1371 1372 DEBUG(dbgs() << "KnuthDiv: quotient:"); 1373 DEBUG(for (int i = m; i >=0; i--) dbgs() <<" " << q[i]); 1374 DEBUG(dbgs() << '\n'); 1375 1376 // D8. [Unnormalize]. Now q[...] is the desired quotient, and the desired 1377 // remainder may be obtained by dividing u[...] by d. If r is non-null we 1378 // compute the remainder (urem uses this). 1379 if (r) { 1380 // The value d is expressed by the "shift" value above since we avoided 1381 // multiplication by d by using a shift left. So, all we have to do is 1382 // shift right here. 1383 if (shift) { 1384 uint32_t carry = 0; 1385 DEBUG(dbgs() << "KnuthDiv: remainder:"); 1386 for (int i = n-1; i >= 0; i--) { 1387 r[i] = (u[i] >> shift) | carry; 1388 carry = u[i] << (32 - shift); 1389 DEBUG(dbgs() << " " << r[i]); 1390 } 1391 } else { 1392 for (int i = n-1; i >= 0; i--) { 1393 r[i] = u[i]; 1394 DEBUG(dbgs() << " " << r[i]); 1395 } 1396 } 1397 DEBUG(dbgs() << '\n'); 1398 } 1399 DEBUG(dbgs() << '\n'); 1400 1401 #pragma pop_macro("DEBUG") 1402 } 1403 1404 void APInt::divide(const WordType *LHS, unsigned lhsWords, const WordType *RHS, 1405 unsigned rhsWords, WordType *Quotient, WordType *Remainder) { 1406 assert(lhsWords >= rhsWords && "Fractional result"); 1407 1408 // First, compose the values into an array of 32-bit words instead of 1409 // 64-bit words. This is a necessity of both the "short division" algorithm 1410 // and the Knuth "classical algorithm" which requires there to be native 1411 // operations for +, -, and * on an m bit value with an m*2 bit result. We 1412 // can't use 64-bit operands here because we don't have native results of 1413 // 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't 1414 // work on large-endian machines. 1415 unsigned n = rhsWords * 2; 1416 unsigned m = (lhsWords * 2) - n; 1417 1418 // Allocate space for the temporary values we need either on the stack, if 1419 // it will fit, or on the heap if it won't. 1420 uint32_t SPACE[128]; 1421 uint32_t *U = nullptr; 1422 uint32_t *V = nullptr; 1423 uint32_t *Q = nullptr; 1424 uint32_t *R = nullptr; 1425 if ((Remainder?4:3)*n+2*m+1 <= 128) { 1426 U = &SPACE[0]; 1427 V = &SPACE[m+n+1]; 1428 Q = &SPACE[(m+n+1) + n]; 1429 if (Remainder) 1430 R = &SPACE[(m+n+1) + n + (m+n)]; 1431 } else { 1432 U = new uint32_t[m + n + 1]; 1433 V = new uint32_t[n]; 1434 Q = new uint32_t[m+n]; 1435 if (Remainder) 1436 R = new uint32_t[n]; 1437 } 1438 1439 // Initialize the dividend 1440 memset(U, 0, (m+n+1)*sizeof(uint32_t)); 1441 for (unsigned i = 0; i < lhsWords; ++i) { 1442 uint64_t tmp = LHS[i]; 1443 U[i * 2] = Lo_32(tmp); 1444 U[i * 2 + 1] = Hi_32(tmp); 1445 } 1446 U[m+n] = 0; // this extra word is for "spill" in the Knuth algorithm. 1447 1448 // Initialize the divisor 1449 memset(V, 0, (n)*sizeof(uint32_t)); 1450 for (unsigned i = 0; i < rhsWords; ++i) { 1451 uint64_t tmp = RHS[i]; 1452 V[i * 2] = Lo_32(tmp); 1453 V[i * 2 + 1] = Hi_32(tmp); 1454 } 1455 1456 // initialize the quotient and remainder 1457 memset(Q, 0, (m+n) * sizeof(uint32_t)); 1458 if (Remainder) 1459 memset(R, 0, n * sizeof(uint32_t)); 1460 1461 // Now, adjust m and n for the Knuth division. n is the number of words in 1462 // the divisor. m is the number of words by which the dividend exceeds the 1463 // divisor (i.e. m+n is the length of the dividend). These sizes must not 1464 // contain any zero words or the Knuth algorithm fails. 1465 for (unsigned i = n; i > 0 && V[i-1] == 0; i--) { 1466 n--; 1467 m++; 1468 } 1469 for (unsigned i = m+n; i > 0 && U[i-1] == 0; i--) 1470 m--; 1471 1472 // If we're left with only a single word for the divisor, Knuth doesn't work 1473 // so we implement the short division algorithm here. This is much simpler 1474 // and faster because we are certain that we can divide a 64-bit quantity 1475 // by a 32-bit quantity at hardware speed and short division is simply a 1476 // series of such operations. This is just like doing short division but we 1477 // are using base 2^32 instead of base 10. 1478 assert(n != 0 && "Divide by zero?"); 1479 if (n == 1) { 1480 uint32_t divisor = V[0]; 1481 uint32_t remainder = 0; 1482 for (int i = m; i >= 0; i--) { 1483 uint64_t partial_dividend = Make_64(remainder, U[i]); 1484 if (partial_dividend == 0) { 1485 Q[i] = 0; 1486 remainder = 0; 1487 } else if (partial_dividend < divisor) { 1488 Q[i] = 0; 1489 remainder = Lo_32(partial_dividend); 1490 } else if (partial_dividend == divisor) { 1491 Q[i] = 1; 1492 remainder = 0; 1493 } else { 1494 Q[i] = Lo_32(partial_dividend / divisor); 1495 remainder = Lo_32(partial_dividend - (Q[i] * divisor)); 1496 } 1497 } 1498 if (R) 1499 R[0] = remainder; 1500 } else { 1501 // Now we're ready to invoke the Knuth classical divide algorithm. In this 1502 // case n > 1. 1503 KnuthDiv(U, V, Q, R, m, n); 1504 } 1505 1506 // If the caller wants the quotient 1507 if (Quotient) { 1508 for (unsigned i = 0; i < lhsWords; ++i) 1509 Quotient[i] = Make_64(Q[i*2+1], Q[i*2]); 1510 } 1511 1512 // If the caller wants the remainder 1513 if (Remainder) { 1514 for (unsigned i = 0; i < rhsWords; ++i) 1515 Remainder[i] = Make_64(R[i*2+1], R[i*2]); 1516 } 1517 1518 // Clean up the memory we allocated. 1519 if (U != &SPACE[0]) { 1520 delete [] U; 1521 delete [] V; 1522 delete [] Q; 1523 delete [] R; 1524 } 1525 } 1526 1527 APInt APInt::udiv(const APInt &RHS) const { 1528 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1529 1530 // First, deal with the easy case 1531 if (isSingleWord()) { 1532 assert(RHS.U.VAL != 0 && "Divide by zero?"); 1533 return APInt(BitWidth, U.VAL / RHS.U.VAL); 1534 } 1535 1536 // Get some facts about the LHS and RHS number of bits and words 1537 unsigned lhsWords = getNumWords(getActiveBits()); 1538 unsigned rhsBits = RHS.getActiveBits(); 1539 unsigned rhsWords = getNumWords(rhsBits); 1540 assert(rhsWords && "Divided by zero???"); 1541 1542 // Deal with some degenerate cases 1543 if (!lhsWords) 1544 // 0 / X ===> 0 1545 return APInt(BitWidth, 0); 1546 if (rhsBits == 1) 1547 // X / 1 ===> X 1548 return *this; 1549 if (lhsWords < rhsWords || this->ult(RHS)) 1550 // X / Y ===> 0, iff X < Y 1551 return APInt(BitWidth, 0); 1552 if (*this == RHS) 1553 // X / X ===> 1 1554 return APInt(BitWidth, 1); 1555 if (lhsWords == 1) // rhsWords is 1 if lhsWords is 1. 1556 // All high words are zero, just use native divide 1557 return APInt(BitWidth, this->U.pVal[0] / RHS.U.pVal[0]); 1558 1559 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1560 APInt Quotient(BitWidth, 0); // to hold result. 1561 divide(U.pVal, lhsWords, RHS.U.pVal, rhsWords, Quotient.U.pVal, nullptr); 1562 return Quotient; 1563 } 1564 1565 APInt APInt::udiv(uint64_t RHS) const { 1566 assert(RHS != 0 && "Divide by zero?"); 1567 1568 // First, deal with the easy case 1569 if (isSingleWord()) 1570 return APInt(BitWidth, U.VAL / RHS); 1571 1572 // Get some facts about the LHS words. 1573 unsigned lhsWords = getNumWords(getActiveBits()); 1574 1575 // Deal with some degenerate cases 1576 if (!lhsWords) 1577 // 0 / X ===> 0 1578 return APInt(BitWidth, 0); 1579 if (RHS == 1) 1580 // X / 1 ===> X 1581 return *this; 1582 if (this->ult(RHS)) 1583 // X / Y ===> 0, iff X < Y 1584 return APInt(BitWidth, 0); 1585 if (*this == RHS) 1586 // X / X ===> 1 1587 return APInt(BitWidth, 1); 1588 if (lhsWords == 1) // rhsWords is 1 if lhsWords is 1. 1589 // All high words are zero, just use native divide 1590 return APInt(BitWidth, this->U.pVal[0] / RHS); 1591 1592 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1593 APInt Quotient(BitWidth, 0); // to hold result. 1594 divide(U.pVal, lhsWords, &RHS, 1, Quotient.U.pVal, nullptr); 1595 return Quotient; 1596 } 1597 1598 APInt APInt::sdiv(const APInt &RHS) const { 1599 if (isNegative()) { 1600 if (RHS.isNegative()) 1601 return (-(*this)).udiv(-RHS); 1602 return -((-(*this)).udiv(RHS)); 1603 } 1604 if (RHS.isNegative()) 1605 return -(this->udiv(-RHS)); 1606 return this->udiv(RHS); 1607 } 1608 1609 APInt APInt::sdiv(int64_t RHS) const { 1610 if (isNegative()) { 1611 if (RHS < 0) 1612 return (-(*this)).udiv(-RHS); 1613 return -((-(*this)).udiv(RHS)); 1614 } 1615 if (RHS < 0) 1616 return -(this->udiv(-RHS)); 1617 return this->udiv(RHS); 1618 } 1619 1620 APInt APInt::urem(const APInt &RHS) const { 1621 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1622 if (isSingleWord()) { 1623 assert(RHS.U.VAL != 0 && "Remainder by zero?"); 1624 return APInt(BitWidth, U.VAL % RHS.U.VAL); 1625 } 1626 1627 // Get some facts about the LHS 1628 unsigned lhsWords = getNumWords(getActiveBits()); 1629 1630 // Get some facts about the RHS 1631 unsigned rhsBits = RHS.getActiveBits(); 1632 unsigned rhsWords = getNumWords(rhsBits); 1633 assert(rhsWords && "Performing remainder operation by zero ???"); 1634 1635 // Check the degenerate cases 1636 if (lhsWords == 0) 1637 // 0 % Y ===> 0 1638 return APInt(BitWidth, 0); 1639 if (rhsBits == 1) 1640 // X % 1 ===> 0 1641 return APInt(BitWidth, 0); 1642 if (lhsWords < rhsWords || this->ult(RHS)) 1643 // X % Y ===> X, iff X < Y 1644 return *this; 1645 if (*this == RHS) 1646 // X % X == 0; 1647 return APInt(BitWidth, 0); 1648 if (lhsWords == 1) 1649 // All high words are zero, just use native remainder 1650 return APInt(BitWidth, U.pVal[0] % RHS.U.pVal[0]); 1651 1652 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1653 APInt Remainder(BitWidth, 0); 1654 divide(U.pVal, lhsWords, RHS.U.pVal, rhsWords, nullptr, Remainder.U.pVal); 1655 return Remainder; 1656 } 1657 1658 uint64_t APInt::urem(uint64_t RHS) const { 1659 assert(RHS != 0 && "Remainder by zero?"); 1660 1661 if (isSingleWord()) 1662 return U.VAL % RHS; 1663 1664 // Get some facts about the LHS 1665 unsigned lhsWords = getNumWords(getActiveBits()); 1666 1667 // Check the degenerate cases 1668 if (lhsWords == 0) 1669 // 0 % Y ===> 0 1670 return 0; 1671 if (RHS == 1) 1672 // X % 1 ===> 0 1673 return 0; 1674 if (this->ult(RHS)) 1675 // X % Y ===> X, iff X < Y 1676 return getZExtValue(); 1677 if (*this == RHS) 1678 // X % X == 0; 1679 return 0; 1680 if (lhsWords == 1) 1681 // All high words are zero, just use native remainder 1682 return U.pVal[0] % RHS; 1683 1684 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1685 uint64_t Remainder; 1686 divide(U.pVal, lhsWords, &RHS, 1, nullptr, &Remainder); 1687 return Remainder; 1688 } 1689 1690 APInt APInt::srem(const APInt &RHS) const { 1691 if (isNegative()) { 1692 if (RHS.isNegative()) 1693 return -((-(*this)).urem(-RHS)); 1694 return -((-(*this)).urem(RHS)); 1695 } 1696 if (RHS.isNegative()) 1697 return this->urem(-RHS); 1698 return this->urem(RHS); 1699 } 1700 1701 int64_t APInt::srem(int64_t RHS) const { 1702 if (isNegative()) { 1703 if (RHS < 0) 1704 return -((-(*this)).urem(-RHS)); 1705 return -((-(*this)).urem(RHS)); 1706 } 1707 if (RHS < 0) 1708 return this->urem(-RHS); 1709 return this->urem(RHS); 1710 } 1711 1712 void APInt::udivrem(const APInt &LHS, const APInt &RHS, 1713 APInt &Quotient, APInt &Remainder) { 1714 assert(LHS.BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1715 unsigned BitWidth = LHS.BitWidth; 1716 1717 // First, deal with the easy case 1718 if (LHS.isSingleWord()) { 1719 assert(RHS.U.VAL != 0 && "Divide by zero?"); 1720 uint64_t QuotVal = LHS.U.VAL / RHS.U.VAL; 1721 uint64_t RemVal = LHS.U.VAL % RHS.U.VAL; 1722 Quotient = APInt(BitWidth, QuotVal); 1723 Remainder = APInt(BitWidth, RemVal); 1724 return; 1725 } 1726 1727 // Get some size facts about the dividend and divisor 1728 unsigned lhsWords = getNumWords(LHS.getActiveBits()); 1729 unsigned rhsBits = RHS.getActiveBits(); 1730 unsigned rhsWords = getNumWords(rhsBits); 1731 assert(rhsWords && "Performing divrem operation by zero ???"); 1732 1733 // Check the degenerate cases 1734 if (lhsWords == 0) { 1735 Quotient = 0; // 0 / Y ===> 0 1736 Remainder = 0; // 0 % Y ===> 0 1737 return; 1738 } 1739 1740 if (rhsBits == 1) { 1741 Quotient = LHS; // X / 1 ===> X 1742 Remainder = 0; // X % 1 ===> 0 1743 } 1744 1745 if (lhsWords < rhsWords || LHS.ult(RHS)) { 1746 Remainder = LHS; // X % Y ===> X, iff X < Y 1747 Quotient = 0; // X / Y ===> 0, iff X < Y 1748 return; 1749 } 1750 1751 if (LHS == RHS) { 1752 Quotient = 1; // X / X ===> 1 1753 Remainder = 0; // X % X ===> 0; 1754 return; 1755 } 1756 1757 // Make sure there is enough space to hold the results. 1758 // NOTE: This assumes that reallocate won't affect any bits if it doesn't 1759 // change the size. This is necessary if Quotient or Remainder is aliased 1760 // with LHS or RHS. 1761 Quotient.reallocate(BitWidth); 1762 Remainder.reallocate(BitWidth); 1763 1764 if (lhsWords == 1) { // rhsWords is 1 if lhsWords is 1. 1765 // There is only one word to consider so use the native versions. 1766 uint64_t lhsValue = LHS.U.pVal[0]; 1767 uint64_t rhsValue = RHS.U.pVal[0]; 1768 Quotient = lhsValue / rhsValue; 1769 Remainder = lhsValue % rhsValue; 1770 return; 1771 } 1772 1773 // Okay, lets do it the long way 1774 divide(LHS.U.pVal, lhsWords, RHS.U.pVal, rhsWords, Quotient.U.pVal, 1775 Remainder.U.pVal); 1776 // Clear the rest of the Quotient and Remainder. 1777 std::memset(Quotient.U.pVal + lhsWords, 0, 1778 (getNumWords(BitWidth) - lhsWords) * APINT_WORD_SIZE); 1779 std::memset(Remainder.U.pVal + rhsWords, 0, 1780 (getNumWords(BitWidth) - rhsWords) * APINT_WORD_SIZE); 1781 } 1782 1783 void APInt::udivrem(const APInt &LHS, uint64_t RHS, APInt &Quotient, 1784 uint64_t &Remainder) { 1785 assert(RHS != 0 && "Divide by zero?"); 1786 unsigned BitWidth = LHS.BitWidth; 1787 1788 // First, deal with the easy case 1789 if (LHS.isSingleWord()) { 1790 uint64_t QuotVal = LHS.U.VAL / RHS; 1791 Remainder = LHS.U.VAL % RHS; 1792 Quotient = APInt(BitWidth, QuotVal); 1793 return; 1794 } 1795 1796 // Get some size facts about the dividend and divisor 1797 unsigned lhsWords = getNumWords(LHS.getActiveBits()); 1798 1799 // Check the degenerate cases 1800 if (lhsWords == 0) { 1801 Quotient = 0; // 0 / Y ===> 0 1802 Remainder = 0; // 0 % Y ===> 0 1803 return; 1804 } 1805 1806 if (RHS == 1) { 1807 Quotient = LHS; // X / 1 ===> X 1808 Remainder = 0; // X % 1 ===> 0 1809 } 1810 1811 if (LHS.ult(RHS)) { 1812 Remainder = LHS.getZExtValue(); // X % Y ===> X, iff X < Y 1813 Quotient = 0; // X / Y ===> 0, iff X < Y 1814 return; 1815 } 1816 1817 if (LHS == RHS) { 1818 Quotient = 1; // X / X ===> 1 1819 Remainder = 0; // X % X ===> 0; 1820 return; 1821 } 1822 1823 // Make sure there is enough space to hold the results. 1824 // NOTE: This assumes that reallocate won't affect any bits if it doesn't 1825 // change the size. This is necessary if Quotient is aliased with LHS. 1826 Quotient.reallocate(BitWidth); 1827 1828 if (lhsWords == 1) { // rhsWords is 1 if lhsWords is 1. 1829 // There is only one word to consider so use the native versions. 1830 uint64_t lhsValue = LHS.U.pVal[0]; 1831 Quotient = lhsValue / RHS; 1832 Remainder = lhsValue % RHS; 1833 return; 1834 } 1835 1836 // Okay, lets do it the long way 1837 divide(LHS.U.pVal, lhsWords, &RHS, 1, Quotient.U.pVal, &Remainder); 1838 // Clear the rest of the Quotient. 1839 std::memset(Quotient.U.pVal + lhsWords, 0, 1840 (getNumWords(BitWidth) - lhsWords) * APINT_WORD_SIZE); 1841 } 1842 1843 void APInt::sdivrem(const APInt &LHS, const APInt &RHS, 1844 APInt &Quotient, APInt &Remainder) { 1845 if (LHS.isNegative()) { 1846 if (RHS.isNegative()) 1847 APInt::udivrem(-LHS, -RHS, Quotient, Remainder); 1848 else { 1849 APInt::udivrem(-LHS, RHS, Quotient, Remainder); 1850 Quotient.negate(); 1851 } 1852 Remainder.negate(); 1853 } else if (RHS.isNegative()) { 1854 APInt::udivrem(LHS, -RHS, Quotient, Remainder); 1855 Quotient.negate(); 1856 } else { 1857 APInt::udivrem(LHS, RHS, Quotient, Remainder); 1858 } 1859 } 1860 1861 void APInt::sdivrem(const APInt &LHS, int64_t RHS, 1862 APInt &Quotient, int64_t &Remainder) { 1863 uint64_t R = Remainder; 1864 if (LHS.isNegative()) { 1865 if (RHS < 0) 1866 APInt::udivrem(-LHS, -RHS, Quotient, R); 1867 else { 1868 APInt::udivrem(-LHS, RHS, Quotient, R); 1869 Quotient.negate(); 1870 } 1871 R = -R; 1872 } else if (RHS < 0) { 1873 APInt::udivrem(LHS, -RHS, Quotient, R); 1874 Quotient.negate(); 1875 } else { 1876 APInt::udivrem(LHS, RHS, Quotient, R); 1877 } 1878 Remainder = R; 1879 } 1880 1881 APInt APInt::sadd_ov(const APInt &RHS, bool &Overflow) const { 1882 APInt Res = *this+RHS; 1883 Overflow = isNonNegative() == RHS.isNonNegative() && 1884 Res.isNonNegative() != isNonNegative(); 1885 return Res; 1886 } 1887 1888 APInt APInt::uadd_ov(const APInt &RHS, bool &Overflow) const { 1889 APInt Res = *this+RHS; 1890 Overflow = Res.ult(RHS); 1891 return Res; 1892 } 1893 1894 APInt APInt::ssub_ov(const APInt &RHS, bool &Overflow) const { 1895 APInt Res = *this - RHS; 1896 Overflow = isNonNegative() != RHS.isNonNegative() && 1897 Res.isNonNegative() != isNonNegative(); 1898 return Res; 1899 } 1900 1901 APInt APInt::usub_ov(const APInt &RHS, bool &Overflow) const { 1902 APInt Res = *this-RHS; 1903 Overflow = Res.ugt(*this); 1904 return Res; 1905 } 1906 1907 APInt APInt::sdiv_ov(const APInt &RHS, bool &Overflow) const { 1908 // MININT/-1 --> overflow. 1909 Overflow = isMinSignedValue() && RHS.isAllOnesValue(); 1910 return sdiv(RHS); 1911 } 1912 1913 APInt APInt::smul_ov(const APInt &RHS, bool &Overflow) const { 1914 APInt Res = *this * RHS; 1915 1916 if (*this != 0 && RHS != 0) 1917 Overflow = Res.sdiv(RHS) != *this || Res.sdiv(*this) != RHS; 1918 else 1919 Overflow = false; 1920 return Res; 1921 } 1922 1923 APInt APInt::umul_ov(const APInt &RHS, bool &Overflow) const { 1924 APInt Res = *this * RHS; 1925 1926 if (*this != 0 && RHS != 0) 1927 Overflow = Res.udiv(RHS) != *this || Res.udiv(*this) != RHS; 1928 else 1929 Overflow = false; 1930 return Res; 1931 } 1932 1933 APInt APInt::sshl_ov(const APInt &ShAmt, bool &Overflow) const { 1934 Overflow = ShAmt.uge(getBitWidth()); 1935 if (Overflow) 1936 return APInt(BitWidth, 0); 1937 1938 if (isNonNegative()) // Don't allow sign change. 1939 Overflow = ShAmt.uge(countLeadingZeros()); 1940 else 1941 Overflow = ShAmt.uge(countLeadingOnes()); 1942 1943 return *this << ShAmt; 1944 } 1945 1946 APInt APInt::ushl_ov(const APInt &ShAmt, bool &Overflow) const { 1947 Overflow = ShAmt.uge(getBitWidth()); 1948 if (Overflow) 1949 return APInt(BitWidth, 0); 1950 1951 Overflow = ShAmt.ugt(countLeadingZeros()); 1952 1953 return *this << ShAmt; 1954 } 1955 1956 1957 1958 1959 void APInt::fromString(unsigned numbits, StringRef str, uint8_t radix) { 1960 // Check our assumptions here 1961 assert(!str.empty() && "Invalid string length"); 1962 assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 || 1963 radix == 36) && 1964 "Radix should be 2, 8, 10, 16, or 36!"); 1965 1966 StringRef::iterator p = str.begin(); 1967 size_t slen = str.size(); 1968 bool isNeg = *p == '-'; 1969 if (*p == '-' || *p == '+') { 1970 p++; 1971 slen--; 1972 assert(slen && "String is only a sign, needs a value."); 1973 } 1974 assert((slen <= numbits || radix != 2) && "Insufficient bit width"); 1975 assert(((slen-1)*3 <= numbits || radix != 8) && "Insufficient bit width"); 1976 assert(((slen-1)*4 <= numbits || radix != 16) && "Insufficient bit width"); 1977 assert((((slen-1)*64)/22 <= numbits || radix != 10) && 1978 "Insufficient bit width"); 1979 1980 // Allocate memory if needed 1981 if (isSingleWord()) 1982 U.VAL = 0; 1983 else 1984 U.pVal = getClearedMemory(getNumWords()); 1985 1986 // Figure out if we can shift instead of multiply 1987 unsigned shift = (radix == 16 ? 4 : radix == 8 ? 3 : radix == 2 ? 1 : 0); 1988 1989 // Enter digit traversal loop 1990 for (StringRef::iterator e = str.end(); p != e; ++p) { 1991 unsigned digit = getDigit(*p, radix); 1992 assert(digit < radix && "Invalid character in digit string"); 1993 1994 // Shift or multiply the value by the radix 1995 if (slen > 1) { 1996 if (shift) 1997 *this <<= shift; 1998 else 1999 *this *= radix; 2000 } 2001 2002 // Add in the digit we just interpreted 2003 *this += digit; 2004 } 2005 // If its negative, put it in two's complement form 2006 if (isNeg) 2007 this->negate(); 2008 } 2009 2010 void APInt::toString(SmallVectorImpl<char> &Str, unsigned Radix, 2011 bool Signed, bool formatAsCLiteral) const { 2012 assert((Radix == 10 || Radix == 8 || Radix == 16 || Radix == 2 || 2013 Radix == 36) && 2014 "Radix should be 2, 8, 10, 16, or 36!"); 2015 2016 const char *Prefix = ""; 2017 if (formatAsCLiteral) { 2018 switch (Radix) { 2019 case 2: 2020 // Binary literals are a non-standard extension added in gcc 4.3: 2021 // http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Binary-constants.html 2022 Prefix = "0b"; 2023 break; 2024 case 8: 2025 Prefix = "0"; 2026 break; 2027 case 10: 2028 break; // No prefix 2029 case 16: 2030 Prefix = "0x"; 2031 break; 2032 default: 2033 llvm_unreachable("Invalid radix!"); 2034 } 2035 } 2036 2037 // First, check for a zero value and just short circuit the logic below. 2038 if (*this == 0) { 2039 while (*Prefix) { 2040 Str.push_back(*Prefix); 2041 ++Prefix; 2042 }; 2043 Str.push_back('0'); 2044 return; 2045 } 2046 2047 static const char Digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 2048 2049 if (isSingleWord()) { 2050 char Buffer[65]; 2051 char *BufPtr = std::end(Buffer); 2052 2053 uint64_t N; 2054 if (!Signed) { 2055 N = getZExtValue(); 2056 } else { 2057 int64_t I = getSExtValue(); 2058 if (I >= 0) { 2059 N = I; 2060 } else { 2061 Str.push_back('-'); 2062 N = -(uint64_t)I; 2063 } 2064 } 2065 2066 while (*Prefix) { 2067 Str.push_back(*Prefix); 2068 ++Prefix; 2069 }; 2070 2071 while (N) { 2072 *--BufPtr = Digits[N % Radix]; 2073 N /= Radix; 2074 } 2075 Str.append(BufPtr, std::end(Buffer)); 2076 return; 2077 } 2078 2079 APInt Tmp(*this); 2080 2081 if (Signed && isNegative()) { 2082 // They want to print the signed version and it is a negative value 2083 // Flip the bits and add one to turn it into the equivalent positive 2084 // value and put a '-' in the result. 2085 Tmp.negate(); 2086 Str.push_back('-'); 2087 } 2088 2089 while (*Prefix) { 2090 Str.push_back(*Prefix); 2091 ++Prefix; 2092 }; 2093 2094 // We insert the digits backward, then reverse them to get the right order. 2095 unsigned StartDig = Str.size(); 2096 2097 // For the 2, 8 and 16 bit cases, we can just shift instead of divide 2098 // because the number of bits per digit (1, 3 and 4 respectively) divides 2099 // equally. We just shift until the value is zero. 2100 if (Radix == 2 || Radix == 8 || Radix == 16) { 2101 // Just shift tmp right for each digit width until it becomes zero 2102 unsigned ShiftAmt = (Radix == 16 ? 4 : (Radix == 8 ? 3 : 1)); 2103 unsigned MaskAmt = Radix - 1; 2104 2105 while (Tmp.getBoolValue()) { 2106 unsigned Digit = unsigned(Tmp.getRawData()[0]) & MaskAmt; 2107 Str.push_back(Digits[Digit]); 2108 Tmp.lshrInPlace(ShiftAmt); 2109 } 2110 } else { 2111 while (Tmp.getBoolValue()) { 2112 uint64_t Digit; 2113 udivrem(Tmp, Radix, Tmp, Digit); 2114 assert(Digit < Radix && "divide failed"); 2115 Str.push_back(Digits[Digit]); 2116 } 2117 } 2118 2119 // Reverse the digits before returning. 2120 std::reverse(Str.begin()+StartDig, Str.end()); 2121 } 2122 2123 /// Returns the APInt as a std::string. Note that this is an inefficient method. 2124 /// It is better to pass in a SmallVector/SmallString to the methods above. 2125 std::string APInt::toString(unsigned Radix = 10, bool Signed = true) const { 2126 SmallString<40> S; 2127 toString(S, Radix, Signed, /* formatAsCLiteral = */false); 2128 return S.str(); 2129 } 2130 2131 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 2132 LLVM_DUMP_METHOD void APInt::dump() const { 2133 SmallString<40> S, U; 2134 this->toStringUnsigned(U); 2135 this->toStringSigned(S); 2136 dbgs() << "APInt(" << BitWidth << "b, " 2137 << U << "u " << S << "s)\n"; 2138 } 2139 #endif 2140 2141 void APInt::print(raw_ostream &OS, bool isSigned) const { 2142 SmallString<40> S; 2143 this->toString(S, 10, isSigned, /* formatAsCLiteral = */false); 2144 OS << S; 2145 } 2146 2147 // This implements a variety of operations on a representation of 2148 // arbitrary precision, two's-complement, bignum integer values. 2149 2150 // Assumed by lowHalf, highHalf, partMSB and partLSB. A fairly safe 2151 // and unrestricting assumption. 2152 static_assert(APInt::APINT_BITS_PER_WORD % 2 == 0, 2153 "Part width must be divisible by 2!"); 2154 2155 /* Some handy functions local to this file. */ 2156 2157 /* Returns the integer part with the least significant BITS set. 2158 BITS cannot be zero. */ 2159 static inline APInt::WordType lowBitMask(unsigned bits) { 2160 assert(bits != 0 && bits <= APInt::APINT_BITS_PER_WORD); 2161 2162 return ~(APInt::WordType) 0 >> (APInt::APINT_BITS_PER_WORD - bits); 2163 } 2164 2165 /* Returns the value of the lower half of PART. */ 2166 static inline APInt::WordType lowHalf(APInt::WordType part) { 2167 return part & lowBitMask(APInt::APINT_BITS_PER_WORD / 2); 2168 } 2169 2170 /* Returns the value of the upper half of PART. */ 2171 static inline APInt::WordType highHalf(APInt::WordType part) { 2172 return part >> (APInt::APINT_BITS_PER_WORD / 2); 2173 } 2174 2175 /* Returns the bit number of the most significant set bit of a part. 2176 If the input number has no bits set -1U is returned. */ 2177 static unsigned partMSB(APInt::WordType value) { 2178 return findLastSet(value, ZB_Max); 2179 } 2180 2181 /* Returns the bit number of the least significant set bit of a 2182 part. If the input number has no bits set -1U is returned. */ 2183 static unsigned partLSB(APInt::WordType value) { 2184 return findFirstSet(value, ZB_Max); 2185 } 2186 2187 /* Sets the least significant part of a bignum to the input value, and 2188 zeroes out higher parts. */ 2189 void APInt::tcSet(WordType *dst, WordType part, unsigned parts) { 2190 assert(parts > 0); 2191 2192 dst[0] = part; 2193 for (unsigned i = 1; i < parts; i++) 2194 dst[i] = 0; 2195 } 2196 2197 /* Assign one bignum to another. */ 2198 void APInt::tcAssign(WordType *dst, const WordType *src, unsigned parts) { 2199 for (unsigned i = 0; i < parts; i++) 2200 dst[i] = src[i]; 2201 } 2202 2203 /* Returns true if a bignum is zero, false otherwise. */ 2204 bool APInt::tcIsZero(const WordType *src, unsigned parts) { 2205 for (unsigned i = 0; i < parts; i++) 2206 if (src[i]) 2207 return false; 2208 2209 return true; 2210 } 2211 2212 /* Extract the given bit of a bignum; returns 0 or 1. */ 2213 int APInt::tcExtractBit(const WordType *parts, unsigned bit) { 2214 return (parts[whichWord(bit)] & maskBit(bit)) != 0; 2215 } 2216 2217 /* Set the given bit of a bignum. */ 2218 void APInt::tcSetBit(WordType *parts, unsigned bit) { 2219 parts[whichWord(bit)] |= maskBit(bit); 2220 } 2221 2222 /* Clears the given bit of a bignum. */ 2223 void APInt::tcClearBit(WordType *parts, unsigned bit) { 2224 parts[whichWord(bit)] &= ~maskBit(bit); 2225 } 2226 2227 /* Returns the bit number of the least significant set bit of a 2228 number. If the input number has no bits set -1U is returned. */ 2229 unsigned APInt::tcLSB(const WordType *parts, unsigned n) { 2230 for (unsigned i = 0; i < n; i++) { 2231 if (parts[i] != 0) { 2232 unsigned lsb = partLSB(parts[i]); 2233 2234 return lsb + i * APINT_BITS_PER_WORD; 2235 } 2236 } 2237 2238 return -1U; 2239 } 2240 2241 /* Returns the bit number of the most significant set bit of a number. 2242 If the input number has no bits set -1U is returned. */ 2243 unsigned APInt::tcMSB(const WordType *parts, unsigned n) { 2244 do { 2245 --n; 2246 2247 if (parts[n] != 0) { 2248 unsigned msb = partMSB(parts[n]); 2249 2250 return msb + n * APINT_BITS_PER_WORD; 2251 } 2252 } while (n); 2253 2254 return -1U; 2255 } 2256 2257 /* Copy the bit vector of width srcBITS from SRC, starting at bit 2258 srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes 2259 the least significant bit of DST. All high bits above srcBITS in 2260 DST are zero-filled. */ 2261 void 2262 APInt::tcExtract(WordType *dst, unsigned dstCount, const WordType *src, 2263 unsigned srcBits, unsigned srcLSB) { 2264 unsigned dstParts = (srcBits + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; 2265 assert(dstParts <= dstCount); 2266 2267 unsigned firstSrcPart = srcLSB / APINT_BITS_PER_WORD; 2268 tcAssign (dst, src + firstSrcPart, dstParts); 2269 2270 unsigned shift = srcLSB % APINT_BITS_PER_WORD; 2271 tcShiftRight (dst, dstParts, shift); 2272 2273 /* We now have (dstParts * APINT_BITS_PER_WORD - shift) bits from SRC 2274 in DST. If this is less that srcBits, append the rest, else 2275 clear the high bits. */ 2276 unsigned n = dstParts * APINT_BITS_PER_WORD - shift; 2277 if (n < srcBits) { 2278 WordType mask = lowBitMask (srcBits - n); 2279 dst[dstParts - 1] |= ((src[firstSrcPart + dstParts] & mask) 2280 << n % APINT_BITS_PER_WORD); 2281 } else if (n > srcBits) { 2282 if (srcBits % APINT_BITS_PER_WORD) 2283 dst[dstParts - 1] &= lowBitMask (srcBits % APINT_BITS_PER_WORD); 2284 } 2285 2286 /* Clear high parts. */ 2287 while (dstParts < dstCount) 2288 dst[dstParts++] = 0; 2289 } 2290 2291 /* DST += RHS + C where C is zero or one. Returns the carry flag. */ 2292 APInt::WordType APInt::tcAdd(WordType *dst, const WordType *rhs, 2293 WordType c, unsigned parts) { 2294 assert(c <= 1); 2295 2296 for (unsigned i = 0; i < parts; i++) { 2297 WordType l = dst[i]; 2298 if (c) { 2299 dst[i] += rhs[i] + 1; 2300 c = (dst[i] <= l); 2301 } else { 2302 dst[i] += rhs[i]; 2303 c = (dst[i] < l); 2304 } 2305 } 2306 2307 return c; 2308 } 2309 2310 /// This function adds a single "word" integer, src, to the multiple 2311 /// "word" integer array, dst[]. dst[] is modified to reflect the addition and 2312 /// 1 is returned if there is a carry out, otherwise 0 is returned. 2313 /// @returns the carry of the addition. 2314 APInt::WordType APInt::tcAddPart(WordType *dst, WordType src, 2315 unsigned parts) { 2316 for (unsigned i = 0; i < parts; ++i) { 2317 dst[i] += src; 2318 if (dst[i] >= src) 2319 return 0; // No need to carry so exit early. 2320 src = 1; // Carry one to next digit. 2321 } 2322 2323 return 1; 2324 } 2325 2326 /* DST -= RHS + C where C is zero or one. Returns the carry flag. */ 2327 APInt::WordType APInt::tcSubtract(WordType *dst, const WordType *rhs, 2328 WordType c, unsigned parts) { 2329 assert(c <= 1); 2330 2331 for (unsigned i = 0; i < parts; i++) { 2332 WordType l = dst[i]; 2333 if (c) { 2334 dst[i] -= rhs[i] + 1; 2335 c = (dst[i] >= l); 2336 } else { 2337 dst[i] -= rhs[i]; 2338 c = (dst[i] > l); 2339 } 2340 } 2341 2342 return c; 2343 } 2344 2345 /// This function subtracts a single "word" (64-bit word), src, from 2346 /// the multi-word integer array, dst[], propagating the borrowed 1 value until 2347 /// no further borrowing is needed or it runs out of "words" in dst. The result 2348 /// is 1 if "borrowing" exhausted the digits in dst, or 0 if dst was not 2349 /// exhausted. In other words, if src > dst then this function returns 1, 2350 /// otherwise 0. 2351 /// @returns the borrow out of the subtraction 2352 APInt::WordType APInt::tcSubtractPart(WordType *dst, WordType src, 2353 unsigned parts) { 2354 for (unsigned i = 0; i < parts; ++i) { 2355 WordType Dst = dst[i]; 2356 dst[i] -= src; 2357 if (src <= Dst) 2358 return 0; // No need to borrow so exit early. 2359 src = 1; // We have to "borrow 1" from next "word" 2360 } 2361 2362 return 1; 2363 } 2364 2365 /* Negate a bignum in-place. */ 2366 void APInt::tcNegate(WordType *dst, unsigned parts) { 2367 tcComplement(dst, parts); 2368 tcIncrement(dst, parts); 2369 } 2370 2371 /* DST += SRC * MULTIPLIER + CARRY if add is true 2372 DST = SRC * MULTIPLIER + CARRY if add is false 2373 2374 Requires 0 <= DSTPARTS <= SRCPARTS + 1. If DST overlaps SRC 2375 they must start at the same point, i.e. DST == SRC. 2376 2377 If DSTPARTS == SRCPARTS + 1 no overflow occurs and zero is 2378 returned. Otherwise DST is filled with the least significant 2379 DSTPARTS parts of the result, and if all of the omitted higher 2380 parts were zero return zero, otherwise overflow occurred and 2381 return one. */ 2382 int APInt::tcMultiplyPart(WordType *dst, const WordType *src, 2383 WordType multiplier, WordType carry, 2384 unsigned srcParts, unsigned dstParts, 2385 bool add) { 2386 /* Otherwise our writes of DST kill our later reads of SRC. */ 2387 assert(dst <= src || dst >= src + srcParts); 2388 assert(dstParts <= srcParts + 1); 2389 2390 /* N loops; minimum of dstParts and srcParts. */ 2391 unsigned n = std::min(dstParts, srcParts); 2392 2393 for (unsigned i = 0; i < n; i++) { 2394 WordType low, mid, high, srcPart; 2395 2396 /* [ LOW, HIGH ] = MULTIPLIER * SRC[i] + DST[i] + CARRY. 2397 2398 This cannot overflow, because 2399 2400 (n - 1) * (n - 1) + 2 (n - 1) = (n - 1) * (n + 1) 2401 2402 which is less than n^2. */ 2403 2404 srcPart = src[i]; 2405 2406 if (multiplier == 0 || srcPart == 0) { 2407 low = carry; 2408 high = 0; 2409 } else { 2410 low = lowHalf(srcPart) * lowHalf(multiplier); 2411 high = highHalf(srcPart) * highHalf(multiplier); 2412 2413 mid = lowHalf(srcPart) * highHalf(multiplier); 2414 high += highHalf(mid); 2415 mid <<= APINT_BITS_PER_WORD / 2; 2416 if (low + mid < low) 2417 high++; 2418 low += mid; 2419 2420 mid = highHalf(srcPart) * lowHalf(multiplier); 2421 high += highHalf(mid); 2422 mid <<= APINT_BITS_PER_WORD / 2; 2423 if (low + mid < low) 2424 high++; 2425 low += mid; 2426 2427 /* Now add carry. */ 2428 if (low + carry < low) 2429 high++; 2430 low += carry; 2431 } 2432 2433 if (add) { 2434 /* And now DST[i], and store the new low part there. */ 2435 if (low + dst[i] < low) 2436 high++; 2437 dst[i] += low; 2438 } else 2439 dst[i] = low; 2440 2441 carry = high; 2442 } 2443 2444 if (srcParts < dstParts) { 2445 /* Full multiplication, there is no overflow. */ 2446 assert(srcParts + 1 == dstParts); 2447 dst[srcParts] = carry; 2448 return 0; 2449 } 2450 2451 /* We overflowed if there is carry. */ 2452 if (carry) 2453 return 1; 2454 2455 /* We would overflow if any significant unwritten parts would be 2456 non-zero. This is true if any remaining src parts are non-zero 2457 and the multiplier is non-zero. */ 2458 if (multiplier) 2459 for (unsigned i = dstParts; i < srcParts; i++) 2460 if (src[i]) 2461 return 1; 2462 2463 /* We fitted in the narrow destination. */ 2464 return 0; 2465 } 2466 2467 /* DST = LHS * RHS, where DST has the same width as the operands and 2468 is filled with the least significant parts of the result. Returns 2469 one if overflow occurred, otherwise zero. DST must be disjoint 2470 from both operands. */ 2471 int APInt::tcMultiply(WordType *dst, const WordType *lhs, 2472 const WordType *rhs, unsigned parts) { 2473 assert(dst != lhs && dst != rhs); 2474 2475 int overflow = 0; 2476 tcSet(dst, 0, parts); 2477 2478 for (unsigned i = 0; i < parts; i++) 2479 overflow |= tcMultiplyPart(&dst[i], lhs, rhs[i], 0, parts, 2480 parts - i, true); 2481 2482 return overflow; 2483 } 2484 2485 /// DST = LHS * RHS, where DST has width the sum of the widths of the 2486 /// operands. No overflow occurs. DST must be disjoint from both operands. 2487 void APInt::tcFullMultiply(WordType *dst, const WordType *lhs, 2488 const WordType *rhs, unsigned lhsParts, 2489 unsigned rhsParts) { 2490 /* Put the narrower number on the LHS for less loops below. */ 2491 if (lhsParts > rhsParts) 2492 return tcFullMultiply (dst, rhs, lhs, rhsParts, lhsParts); 2493 2494 assert(dst != lhs && dst != rhs); 2495 2496 tcSet(dst, 0, rhsParts); 2497 2498 for (unsigned i = 0; i < lhsParts; i++) 2499 tcMultiplyPart(&dst[i], rhs, lhs[i], 0, rhsParts, rhsParts + 1, true); 2500 } 2501 2502 /* If RHS is zero LHS and REMAINDER are left unchanged, return one. 2503 Otherwise set LHS to LHS / RHS with the fractional part discarded, 2504 set REMAINDER to the remainder, return zero. i.e. 2505 2506 OLD_LHS = RHS * LHS + REMAINDER 2507 2508 SCRATCH is a bignum of the same size as the operands and result for 2509 use by the routine; its contents need not be initialized and are 2510 destroyed. LHS, REMAINDER and SCRATCH must be distinct. 2511 */ 2512 int APInt::tcDivide(WordType *lhs, const WordType *rhs, 2513 WordType *remainder, WordType *srhs, 2514 unsigned parts) { 2515 assert(lhs != remainder && lhs != srhs && remainder != srhs); 2516 2517 unsigned shiftCount = tcMSB(rhs, parts) + 1; 2518 if (shiftCount == 0) 2519 return true; 2520 2521 shiftCount = parts * APINT_BITS_PER_WORD - shiftCount; 2522 unsigned n = shiftCount / APINT_BITS_PER_WORD; 2523 WordType mask = (WordType) 1 << (shiftCount % APINT_BITS_PER_WORD); 2524 2525 tcAssign(srhs, rhs, parts); 2526 tcShiftLeft(srhs, parts, shiftCount); 2527 tcAssign(remainder, lhs, parts); 2528 tcSet(lhs, 0, parts); 2529 2530 /* Loop, subtracting SRHS if REMAINDER is greater and adding that to 2531 the total. */ 2532 for (;;) { 2533 int compare = tcCompare(remainder, srhs, parts); 2534 if (compare >= 0) { 2535 tcSubtract(remainder, srhs, 0, parts); 2536 lhs[n] |= mask; 2537 } 2538 2539 if (shiftCount == 0) 2540 break; 2541 shiftCount--; 2542 tcShiftRight(srhs, parts, 1); 2543 if ((mask >>= 1) == 0) { 2544 mask = (WordType) 1 << (APINT_BITS_PER_WORD - 1); 2545 n--; 2546 } 2547 } 2548 2549 return false; 2550 } 2551 2552 /// Shift a bignum left Cound bits in-place. Shifted in bits are zero. There are 2553 /// no restrictions on Count. 2554 void APInt::tcShiftLeft(WordType *Dst, unsigned Words, unsigned Count) { 2555 // Don't bother performing a no-op shift. 2556 if (!Count) 2557 return; 2558 2559 // WordShift is the inter-part shift; BitShift is the intra-part shift. 2560 unsigned WordShift = std::min(Count / APINT_BITS_PER_WORD, Words); 2561 unsigned BitShift = Count % APINT_BITS_PER_WORD; 2562 2563 // Fastpath for moving by whole words. 2564 if (BitShift == 0) { 2565 std::memmove(Dst + WordShift, Dst, (Words - WordShift) * APINT_WORD_SIZE); 2566 } else { 2567 while (Words-- > WordShift) { 2568 Dst[Words] = Dst[Words - WordShift] << BitShift; 2569 if (Words > WordShift) 2570 Dst[Words] |= 2571 Dst[Words - WordShift - 1] >> (APINT_BITS_PER_WORD - BitShift); 2572 } 2573 } 2574 2575 // Fill in the remainder with 0s. 2576 std::memset(Dst, 0, WordShift * APINT_WORD_SIZE); 2577 } 2578 2579 /// Shift a bignum right Count bits in-place. Shifted in bits are zero. There 2580 /// are no restrictions on Count. 2581 void APInt::tcShiftRight(WordType *Dst, unsigned Words, unsigned Count) { 2582 // Don't bother performing a no-op shift. 2583 if (!Count) 2584 return; 2585 2586 // WordShift is the inter-part shift; BitShift is the intra-part shift. 2587 unsigned WordShift = std::min(Count / APINT_BITS_PER_WORD, Words); 2588 unsigned BitShift = Count % APINT_BITS_PER_WORD; 2589 2590 unsigned WordsToMove = Words - WordShift; 2591 // Fastpath for moving by whole words. 2592 if (BitShift == 0) { 2593 std::memmove(Dst, Dst + WordShift, WordsToMove * APINT_WORD_SIZE); 2594 } else { 2595 for (unsigned i = 0; i != WordsToMove; ++i) { 2596 Dst[i] = Dst[i + WordShift] >> BitShift; 2597 if (i + 1 != WordsToMove) 2598 Dst[i] |= Dst[i + WordShift + 1] << (APINT_BITS_PER_WORD - BitShift); 2599 } 2600 } 2601 2602 // Fill in the remainder with 0s. 2603 std::memset(Dst + WordsToMove, 0, WordShift * APINT_WORD_SIZE); 2604 } 2605 2606 /* Bitwise and of two bignums. */ 2607 void APInt::tcAnd(WordType *dst, const WordType *rhs, unsigned parts) { 2608 for (unsigned i = 0; i < parts; i++) 2609 dst[i] &= rhs[i]; 2610 } 2611 2612 /* Bitwise inclusive or of two bignums. */ 2613 void APInt::tcOr(WordType *dst, const WordType *rhs, unsigned parts) { 2614 for (unsigned i = 0; i < parts; i++) 2615 dst[i] |= rhs[i]; 2616 } 2617 2618 /* Bitwise exclusive or of two bignums. */ 2619 void APInt::tcXor(WordType *dst, const WordType *rhs, unsigned parts) { 2620 for (unsigned i = 0; i < parts; i++) 2621 dst[i] ^= rhs[i]; 2622 } 2623 2624 /* Complement a bignum in-place. */ 2625 void APInt::tcComplement(WordType *dst, unsigned parts) { 2626 for (unsigned i = 0; i < parts; i++) 2627 dst[i] = ~dst[i]; 2628 } 2629 2630 /* Comparison (unsigned) of two bignums. */ 2631 int APInt::tcCompare(const WordType *lhs, const WordType *rhs, 2632 unsigned parts) { 2633 while (parts) { 2634 parts--; 2635 if (lhs[parts] != rhs[parts]) 2636 return (lhs[parts] > rhs[parts]) ? 1 : -1; 2637 } 2638 2639 return 0; 2640 } 2641 2642 /* Set the least significant BITS bits of a bignum, clear the 2643 rest. */ 2644 void APInt::tcSetLeastSignificantBits(WordType *dst, unsigned parts, 2645 unsigned bits) { 2646 unsigned i = 0; 2647 while (bits > APINT_BITS_PER_WORD) { 2648 dst[i++] = ~(WordType) 0; 2649 bits -= APINT_BITS_PER_WORD; 2650 } 2651 2652 if (bits) 2653 dst[i++] = ~(WordType) 0 >> (APINT_BITS_PER_WORD - bits); 2654 2655 while (i < parts) 2656 dst[i++] = 0; 2657 } 2658