• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
getClearedMemory(unsigned numWords)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.
getMemory(unsigned numWords)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.
getDigit(char cdigit,uint8_t radix)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 
initSlowCase(uint64_t val,bool isSigned)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 
initSlowCase(const APInt & that)86 void APInt::initSlowCase(const APInt& that) {
87   pVal = getMemory(getNumWords());
88   memcpy(pVal, that.pVal, getNumWords() * APINT_WORD_SIZE);
89 }
90 
initFromArray(ArrayRef<uint64_t> bigVal)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 
APInt(unsigned numBits,ArrayRef<uint64_t> bigVal)108 APInt::APInt(unsigned numBits, ArrayRef<uint64_t> bigVal)
109   : BitWidth(numBits), VAL(0) {
110   initFromArray(bigVal);
111 }
112 
APInt(unsigned numBits,unsigned numWords,const uint64_t bigVal[])113 APInt::APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[])
114   : BitWidth(numBits), VAL(0) {
115   initFromArray(makeArrayRef(bigVal, numWords));
116 }
117 
APInt(unsigned numbits,StringRef Str,uint8_t radix)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 
AssignSlowCase(const APInt & RHS)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 
operator =(uint64_t RHS)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.
Profile(FoldingSetNodeID & ID) const167 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.
add_1(uint64_t dest[],uint64_t x[],unsigned len,uint64_t y)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.
operator ++()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
sub_1(uint64_t x[],unsigned len,uint64_t y)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.
operator --()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
add(uint64_t * dest,const uint64_t * x,const uint64_t * y,unsigned len)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.
operator +=(const APInt & RHS)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.
sub(uint64_t * dest,const uint64_t * x,const uint64_t * y,unsigned len)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.
operator -=(const APInt & RHS)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.
mul_1(uint64_t dest[],uint64_t x[],unsigned len,uint64_t y)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.
mul(uint64_t dest[],uint64_t x[],unsigned xlen,uint64_t y[],unsigned ylen)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 
operator *=(const APInt & RHS)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 
operator &=(const APInt & RHS)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 
operator |=(const APInt & RHS)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 
operator ^=(const APInt & RHS)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 
AndSlowCase(const APInt & RHS) const436 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 
OrSlowCase(const APInt & RHS) const444 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 
XorSlowCase(const APInt & RHS) const452 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 
operator *(const APInt & RHS) const464 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 
operator +(const APInt & RHS) const473 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 
operator +(uint64_t RHS) const483 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 
operator -(const APInt & RHS) const492 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 
operator -(uint64_t RHS) const502 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 
EqualSlowCase(const APInt & RHS) const511 bool APInt::EqualSlowCase(const APInt& RHS) const {
512   return std::equal(pVal, pVal + getNumWords(), RHS.pVal);
513 }
514 
EqualSlowCase(uint64_t Val) const515 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 
ult(const APInt & RHS) const523 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 
slt(const APInt & RHS) const555 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 
setBit(unsigned bitPosition)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.
clearBit(unsigned bitPosition)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.
flipBit(unsigned bitPosition)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 
getBitsNeeded(StringRef str,uint8_t radix)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 
hash_value(const APInt & Arg)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 
isSplat(unsigned SplatSizeInBits) const662 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.
getHiBits(unsigned numBits) const671 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.
getLoBits(unsigned numBits) const676 APInt APInt::getLoBits(unsigned numBits) const {
677   return APIntOps::lshr(APIntOps::shl(*this, BitWidth - numBits),
678                         BitWidth - numBits);
679 }
680 
countLeadingZerosSlowCase() const681 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 
countLeadingOnes() const698 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 
countTrailingZeros() const725 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 
countTrailingOnesSlowCase() const737 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 
countPopulationSlowCase() const747 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.
lshrNear(uint64_t * Dst,uint64_t * Src,unsigned Words,unsigned Shift)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 
byteSwap() const766 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 
reverseBits() const793 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 
GreatestCommonDivisor(const APInt & API1,const APInt & API2)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 
RoundDoubleToAPInt(double Double,unsigned width)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 ///  --------------------------------------
roundToDouble(bool isSigned) const877 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.
trunc(unsigned width) const938 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.
sext(unsigned width) const961 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.
zext(unsigned width) const1002 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 
zextOrTrunc(unsigned width) const1021 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 
sextOrTrunc(unsigned width) const1029 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 
zextOrSelf(unsigned width) const1037 APInt APInt::zextOrSelf(unsigned width) const {
1038   if (BitWidth < width)
1039     return zext(width);
1040   return *this;
1041 }
1042 
sextOrSelf(unsigned width) const1043 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.
ashr(const APInt & shiftAmt) const1051 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.
ashr(unsigned shiftAmt) const1057 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.
lshr(const APInt & shiftAmt) const1142 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.
lshr(unsigned shiftAmt) const1148 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.
shl(const APInt & shiftAmt) const1212 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 
shlSlowCase(unsigned shiftAmt) const1217 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 
rotl(const APInt & rotateAmt) const1273 APInt APInt::rotl(const APInt &rotateAmt) const {
1274   return rotl((unsigned)rotateAmt.getLimitedValue(BitWidth));
1275 }
1276 
rotl(unsigned rotateAmt) const1277 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 
rotr(const APInt & rotateAmt) const1284 APInt APInt::rotr(const APInt &rotateAmt) const {
1285   return rotr((unsigned)rotateAmt.getLimitedValue(BitWidth));
1286 }
1287 
rotr(unsigned rotateAmt) const1288 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.
sqrt() const1302 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.
multiplicativeInverse(const APInt & modulo) const1380 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.
magic() const1423 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.
magicu(unsigned LeadingZeros) const1467 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.
KnuthDiv(unsigned * u,unsigned * v,unsigned * q,unsigned * r,unsigned m,unsigned n)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 
divide(const APInt & LHS,unsigned lhsWords,const APInt & RHS,unsigned rhsWords,APInt * Quotient,APInt * Remainder)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 
udiv(const APInt & RHS) const1843 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 
sdiv(const APInt & RHS) const1880 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 
urem(const APInt & RHS) const1891 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 
srem(const APInt & RHS) const1928 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 
udivrem(const APInt & LHS,const APInt & RHS,APInt & Quotient,APInt & Remainder)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 
sdivrem(const APInt & LHS,const APInt & RHS,APInt & Quotient,APInt & Remainder)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 
sadd_ov(const APInt & RHS,bool & Overflow) const2009 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 
uadd_ov(const APInt & RHS,bool & Overflow) const2016 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 
ssub_ov(const APInt & RHS,bool & Overflow) const2022 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 
usub_ov(const APInt & RHS,bool & Overflow) const2029 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 
sdiv_ov(const APInt & RHS,bool & Overflow) const2035 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 
smul_ov(const APInt & RHS,bool & Overflow) const2041 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 
umul_ov(const APInt & RHS,bool & Overflow) const2051 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 
sshl_ov(const APInt & ShAmt,bool & Overflow) const2061 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 
ushl_ov(const APInt & ShAmt,bool & Overflow) const2074 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 
fromString(unsigned numbits,StringRef str,uint8_t radix)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 
toString(SmallVectorImpl<char> & Str,unsigned Radix,bool Signed,bool formatAsCLiteral) const2147 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.
toString(unsigned Radix=10,bool Signed=true) const2268 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 
dump() const2275 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 
print(raw_ostream & OS,bool isSigned) const2283 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
lowBitMask(unsigned int bits)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
lowHalf(integerPart part)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
highHalf(integerPart part)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
partMSB(integerPart value)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
partLSB(integerPart value)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
tcSet(integerPart * dst,integerPart part,unsigned int parts)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
tcAssign(integerPart * dst,const integerPart * src,unsigned int parts)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
tcIsZero(const integerPart * src,unsigned int parts)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
tcExtractBit(const integerPart * parts,unsigned int bit)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
tcSetBit(integerPart * parts,unsigned int bit)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
tcClearBit(integerPart * parts,unsigned int bit)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
tcLSB(const integerPart * parts,unsigned int n)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
tcMSB(const integerPart * parts,unsigned int n)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
tcExtract(integerPart * dst,unsigned int dstCount,const integerPart * src,unsigned int srcBits,unsigned int srcLSB)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
tcAdd(integerPart * dst,const integerPart * rhs,integerPart c,unsigned int parts)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
tcSubtract(integerPart * dst,const integerPart * rhs,integerPart c,unsigned int parts)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
tcNegate(integerPart * dst,unsigned int parts)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
tcMultiplyPart(integerPart * dst,const integerPart * src,integerPart multiplier,integerPart carry,unsigned int srcParts,unsigned int dstParts,bool add)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
tcMultiply(integerPart * dst,const integerPart * lhs,const integerPart * rhs,unsigned int parts)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
tcFullMultiply(integerPart * dst,const integerPart * lhs,const integerPart * rhs,unsigned int lhsParts,unsigned int rhsParts)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
tcDivide(integerPart * lhs,const integerPart * rhs,integerPart * remainder,integerPart * srhs,unsigned int parts)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
tcShiftLeft(integerPart * dst,unsigned int parts,unsigned int count)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
tcShiftRight(integerPart * dst,unsigned int parts,unsigned int count)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
tcAnd(integerPart * dst,const integerPart * rhs,unsigned int parts)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
tcOr(integerPart * dst,const integerPart * rhs,unsigned int parts)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
tcXor(integerPart * dst,const integerPart * rhs,unsigned int parts)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
tcComplement(integerPart * dst,unsigned int parts)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
tcCompare(const integerPart * lhs,const integerPart * rhs,unsigned int parts)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
tcIncrement(integerPart * dst,unsigned int parts)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
tcDecrement(integerPart * dst,unsigned int parts)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
tcSetLeastSignificantBits(integerPart * dst,unsigned int parts,unsigned int bits)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