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