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