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