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