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(unsigned *u, unsigned *v, unsigned *q, unsigned* 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 unsigned v_carry = 0; 1270 unsigned u_carry = 0; 1271 if (shift) { 1272 for (unsigned i = 0; i < m+n; ++i) { 1273 unsigned 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 unsigned 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 unsigned 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 unsigned 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 uint64_t mask = ~0ull >> (sizeof(unsigned)*CHAR_BIT); 1407 unsigned n = rhsWords * 2; 1408 unsigned m = (lhsWords * 2) - n; 1409 1410 // Allocate space for the temporary values we need either on the stack, if 1411 // it will fit, or on the heap if it won't. 1412 unsigned SPACE[128]; 1413 unsigned *U = nullptr; 1414 unsigned *V = nullptr; 1415 unsigned *Q = nullptr; 1416 unsigned *R = nullptr; 1417 if ((Remainder?4:3)*n+2*m+1 <= 128) { 1418 U = &SPACE[0]; 1419 V = &SPACE[m+n+1]; 1420 Q = &SPACE[(m+n+1) + n]; 1421 if (Remainder) 1422 R = &SPACE[(m+n+1) + n + (m+n)]; 1423 } else { 1424 U = new unsigned[m + n + 1]; 1425 V = new unsigned[n]; 1426 Q = new unsigned[m+n]; 1427 if (Remainder) 1428 R = new unsigned[n]; 1429 } 1430 1431 // Initialize the dividend 1432 memset(U, 0, (m+n+1)*sizeof(unsigned)); 1433 for (unsigned i = 0; i < lhsWords; ++i) { 1434 uint64_t tmp = (LHS.getNumWords() == 1 ? LHS.U.VAL : LHS.U.pVal[i]); 1435 U[i * 2] = (unsigned)(tmp & mask); 1436 U[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT)); 1437 } 1438 U[m+n] = 0; // this extra word is for "spill" in the Knuth algorithm. 1439 1440 // Initialize the divisor 1441 memset(V, 0, (n)*sizeof(unsigned)); 1442 for (unsigned i = 0; i < rhsWords; ++i) { 1443 uint64_t tmp = (RHS.getNumWords() == 1 ? RHS.U.VAL : RHS.U.pVal[i]); 1444 V[i * 2] = (unsigned)(tmp & mask); 1445 V[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT)); 1446 } 1447 1448 // initialize the quotient and remainder 1449 memset(Q, 0, (m+n) * sizeof(unsigned)); 1450 if (Remainder) 1451 memset(R, 0, n * sizeof(unsigned)); 1452 1453 // Now, adjust m and n for the Knuth division. n is the number of words in 1454 // the divisor. m is the number of words by which the dividend exceeds the 1455 // divisor (i.e. m+n is the length of the dividend). These sizes must not 1456 // contain any zero words or the Knuth algorithm fails. 1457 for (unsigned i = n; i > 0 && V[i-1] == 0; i--) { 1458 n--; 1459 m++; 1460 } 1461 for (unsigned i = m+n; i > 0 && U[i-1] == 0; i--) 1462 m--; 1463 1464 // If we're left with only a single word for the divisor, Knuth doesn't work 1465 // so we implement the short division algorithm here. This is much simpler 1466 // and faster because we are certain that we can divide a 64-bit quantity 1467 // by a 32-bit quantity at hardware speed and short division is simply a 1468 // series of such operations. This is just like doing short division but we 1469 // are using base 2^32 instead of base 10. 1470 assert(n != 0 && "Divide by zero?"); 1471 if (n == 1) { 1472 unsigned divisor = V[0]; 1473 unsigned remainder = 0; 1474 for (int i = m+n-1; i >= 0; i--) { 1475 uint64_t partial_dividend = uint64_t(remainder) << 32 | U[i]; 1476 if (partial_dividend == 0) { 1477 Q[i] = 0; 1478 remainder = 0; 1479 } else if (partial_dividend < divisor) { 1480 Q[i] = 0; 1481 remainder = (unsigned)partial_dividend; 1482 } else if (partial_dividend == divisor) { 1483 Q[i] = 1; 1484 remainder = 0; 1485 } else { 1486 Q[i] = (unsigned)(partial_dividend / divisor); 1487 remainder = (unsigned)(partial_dividend - (Q[i] * divisor)); 1488 } 1489 } 1490 if (R) 1491 R[0] = remainder; 1492 } else { 1493 // Now we're ready to invoke the Knuth classical divide algorithm. In this 1494 // case n > 1. 1495 KnuthDiv(U, V, Q, R, m, n); 1496 } 1497 1498 // If the caller wants the quotient 1499 if (Quotient) { 1500 // Set up the Quotient value's memory. 1501 if (Quotient->BitWidth != LHS.BitWidth) { 1502 if (Quotient->isSingleWord()) 1503 Quotient->U.VAL = 0; 1504 else 1505 delete [] Quotient->U.pVal; 1506 Quotient->BitWidth = LHS.BitWidth; 1507 if (!Quotient->isSingleWord()) 1508 Quotient->U.pVal = getClearedMemory(Quotient->getNumWords()); 1509 } else 1510 Quotient->clearAllBits(); 1511 1512 // The quotient is in Q. Reconstitute the quotient into Quotient's low 1513 // order words. 1514 // This case is currently dead as all users of divide() handle trivial cases 1515 // earlier. 1516 if (lhsWords == 1) { 1517 uint64_t tmp = 1518 uint64_t(Q[0]) | (uint64_t(Q[1]) << (APINT_BITS_PER_WORD / 2)); 1519 if (Quotient->isSingleWord()) 1520 Quotient->U.VAL = tmp; 1521 else 1522 Quotient->U.pVal[0] = tmp; 1523 } else { 1524 assert(!Quotient->isSingleWord() && "Quotient APInt not large enough"); 1525 for (unsigned i = 0; i < lhsWords; ++i) 1526 Quotient->U.pVal[i] = 1527 uint64_t(Q[i*2]) | (uint64_t(Q[i*2+1]) << (APINT_BITS_PER_WORD / 2)); 1528 } 1529 } 1530 1531 // If the caller wants the remainder 1532 if (Remainder) { 1533 // Set up the Remainder value's memory. 1534 if (Remainder->BitWidth != RHS.BitWidth) { 1535 if (Remainder->isSingleWord()) 1536 Remainder->U.VAL = 0; 1537 else 1538 delete [] Remainder->U.pVal; 1539 Remainder->BitWidth = RHS.BitWidth; 1540 if (!Remainder->isSingleWord()) 1541 Remainder->U.pVal = getClearedMemory(Remainder->getNumWords()); 1542 } else 1543 Remainder->clearAllBits(); 1544 1545 // The remainder is in R. Reconstitute the remainder into Remainder's low 1546 // order words. 1547 if (rhsWords == 1) { 1548 uint64_t tmp = 1549 uint64_t(R[0]) | (uint64_t(R[1]) << (APINT_BITS_PER_WORD / 2)); 1550 if (Remainder->isSingleWord()) 1551 Remainder->U.VAL = tmp; 1552 else 1553 Remainder->U.pVal[0] = tmp; 1554 } else { 1555 assert(!Remainder->isSingleWord() && "Remainder APInt not large enough"); 1556 for (unsigned i = 0; i < rhsWords; ++i) 1557 Remainder->U.pVal[i] = 1558 uint64_t(R[i*2]) | (uint64_t(R[i*2+1]) << (APINT_BITS_PER_WORD / 2)); 1559 } 1560 } 1561 1562 // Clean up the memory we allocated. 1563 if (U != &SPACE[0]) { 1564 delete [] U; 1565 delete [] V; 1566 delete [] Q; 1567 delete [] R; 1568 } 1569 } 1570 1571 APInt APInt::udiv(const APInt& RHS) const { 1572 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1573 1574 // First, deal with the easy case 1575 if (isSingleWord()) { 1576 assert(RHS.U.VAL != 0 && "Divide by zero?"); 1577 return APInt(BitWidth, U.VAL / RHS.U.VAL); 1578 } 1579 1580 // Get some facts about the LHS and RHS number of bits and words 1581 unsigned rhsBits = RHS.getActiveBits(); 1582 unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1); 1583 assert(rhsWords && "Divided by zero???"); 1584 unsigned lhsBits = this->getActiveBits(); 1585 unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1); 1586 1587 // Deal with some degenerate cases 1588 if (!lhsWords) 1589 // 0 / X ===> 0 1590 return APInt(BitWidth, 0); 1591 if (lhsWords < rhsWords || this->ult(RHS)) 1592 // X / Y ===> 0, iff X < Y 1593 return APInt(BitWidth, 0); 1594 if (*this == RHS) 1595 // X / X ===> 1 1596 return APInt(BitWidth, 1); 1597 if (lhsWords == 1 && rhsWords == 1) 1598 // All high words are zero, just use native divide 1599 return APInt(BitWidth, this->U.pVal[0] / RHS.U.pVal[0]); 1600 1601 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1602 APInt Quotient; // to hold result. 1603 divide(*this, lhsWords, RHS, rhsWords, &Quotient, nullptr); 1604 return Quotient; 1605 } 1606 1607 APInt APInt::sdiv(const APInt &RHS) const { 1608 if (isNegative()) { 1609 if (RHS.isNegative()) 1610 return (-(*this)).udiv(-RHS); 1611 return -((-(*this)).udiv(RHS)); 1612 } 1613 if (RHS.isNegative()) 1614 return -(this->udiv(-RHS)); 1615 return this->udiv(RHS); 1616 } 1617 1618 APInt APInt::urem(const APInt& RHS) const { 1619 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1620 if (isSingleWord()) { 1621 assert(RHS.U.VAL != 0 && "Remainder by zero?"); 1622 return APInt(BitWidth, U.VAL % RHS.U.VAL); 1623 } 1624 1625 // Get some facts about the LHS 1626 unsigned lhsBits = getActiveBits(); 1627 unsigned lhsWords = !lhsBits ? 0 : (whichWord(lhsBits - 1) + 1); 1628 1629 // Get some facts about the RHS 1630 unsigned rhsBits = RHS.getActiveBits(); 1631 unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1); 1632 assert(rhsWords && "Performing remainder operation by zero ???"); 1633 1634 // Check the degenerate cases 1635 if (lhsWords == 0) 1636 // 0 % Y ===> 0 1637 return APInt(BitWidth, 0); 1638 if (lhsWords < rhsWords || this->ult(RHS)) 1639 // X % Y ===> X, iff X < Y 1640 return *this; 1641 if (*this == RHS) 1642 // X % X == 0; 1643 return APInt(BitWidth, 0); 1644 if (lhsWords == 1) 1645 // All high words are zero, just use native remainder 1646 return APInt(BitWidth, U.pVal[0] % RHS.U.pVal[0]); 1647 1648 // We have to compute it the hard way. Invoke the Knuth divide algorithm. 1649 APInt Remainder; 1650 divide(*this, lhsWords, RHS, rhsWords, nullptr, &Remainder); 1651 return Remainder; 1652 } 1653 1654 APInt APInt::srem(const APInt &RHS) const { 1655 if (isNegative()) { 1656 if (RHS.isNegative()) 1657 return -((-(*this)).urem(-RHS)); 1658 return -((-(*this)).urem(RHS)); 1659 } 1660 if (RHS.isNegative()) 1661 return this->urem(-RHS); 1662 return this->urem(RHS); 1663 } 1664 1665 void APInt::udivrem(const APInt &LHS, const APInt &RHS, 1666 APInt &Quotient, APInt &Remainder) { 1667 assert(LHS.BitWidth == RHS.BitWidth && "Bit widths must be the same"); 1668 1669 // First, deal with the easy case 1670 if (LHS.isSingleWord()) { 1671 assert(RHS.U.VAL != 0 && "Divide by zero?"); 1672 uint64_t QuotVal = LHS.U.VAL / RHS.U.VAL; 1673 uint64_t RemVal = LHS.U.VAL % RHS.U.VAL; 1674 Quotient = APInt(LHS.BitWidth, QuotVal); 1675 Remainder = APInt(LHS.BitWidth, RemVal); 1676 return; 1677 } 1678 1679 // Get some size facts about the dividend and divisor 1680 unsigned lhsBits = LHS.getActiveBits(); 1681 unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1); 1682 unsigned rhsBits = RHS.getActiveBits(); 1683 unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1); 1684 1685 // Check the degenerate cases 1686 if (lhsWords == 0) { 1687 Quotient = 0; // 0 / Y ===> 0 1688 Remainder = 0; // 0 % Y ===> 0 1689 return; 1690 } 1691 1692 if (lhsWords < rhsWords || LHS.ult(RHS)) { 1693 Remainder = LHS; // X % Y ===> X, iff X < Y 1694 Quotient = 0; // X / Y ===> 0, iff X < Y 1695 return; 1696 } 1697 1698 if (LHS == RHS) { 1699 Quotient = 1; // X / X ===> 1 1700 Remainder = 0; // X % X ===> 0; 1701 return; 1702 } 1703 1704 if (lhsWords == 1 && rhsWords == 1) { 1705 // There is only one word to consider so use the native versions. 1706 uint64_t lhsValue = LHS.isSingleWord() ? LHS.U.VAL : LHS.U.pVal[0]; 1707 uint64_t rhsValue = RHS.isSingleWord() ? RHS.U.VAL : RHS.U.pVal[0]; 1708 Quotient = APInt(LHS.getBitWidth(), lhsValue / rhsValue); 1709 Remainder = APInt(LHS.getBitWidth(), lhsValue % rhsValue); 1710 return; 1711 } 1712 1713 // Okay, lets do it the long way 1714 divide(LHS, lhsWords, RHS, rhsWords, &Quotient, &Remainder); 1715 } 1716 1717 void APInt::sdivrem(const APInt &LHS, const APInt &RHS, 1718 APInt &Quotient, APInt &Remainder) { 1719 if (LHS.isNegative()) { 1720 if (RHS.isNegative()) 1721 APInt::udivrem(-LHS, -RHS, Quotient, Remainder); 1722 else { 1723 APInt::udivrem(-LHS, RHS, Quotient, Remainder); 1724 Quotient = -Quotient; 1725 } 1726 Remainder = -Remainder; 1727 } else if (RHS.isNegative()) { 1728 APInt::udivrem(LHS, -RHS, Quotient, Remainder); 1729 Quotient = -Quotient; 1730 } else { 1731 APInt::udivrem(LHS, RHS, Quotient, Remainder); 1732 } 1733 } 1734 1735 APInt APInt::sadd_ov(const APInt &RHS, bool &Overflow) const { 1736 APInt Res = *this+RHS; 1737 Overflow = isNonNegative() == RHS.isNonNegative() && 1738 Res.isNonNegative() != isNonNegative(); 1739 return Res; 1740 } 1741 1742 APInt APInt::uadd_ov(const APInt &RHS, bool &Overflow) const { 1743 APInt Res = *this+RHS; 1744 Overflow = Res.ult(RHS); 1745 return Res; 1746 } 1747 1748 APInt APInt::ssub_ov(const APInt &RHS, bool &Overflow) const { 1749 APInt Res = *this - RHS; 1750 Overflow = isNonNegative() != RHS.isNonNegative() && 1751 Res.isNonNegative() != isNonNegative(); 1752 return Res; 1753 } 1754 1755 APInt APInt::usub_ov(const APInt &RHS, bool &Overflow) const { 1756 APInt Res = *this-RHS; 1757 Overflow = Res.ugt(*this); 1758 return Res; 1759 } 1760 1761 APInt APInt::sdiv_ov(const APInt &RHS, bool &Overflow) const { 1762 // MININT/-1 --> overflow. 1763 Overflow = isMinSignedValue() && RHS.isAllOnesValue(); 1764 return sdiv(RHS); 1765 } 1766 1767 APInt APInt::smul_ov(const APInt &RHS, bool &Overflow) const { 1768 APInt Res = *this * RHS; 1769 1770 if (*this != 0 && RHS != 0) 1771 Overflow = Res.sdiv(RHS) != *this || Res.sdiv(*this) != RHS; 1772 else 1773 Overflow = false; 1774 return Res; 1775 } 1776 1777 APInt APInt::umul_ov(const APInt &RHS, bool &Overflow) const { 1778 APInt Res = *this * RHS; 1779 1780 if (*this != 0 && RHS != 0) 1781 Overflow = Res.udiv(RHS) != *this || Res.udiv(*this) != RHS; 1782 else 1783 Overflow = false; 1784 return Res; 1785 } 1786 1787 APInt APInt::sshl_ov(const APInt &ShAmt, bool &Overflow) const { 1788 Overflow = ShAmt.uge(getBitWidth()); 1789 if (Overflow) 1790 return APInt(BitWidth, 0); 1791 1792 if (isNonNegative()) // Don't allow sign change. 1793 Overflow = ShAmt.uge(countLeadingZeros()); 1794 else 1795 Overflow = ShAmt.uge(countLeadingOnes()); 1796 1797 return *this << ShAmt; 1798 } 1799 1800 APInt APInt::ushl_ov(const APInt &ShAmt, bool &Overflow) const { 1801 Overflow = ShAmt.uge(getBitWidth()); 1802 if (Overflow) 1803 return APInt(BitWidth, 0); 1804 1805 Overflow = ShAmt.ugt(countLeadingZeros()); 1806 1807 return *this << ShAmt; 1808 } 1809 1810 1811 1812 1813 void APInt::fromString(unsigned numbits, StringRef str, uint8_t radix) { 1814 // Check our assumptions here 1815 assert(!str.empty() && "Invalid string length"); 1816 assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 || 1817 radix == 36) && 1818 "Radix should be 2, 8, 10, 16, or 36!"); 1819 1820 StringRef::iterator p = str.begin(); 1821 size_t slen = str.size(); 1822 bool isNeg = *p == '-'; 1823 if (*p == '-' || *p == '+') { 1824 p++; 1825 slen--; 1826 assert(slen && "String is only a sign, needs a value."); 1827 } 1828 assert((slen <= numbits || radix != 2) && "Insufficient bit width"); 1829 assert(((slen-1)*3 <= numbits || radix != 8) && "Insufficient bit width"); 1830 assert(((slen-1)*4 <= numbits || radix != 16) && "Insufficient bit width"); 1831 assert((((slen-1)*64)/22 <= numbits || radix != 10) && 1832 "Insufficient bit width"); 1833 1834 // Allocate memory if needed 1835 if (isSingleWord()) 1836 U.VAL = 0; 1837 else 1838 U.pVal = getClearedMemory(getNumWords()); 1839 1840 // Figure out if we can shift instead of multiply 1841 unsigned shift = (radix == 16 ? 4 : radix == 8 ? 3 : radix == 2 ? 1 : 0); 1842 1843 // Enter digit traversal loop 1844 for (StringRef::iterator e = str.end(); p != e; ++p) { 1845 unsigned digit = getDigit(*p, radix); 1846 assert(digit < radix && "Invalid character in digit string"); 1847 1848 // Shift or multiply the value by the radix 1849 if (slen > 1) { 1850 if (shift) 1851 *this <<= shift; 1852 else 1853 *this *= radix; 1854 } 1855 1856 // Add in the digit we just interpreted 1857 *this += digit; 1858 } 1859 // If its negative, put it in two's complement form 1860 if (isNeg) { 1861 --(*this); 1862 this->flipAllBits(); 1863 } 1864 } 1865 1866 void APInt::toString(SmallVectorImpl<char> &Str, unsigned Radix, 1867 bool Signed, bool formatAsCLiteral) const { 1868 assert((Radix == 10 || Radix == 8 || Radix == 16 || Radix == 2 || 1869 Radix == 36) && 1870 "Radix should be 2, 8, 10, 16, or 36!"); 1871 1872 const char *Prefix = ""; 1873 if (formatAsCLiteral) { 1874 switch (Radix) { 1875 case 2: 1876 // Binary literals are a non-standard extension added in gcc 4.3: 1877 // http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Binary-constants.html 1878 Prefix = "0b"; 1879 break; 1880 case 8: 1881 Prefix = "0"; 1882 break; 1883 case 10: 1884 break; // No prefix 1885 case 16: 1886 Prefix = "0x"; 1887 break; 1888 default: 1889 llvm_unreachable("Invalid radix!"); 1890 } 1891 } 1892 1893 // First, check for a zero value and just short circuit the logic below. 1894 if (*this == 0) { 1895 while (*Prefix) { 1896 Str.push_back(*Prefix); 1897 ++Prefix; 1898 }; 1899 Str.push_back('0'); 1900 return; 1901 } 1902 1903 static const char Digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 1904 1905 if (isSingleWord()) { 1906 char Buffer[65]; 1907 char *BufPtr = Buffer+65; 1908 1909 uint64_t N; 1910 if (!Signed) { 1911 N = getZExtValue(); 1912 } else { 1913 int64_t I = getSExtValue(); 1914 if (I >= 0) { 1915 N = I; 1916 } else { 1917 Str.push_back('-'); 1918 N = -(uint64_t)I; 1919 } 1920 } 1921 1922 while (*Prefix) { 1923 Str.push_back(*Prefix); 1924 ++Prefix; 1925 }; 1926 1927 while (N) { 1928 *--BufPtr = Digits[N % Radix]; 1929 N /= Radix; 1930 } 1931 Str.append(BufPtr, Buffer+65); 1932 return; 1933 } 1934 1935 APInt Tmp(*this); 1936 1937 if (Signed && isNegative()) { 1938 // They want to print the signed version and it is a negative value 1939 // Flip the bits and add one to turn it into the equivalent positive 1940 // value and put a '-' in the result. 1941 Tmp.flipAllBits(); 1942 ++Tmp; 1943 Str.push_back('-'); 1944 } 1945 1946 while (*Prefix) { 1947 Str.push_back(*Prefix); 1948 ++Prefix; 1949 }; 1950 1951 // We insert the digits backward, then reverse them to get the right order. 1952 unsigned StartDig = Str.size(); 1953 1954 // For the 2, 8 and 16 bit cases, we can just shift instead of divide 1955 // because the number of bits per digit (1, 3 and 4 respectively) divides 1956 // equally. We just shift until the value is zero. 1957 if (Radix == 2 || Radix == 8 || Radix == 16) { 1958 // Just shift tmp right for each digit width until it becomes zero 1959 unsigned ShiftAmt = (Radix == 16 ? 4 : (Radix == 8 ? 3 : 1)); 1960 unsigned MaskAmt = Radix - 1; 1961 1962 while (Tmp != 0) { 1963 unsigned Digit = unsigned(Tmp.getRawData()[0]) & MaskAmt; 1964 Str.push_back(Digits[Digit]); 1965 Tmp.lshrInPlace(ShiftAmt); 1966 } 1967 } else { 1968 APInt divisor(Radix == 10? 4 : 8, Radix); 1969 while (Tmp != 0) { 1970 APInt APdigit(1, 0); 1971 APInt tmp2(Tmp.getBitWidth(), 0); 1972 divide(Tmp, Tmp.getNumWords(), divisor, divisor.getNumWords(), &tmp2, 1973 &APdigit); 1974 unsigned Digit = (unsigned)APdigit.getZExtValue(); 1975 assert(Digit < Radix && "divide failed"); 1976 Str.push_back(Digits[Digit]); 1977 Tmp = tmp2; 1978 } 1979 } 1980 1981 // Reverse the digits before returning. 1982 std::reverse(Str.begin()+StartDig, Str.end()); 1983 } 1984 1985 /// Returns the APInt as a std::string. Note that this is an inefficient method. 1986 /// It is better to pass in a SmallVector/SmallString to the methods above. 1987 std::string APInt::toString(unsigned Radix = 10, bool Signed = true) const { 1988 SmallString<40> S; 1989 toString(S, Radix, Signed, /* formatAsCLiteral = */false); 1990 return S.str(); 1991 } 1992 1993 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 1994 LLVM_DUMP_METHOD void APInt::dump() const { 1995 SmallString<40> S, U; 1996 this->toStringUnsigned(U); 1997 this->toStringSigned(S); 1998 dbgs() << "APInt(" << BitWidth << "b, " 1999 << U << "u " << S << "s)\n"; 2000 } 2001 #endif 2002 2003 void APInt::print(raw_ostream &OS, bool isSigned) const { 2004 SmallString<40> S; 2005 this->toString(S, 10, isSigned, /* formatAsCLiteral = */false); 2006 OS << S; 2007 } 2008 2009 // This implements a variety of operations on a representation of 2010 // arbitrary precision, two's-complement, bignum integer values. 2011 2012 // Assumed by lowHalf, highHalf, partMSB and partLSB. A fairly safe 2013 // and unrestricting assumption. 2014 static_assert(APInt::APINT_BITS_PER_WORD % 2 == 0, 2015 "Part width must be divisible by 2!"); 2016 2017 /* Some handy functions local to this file. */ 2018 2019 /* Returns the integer part with the least significant BITS set. 2020 BITS cannot be zero. */ 2021 static inline APInt::WordType lowBitMask(unsigned bits) { 2022 assert(bits != 0 && bits <= APInt::APINT_BITS_PER_WORD); 2023 2024 return ~(APInt::WordType) 0 >> (APInt::APINT_BITS_PER_WORD - bits); 2025 } 2026 2027 /* Returns the value of the lower half of PART. */ 2028 static inline APInt::WordType lowHalf(APInt::WordType part) { 2029 return part & lowBitMask(APInt::APINT_BITS_PER_WORD / 2); 2030 } 2031 2032 /* Returns the value of the upper half of PART. */ 2033 static inline APInt::WordType highHalf(APInt::WordType part) { 2034 return part >> (APInt::APINT_BITS_PER_WORD / 2); 2035 } 2036 2037 /* Returns the bit number of the most significant set bit of a part. 2038 If the input number has no bits set -1U is returned. */ 2039 static unsigned partMSB(APInt::WordType value) { 2040 return findLastSet(value, ZB_Max); 2041 } 2042 2043 /* Returns the bit number of the least significant set bit of a 2044 part. If the input number has no bits set -1U is returned. */ 2045 static unsigned partLSB(APInt::WordType value) { 2046 return findFirstSet(value, ZB_Max); 2047 } 2048 2049 /* Sets the least significant part of a bignum to the input value, and 2050 zeroes out higher parts. */ 2051 void APInt::tcSet(WordType *dst, WordType part, unsigned parts) { 2052 assert(parts > 0); 2053 2054 dst[0] = part; 2055 for (unsigned i = 1; i < parts; i++) 2056 dst[i] = 0; 2057 } 2058 2059 /* Assign one bignum to another. */ 2060 void APInt::tcAssign(WordType *dst, const WordType *src, unsigned parts) { 2061 for (unsigned i = 0; i < parts; i++) 2062 dst[i] = src[i]; 2063 } 2064 2065 /* Returns true if a bignum is zero, false otherwise. */ 2066 bool APInt::tcIsZero(const WordType *src, unsigned parts) { 2067 for (unsigned i = 0; i < parts; i++) 2068 if (src[i]) 2069 return false; 2070 2071 return true; 2072 } 2073 2074 /* Extract the given bit of a bignum; returns 0 or 1. */ 2075 int APInt::tcExtractBit(const WordType *parts, unsigned bit) { 2076 return (parts[whichWord(bit)] & maskBit(bit)) != 0; 2077 } 2078 2079 /* Set the given bit of a bignum. */ 2080 void APInt::tcSetBit(WordType *parts, unsigned bit) { 2081 parts[whichWord(bit)] |= maskBit(bit); 2082 } 2083 2084 /* Clears the given bit of a bignum. */ 2085 void APInt::tcClearBit(WordType *parts, unsigned bit) { 2086 parts[whichWord(bit)] &= ~maskBit(bit); 2087 } 2088 2089 /* Returns the bit number of the least significant set bit of a 2090 number. If the input number has no bits set -1U is returned. */ 2091 unsigned APInt::tcLSB(const WordType *parts, unsigned n) { 2092 for (unsigned i = 0; i < n; i++) { 2093 if (parts[i] != 0) { 2094 unsigned lsb = partLSB(parts[i]); 2095 2096 return lsb + i * APINT_BITS_PER_WORD; 2097 } 2098 } 2099 2100 return -1U; 2101 } 2102 2103 /* Returns the bit number of the most significant set bit of a number. 2104 If the input number has no bits set -1U is returned. */ 2105 unsigned APInt::tcMSB(const WordType *parts, unsigned n) { 2106 do { 2107 --n; 2108 2109 if (parts[n] != 0) { 2110 unsigned msb = partMSB(parts[n]); 2111 2112 return msb + n * APINT_BITS_PER_WORD; 2113 } 2114 } while (n); 2115 2116 return -1U; 2117 } 2118 2119 /* Copy the bit vector of width srcBITS from SRC, starting at bit 2120 srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes 2121 the least significant bit of DST. All high bits above srcBITS in 2122 DST are zero-filled. */ 2123 void 2124 APInt::tcExtract(WordType *dst, unsigned dstCount, const WordType *src, 2125 unsigned srcBits, unsigned srcLSB) { 2126 unsigned dstParts = (srcBits + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; 2127 assert(dstParts <= dstCount); 2128 2129 unsigned firstSrcPart = srcLSB / APINT_BITS_PER_WORD; 2130 tcAssign (dst, src + firstSrcPart, dstParts); 2131 2132 unsigned shift = srcLSB % APINT_BITS_PER_WORD; 2133 tcShiftRight (dst, dstParts, shift); 2134 2135 /* We now have (dstParts * APINT_BITS_PER_WORD - shift) bits from SRC 2136 in DST. If this is less that srcBits, append the rest, else 2137 clear the high bits. */ 2138 unsigned n = dstParts * APINT_BITS_PER_WORD - shift; 2139 if (n < srcBits) { 2140 WordType mask = lowBitMask (srcBits - n); 2141 dst[dstParts - 1] |= ((src[firstSrcPart + dstParts] & mask) 2142 << n % APINT_BITS_PER_WORD); 2143 } else if (n > srcBits) { 2144 if (srcBits % APINT_BITS_PER_WORD) 2145 dst[dstParts - 1] &= lowBitMask (srcBits % APINT_BITS_PER_WORD); 2146 } 2147 2148 /* Clear high parts. */ 2149 while (dstParts < dstCount) 2150 dst[dstParts++] = 0; 2151 } 2152 2153 /* DST += RHS + C where C is zero or one. Returns the carry flag. */ 2154 APInt::WordType APInt::tcAdd(WordType *dst, const WordType *rhs, 2155 WordType c, unsigned parts) { 2156 assert(c <= 1); 2157 2158 for (unsigned i = 0; i < parts; i++) { 2159 WordType l = dst[i]; 2160 if (c) { 2161 dst[i] += rhs[i] + 1; 2162 c = (dst[i] <= l); 2163 } else { 2164 dst[i] += rhs[i]; 2165 c = (dst[i] < l); 2166 } 2167 } 2168 2169 return c; 2170 } 2171 2172 /// This function adds a single "word" integer, src, to the multiple 2173 /// "word" integer array, dst[]. dst[] is modified to reflect the addition and 2174 /// 1 is returned if there is a carry out, otherwise 0 is returned. 2175 /// @returns the carry of the addition. 2176 APInt::WordType APInt::tcAddPart(WordType *dst, WordType src, 2177 unsigned parts) { 2178 for (unsigned i = 0; i < parts; ++i) { 2179 dst[i] += src; 2180 if (dst[i] >= src) 2181 return 0; // No need to carry so exit early. 2182 src = 1; // Carry one to next digit. 2183 } 2184 2185 return 1; 2186 } 2187 2188 /* DST -= RHS + C where C is zero or one. Returns the carry flag. */ 2189 APInt::WordType APInt::tcSubtract(WordType *dst, const WordType *rhs, 2190 WordType c, unsigned parts) { 2191 assert(c <= 1); 2192 2193 for (unsigned i = 0; i < parts; i++) { 2194 WordType l = dst[i]; 2195 if (c) { 2196 dst[i] -= rhs[i] + 1; 2197 c = (dst[i] >= l); 2198 } else { 2199 dst[i] -= rhs[i]; 2200 c = (dst[i] > l); 2201 } 2202 } 2203 2204 return c; 2205 } 2206 2207 /// This function subtracts a single "word" (64-bit word), src, from 2208 /// the multi-word integer array, dst[], propagating the borrowed 1 value until 2209 /// no further borrowing is needed or it runs out of "words" in dst. The result 2210 /// is 1 if "borrowing" exhausted the digits in dst, or 0 if dst was not 2211 /// exhausted. In other words, if src > dst then this function returns 1, 2212 /// otherwise 0. 2213 /// @returns the borrow out of the subtraction 2214 APInt::WordType APInt::tcSubtractPart(WordType *dst, WordType src, 2215 unsigned parts) { 2216 for (unsigned i = 0; i < parts; ++i) { 2217 WordType Dst = dst[i]; 2218 dst[i] -= src; 2219 if (src <= Dst) 2220 return 0; // No need to borrow so exit early. 2221 src = 1; // We have to "borrow 1" from next "word" 2222 } 2223 2224 return 1; 2225 } 2226 2227 /* Negate a bignum in-place. */ 2228 void APInt::tcNegate(WordType *dst, unsigned parts) { 2229 tcComplement(dst, parts); 2230 tcIncrement(dst, parts); 2231 } 2232 2233 /* DST += SRC * MULTIPLIER + CARRY if add is true 2234 DST = SRC * MULTIPLIER + CARRY if add is false 2235 2236 Requires 0 <= DSTPARTS <= SRCPARTS + 1. If DST overlaps SRC 2237 they must start at the same point, i.e. DST == SRC. 2238 2239 If DSTPARTS == SRCPARTS + 1 no overflow occurs and zero is 2240 returned. Otherwise DST is filled with the least significant 2241 DSTPARTS parts of the result, and if all of the omitted higher 2242 parts were zero return zero, otherwise overflow occurred and 2243 return one. */ 2244 int APInt::tcMultiplyPart(WordType *dst, const WordType *src, 2245 WordType multiplier, WordType carry, 2246 unsigned srcParts, unsigned dstParts, 2247 bool add) { 2248 /* Otherwise our writes of DST kill our later reads of SRC. */ 2249 assert(dst <= src || dst >= src + srcParts); 2250 assert(dstParts <= srcParts + 1); 2251 2252 /* N loops; minimum of dstParts and srcParts. */ 2253 unsigned n = std::min(dstParts, srcParts); 2254 2255 for (unsigned i = 0; i < n; i++) { 2256 WordType low, mid, high, srcPart; 2257 2258 /* [ LOW, HIGH ] = MULTIPLIER * SRC[i] + DST[i] + CARRY. 2259 2260 This cannot overflow, because 2261 2262 (n - 1) * (n - 1) + 2 (n - 1) = (n - 1) * (n + 1) 2263 2264 which is less than n^2. */ 2265 2266 srcPart = src[i]; 2267 2268 if (multiplier == 0 || srcPart == 0) { 2269 low = carry; 2270 high = 0; 2271 } else { 2272 low = lowHalf(srcPart) * lowHalf(multiplier); 2273 high = highHalf(srcPart) * highHalf(multiplier); 2274 2275 mid = lowHalf(srcPart) * highHalf(multiplier); 2276 high += highHalf(mid); 2277 mid <<= APINT_BITS_PER_WORD / 2; 2278 if (low + mid < low) 2279 high++; 2280 low += mid; 2281 2282 mid = highHalf(srcPart) * lowHalf(multiplier); 2283 high += highHalf(mid); 2284 mid <<= APINT_BITS_PER_WORD / 2; 2285 if (low + mid < low) 2286 high++; 2287 low += mid; 2288 2289 /* Now add carry. */ 2290 if (low + carry < low) 2291 high++; 2292 low += carry; 2293 } 2294 2295 if (add) { 2296 /* And now DST[i], and store the new low part there. */ 2297 if (low + dst[i] < low) 2298 high++; 2299 dst[i] += low; 2300 } else 2301 dst[i] = low; 2302 2303 carry = high; 2304 } 2305 2306 if (srcParts < dstParts) { 2307 /* Full multiplication, there is no overflow. */ 2308 assert(srcParts + 1 == dstParts); 2309 dst[srcParts] = carry; 2310 return 0; 2311 } 2312 2313 /* We overflowed if there is carry. */ 2314 if (carry) 2315 return 1; 2316 2317 /* We would overflow if any significant unwritten parts would be 2318 non-zero. This is true if any remaining src parts are non-zero 2319 and the multiplier is non-zero. */ 2320 if (multiplier) 2321 for (unsigned i = dstParts; i < srcParts; i++) 2322 if (src[i]) 2323 return 1; 2324 2325 /* We fitted in the narrow destination. */ 2326 return 0; 2327 } 2328 2329 /* DST = LHS * RHS, where DST has the same width as the operands and 2330 is filled with the least significant parts of the result. Returns 2331 one if overflow occurred, otherwise zero. DST must be disjoint 2332 from both operands. */ 2333 int APInt::tcMultiply(WordType *dst, const WordType *lhs, 2334 const WordType *rhs, unsigned parts) { 2335 assert(dst != lhs && dst != rhs); 2336 2337 int overflow = 0; 2338 tcSet(dst, 0, parts); 2339 2340 for (unsigned i = 0; i < parts; i++) 2341 overflow |= tcMultiplyPart(&dst[i], lhs, rhs[i], 0, parts, 2342 parts - i, true); 2343 2344 return overflow; 2345 } 2346 2347 /* DST = LHS * RHS, where DST has width the sum of the widths of the 2348 operands. No overflow occurs. DST must be disjoint from both 2349 operands. Returns the number of parts required to hold the 2350 result. */ 2351 unsigned APInt::tcFullMultiply(WordType *dst, const WordType *lhs, 2352 const WordType *rhs, unsigned lhsParts, 2353 unsigned rhsParts) { 2354 /* Put the narrower number on the LHS for less loops below. */ 2355 if (lhsParts > rhsParts) 2356 return tcFullMultiply (dst, rhs, lhs, rhsParts, lhsParts); 2357 2358 assert(dst != lhs && dst != rhs); 2359 2360 tcSet(dst, 0, rhsParts); 2361 2362 for (unsigned i = 0; i < lhsParts; i++) 2363 tcMultiplyPart(&dst[i], rhs, lhs[i], 0, rhsParts, rhsParts + 1, true); 2364 2365 unsigned n = lhsParts + rhsParts; 2366 2367 return n - (dst[n - 1] == 0); 2368 } 2369 2370 /* If RHS is zero LHS and REMAINDER are left unchanged, return one. 2371 Otherwise set LHS to LHS / RHS with the fractional part discarded, 2372 set REMAINDER to the remainder, return zero. i.e. 2373 2374 OLD_LHS = RHS * LHS + REMAINDER 2375 2376 SCRATCH is a bignum of the same size as the operands and result for 2377 use by the routine; its contents need not be initialized and are 2378 destroyed. LHS, REMAINDER and SCRATCH must be distinct. 2379 */ 2380 int APInt::tcDivide(WordType *lhs, const WordType *rhs, 2381 WordType *remainder, WordType *srhs, 2382 unsigned parts) { 2383 assert(lhs != remainder && lhs != srhs && remainder != srhs); 2384 2385 unsigned shiftCount = tcMSB(rhs, parts) + 1; 2386 if (shiftCount == 0) 2387 return true; 2388 2389 shiftCount = parts * APINT_BITS_PER_WORD - shiftCount; 2390 unsigned n = shiftCount / APINT_BITS_PER_WORD; 2391 WordType mask = (WordType) 1 << (shiftCount % APINT_BITS_PER_WORD); 2392 2393 tcAssign(srhs, rhs, parts); 2394 tcShiftLeft(srhs, parts, shiftCount); 2395 tcAssign(remainder, lhs, parts); 2396 tcSet(lhs, 0, parts); 2397 2398 /* Loop, subtracting SRHS if REMAINDER is greater and adding that to 2399 the total. */ 2400 for (;;) { 2401 int compare; 2402 2403 compare = tcCompare(remainder, srhs, parts); 2404 if (compare >= 0) { 2405 tcSubtract(remainder, srhs, 0, parts); 2406 lhs[n] |= mask; 2407 } 2408 2409 if (shiftCount == 0) 2410 break; 2411 shiftCount--; 2412 tcShiftRight(srhs, parts, 1); 2413 if ((mask >>= 1) == 0) { 2414 mask = (WordType) 1 << (APINT_BITS_PER_WORD - 1); 2415 n--; 2416 } 2417 } 2418 2419 return false; 2420 } 2421 2422 /// Shift a bignum left Cound bits in-place. Shifted in bits are zero. There are 2423 /// no restrictions on Count. 2424 void APInt::tcShiftLeft(WordType *Dst, unsigned Words, unsigned Count) { 2425 // Don't bother performing a no-op shift. 2426 if (!Count) 2427 return; 2428 2429 // WordShift is the inter-part shift; BitShift is the intra-part shift. 2430 unsigned WordShift = std::min(Count / APINT_BITS_PER_WORD, Words); 2431 unsigned BitShift = Count % APINT_BITS_PER_WORD; 2432 2433 // Fastpath for moving by whole words. 2434 if (BitShift == 0) { 2435 std::memmove(Dst + WordShift, Dst, (Words - WordShift) * APINT_WORD_SIZE); 2436 } else { 2437 while (Words-- > WordShift) { 2438 Dst[Words] = Dst[Words - WordShift] << BitShift; 2439 if (Words > WordShift) 2440 Dst[Words] |= 2441 Dst[Words - WordShift - 1] >> (APINT_BITS_PER_WORD - BitShift); 2442 } 2443 } 2444 2445 // Fill in the remainder with 0s. 2446 std::memset(Dst, 0, WordShift * APINT_WORD_SIZE); 2447 } 2448 2449 /// Shift a bignum right Count bits in-place. Shifted in bits are zero. There 2450 /// are no restrictions on Count. 2451 void APInt::tcShiftRight(WordType *Dst, unsigned Words, unsigned Count) { 2452 // Don't bother performing a no-op shift. 2453 if (!Count) 2454 return; 2455 2456 // WordShift is the inter-part shift; BitShift is the intra-part shift. 2457 unsigned WordShift = std::min(Count / APINT_BITS_PER_WORD, Words); 2458 unsigned BitShift = Count % APINT_BITS_PER_WORD; 2459 2460 unsigned WordsToMove = Words - WordShift; 2461 // Fastpath for moving by whole words. 2462 if (BitShift == 0) { 2463 std::memmove(Dst, Dst + WordShift, WordsToMove * APINT_WORD_SIZE); 2464 } else { 2465 for (unsigned i = 0; i != WordsToMove; ++i) { 2466 Dst[i] = Dst[i + WordShift] >> BitShift; 2467 if (i + 1 != WordsToMove) 2468 Dst[i] |= Dst[i + WordShift + 1] << (APINT_BITS_PER_WORD - BitShift); 2469 } 2470 } 2471 2472 // Fill in the remainder with 0s. 2473 std::memset(Dst + WordsToMove, 0, WordShift * APINT_WORD_SIZE); 2474 } 2475 2476 /* Bitwise and of two bignums. */ 2477 void APInt::tcAnd(WordType *dst, const WordType *rhs, unsigned parts) { 2478 for (unsigned i = 0; i < parts; i++) 2479 dst[i] &= rhs[i]; 2480 } 2481 2482 /* Bitwise inclusive or of two bignums. */ 2483 void APInt::tcOr(WordType *dst, const WordType *rhs, unsigned parts) { 2484 for (unsigned i = 0; i < parts; i++) 2485 dst[i] |= rhs[i]; 2486 } 2487 2488 /* Bitwise exclusive or of two bignums. */ 2489 void APInt::tcXor(WordType *dst, const WordType *rhs, unsigned parts) { 2490 for (unsigned i = 0; i < parts; i++) 2491 dst[i] ^= rhs[i]; 2492 } 2493 2494 /* Complement a bignum in-place. */ 2495 void APInt::tcComplement(WordType *dst, unsigned parts) { 2496 for (unsigned i = 0; i < parts; i++) 2497 dst[i] = ~dst[i]; 2498 } 2499 2500 /* Comparison (unsigned) of two bignums. */ 2501 int APInt::tcCompare(const WordType *lhs, const WordType *rhs, 2502 unsigned parts) { 2503 while (parts) { 2504 parts--; 2505 if (lhs[parts] != rhs[parts]) 2506 return (lhs[parts] > rhs[parts]) ? 1 : -1; 2507 } 2508 2509 return 0; 2510 } 2511 2512 /* Set the least significant BITS bits of a bignum, clear the 2513 rest. */ 2514 void APInt::tcSetLeastSignificantBits(WordType *dst, unsigned parts, 2515 unsigned bits) { 2516 unsigned i = 0; 2517 while (bits > APINT_BITS_PER_WORD) { 2518 dst[i++] = ~(WordType) 0; 2519 bits -= APINT_BITS_PER_WORD; 2520 } 2521 2522 if (bits) 2523 dst[i++] = ~(WordType) 0 >> (APINT_BITS_PER_WORD - bits); 2524 2525 while (i < parts) 2526 dst[i++] = 0; 2527 } 2528