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