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