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