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