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