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