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