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