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