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