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