e5423f153c3e6733984fd9054a629bfd17cdc8e7
[oota-llvm.git] / lib / Support / APInt.cpp
1 //===-- APInt.cpp - Implement APInt class ---------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a class to represent arbitrary precision integer
11 // constant values and provide a variety of arithmetic operations on them.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #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 unsigned APInt::countLeadingOnes() const {
726   if (isSingleWord())
727     return CountLeadingOnes_64(VAL << (APINT_BITS_PER_WORD - BitWidth));
728
729   unsigned highWordBits = BitWidth % APINT_BITS_PER_WORD;
730   unsigned shift;
731   if (!highWordBits) {
732     highWordBits = APINT_BITS_PER_WORD;
733     shift = 0;
734   } else {
735     shift = APINT_BITS_PER_WORD - highWordBits;
736   }
737   int i = getNumWords() - 1;
738   unsigned Count = CountLeadingOnes_64(pVal[i] << shift);
739   if (Count == highWordBits) {
740     for (i--; i >= 0; --i) {
741       if (pVal[i] == -1ULL)
742         Count += APINT_BITS_PER_WORD;
743       else {
744         Count += CountLeadingOnes_64(pVal[i]);
745         break;
746       }
747     }
748   }
749   return Count;
750 }
751
752 unsigned APInt::countTrailingZeros() const {
753   if (isSingleWord())
754     return std::min(unsigned(CountTrailingZeros_64(VAL)), BitWidth);
755   unsigned Count = 0;
756   unsigned i = 0;
757   for (; i < getNumWords() && pVal[i] == 0; ++i)
758     Count += APINT_BITS_PER_WORD;
759   if (i < getNumWords())
760     Count += CountTrailingZeros_64(pVal[i]);
761   return std::min(Count, BitWidth);
762 }
763
764 unsigned APInt::countTrailingOnesSlowCase() const {
765   unsigned Count = 0;
766   unsigned i = 0;
767   for (; i < getNumWords() && pVal[i] == -1ULL; ++i)
768     Count += APINT_BITS_PER_WORD;
769   if (i < getNumWords())
770     Count += CountTrailingOnes_64(pVal[i]);
771   return std::min(Count, BitWidth);
772 }
773
774 unsigned APInt::countPopulationSlowCase() const {
775   unsigned Count = 0;
776   for (unsigned i = 0; i < getNumWords(); ++i)
777     Count += CountPopulation_64(pVal[i]);
778   return Count;
779 }
780
781 /// Perform a logical right-shift from Src to Dst, which must be equal or
782 /// non-overlapping, of Words words, by Shift, which must be less than 64.
783 static void lshrNear(uint64_t *Dst, uint64_t *Src, unsigned Words,
784                      unsigned Shift) {
785   uint64_t Carry = 0;
786   for (int I = Words - 1; I >= 0; --I) {
787     uint64_t Tmp = Src[I];
788     Dst[I] = (Tmp >> Shift) | Carry;
789     Carry = Tmp << (64 - Shift);
790   }
791 }
792
793 APInt APInt::byteSwap() const {
794   assert(BitWidth >= 16 && BitWidth % 16 == 0 && "Cannot byteswap!");
795   if (BitWidth == 16)
796     return APInt(BitWidth, ByteSwap_16(uint16_t(VAL)));
797   if (BitWidth == 32)
798     return APInt(BitWidth, ByteSwap_32(unsigned(VAL)));
799   if (BitWidth == 48) {
800     unsigned Tmp1 = unsigned(VAL >> 16);
801     Tmp1 = ByteSwap_32(Tmp1);
802     uint16_t Tmp2 = uint16_t(VAL);
803     Tmp2 = ByteSwap_16(Tmp2);
804     return APInt(BitWidth, (uint64_t(Tmp2) << 32) | Tmp1);
805   }
806   if (BitWidth == 64)
807     return APInt(BitWidth, ByteSwap_64(VAL));
808
809   APInt Result(getNumWords() * APINT_BITS_PER_WORD, 0);
810   for (unsigned I = 0, N = getNumWords(); I != N; ++I)
811     Result.pVal[I] = ByteSwap_64(pVal[N - I - 1]);
812   if (Result.BitWidth != BitWidth) {
813     lshrNear(Result.pVal, Result.pVal, getNumWords(),
814              Result.BitWidth - BitWidth);
815     Result.BitWidth = BitWidth;
816   }
817   return Result;
818 }
819
820 APInt llvm::APIntOps::GreatestCommonDivisor(const APInt& API1,
821                                             const APInt& API2) {
822   APInt A = API1, B = API2;
823   while (!!B) {
824     APInt T = B;
825     B = APIntOps::urem(A, B);
826     A = T;
827   }
828   return A;
829 }
830
831 APInt llvm::APIntOps::RoundDoubleToAPInt(double Double, unsigned width) {
832   union {
833     double D;
834     uint64_t I;
835   } T;
836   T.D = Double;
837
838   // Get the sign bit from the highest order bit
839   bool isNeg = T.I >> 63;
840
841   // Get the 11-bit exponent and adjust for the 1023 bit bias
842   int64_t exp = ((T.I >> 52) & 0x7ff) - 1023;
843
844   // If the exponent is negative, the value is < 0 so just return 0.
845   if (exp < 0)
846     return APInt(width, 0u);
847
848   // Extract the mantissa by clearing the top 12 bits (sign + exponent).
849   uint64_t mantissa = (T.I & (~0ULL >> 12)) | 1ULL << 52;
850
851   // If the exponent doesn't shift all bits out of the mantissa
852   if (exp < 52)
853     return isNeg ? -APInt(width, mantissa >> (52 - exp)) :
854                     APInt(width, mantissa >> (52 - exp));
855
856   // If the client didn't provide enough bits for us to shift the mantissa into
857   // then the result is undefined, just return 0
858   if (width <= exp - 52)
859     return APInt(width, 0);
860
861   // Otherwise, we have to shift the mantissa bits up to the right location
862   APInt Tmp(width, mantissa);
863   Tmp = Tmp.shl((unsigned)exp - 52);
864   return isNeg ? -Tmp : Tmp;
865 }
866
867 /// RoundToDouble - This function converts this APInt to a double.
868 /// The layout for double is as following (IEEE Standard 754):
869 ///  --------------------------------------
870 /// |  Sign    Exponent    Fraction    Bias |
871 /// |-------------------------------------- |
872 /// |  1[63]   11[62-52]   52[51-00]   1023 |
873 ///  --------------------------------------
874 double APInt::roundToDouble(bool isSigned) const {
875
876   // Handle the simple case where the value is contained in one uint64_t.
877   // It is wrong to optimize getWord(0) to VAL; there might be more than one word.
878   if (isSingleWord() || getActiveBits() <= APINT_BITS_PER_WORD) {
879     if (isSigned) {
880       int64_t sext = (int64_t(getWord(0)) << (64-BitWidth)) >> (64-BitWidth);
881       return double(sext);
882     } else
883       return double(getWord(0));
884   }
885
886   // Determine if the value is negative.
887   bool isNeg = isSigned ? (*this)[BitWidth-1] : false;
888
889   // Construct the absolute value if we're negative.
890   APInt Tmp(isNeg ? -(*this) : (*this));
891
892   // Figure out how many bits we're using.
893   unsigned n = Tmp.getActiveBits();
894
895   // The exponent (without bias normalization) is just the number of bits
896   // we are using. Note that the sign bit is gone since we constructed the
897   // absolute value.
898   uint64_t exp = n;
899
900   // Return infinity for exponent overflow
901   if (exp > 1023) {
902     if (!isSigned || !isNeg)
903       return std::numeric_limits<double>::infinity();
904     else
905       return -std::numeric_limits<double>::infinity();
906   }
907   exp += 1023; // Increment for 1023 bias
908
909   // Number of bits in mantissa is 52. To obtain the mantissa value, we must
910   // extract the high 52 bits from the correct words in pVal.
911   uint64_t mantissa;
912   unsigned hiWord = whichWord(n-1);
913   if (hiWord == 0) {
914     mantissa = Tmp.pVal[0];
915     if (n > 52)
916       mantissa >>= n - 52; // shift down, we want the top 52 bits.
917   } else {
918     assert(hiWord > 0 && "huh?");
919     uint64_t hibits = Tmp.pVal[hiWord] << (52 - n % APINT_BITS_PER_WORD);
920     uint64_t lobits = Tmp.pVal[hiWord-1] >> (11 + n % APINT_BITS_PER_WORD);
921     mantissa = hibits | lobits;
922   }
923
924   // The leading bit of mantissa is implicit, so get rid of it.
925   uint64_t sign = isNeg ? (1ULL << (APINT_BITS_PER_WORD - 1)) : 0;
926   union {
927     double D;
928     uint64_t I;
929   } T;
930   T.I = sign | (exp << 52) | mantissa;
931   return T.D;
932 }
933
934 // Truncate to new width.
935 APInt APInt::trunc(unsigned width) const {
936   assert(width < BitWidth && "Invalid APInt Truncate request");
937   assert(width && "Can't truncate to 0 bits");
938
939   if (width <= APINT_BITS_PER_WORD)
940     return APInt(width, getRawData()[0]);
941
942   APInt Result(getMemory(getNumWords(width)), width);
943
944   // Copy full words.
945   unsigned i;
946   for (i = 0; i != width / APINT_BITS_PER_WORD; i++)
947     Result.pVal[i] = pVal[i];
948
949   // Truncate and copy any partial word.
950   unsigned bits = (0 - width) % APINT_BITS_PER_WORD;
951   if (bits != 0)
952     Result.pVal[i] = pVal[i] << bits >> bits;
953
954   return Result;
955 }
956
957 // Sign extend to a new width.
958 APInt APInt::sext(unsigned width) const {
959   assert(width > BitWidth && "Invalid APInt SignExtend request");
960
961   if (width <= APINT_BITS_PER_WORD) {
962     uint64_t val = VAL << (APINT_BITS_PER_WORD - BitWidth);
963     val = (int64_t)val >> (width - BitWidth);
964     return APInt(width, val >> (APINT_BITS_PER_WORD - width));
965   }
966
967   APInt Result(getMemory(getNumWords(width)), width);
968
969   // Copy full words.
970   unsigned i;
971   uint64_t word = 0;
972   for (i = 0; i != BitWidth / APINT_BITS_PER_WORD; i++) {
973     word = getRawData()[i];
974     Result.pVal[i] = word;
975   }
976
977   // Read and sign-extend any partial word.
978   unsigned bits = (0 - BitWidth) % APINT_BITS_PER_WORD;
979   if (bits != 0)
980     word = (int64_t)getRawData()[i] << bits >> bits;
981   else
982     word = (int64_t)word >> (APINT_BITS_PER_WORD - 1);
983
984   // Write remaining full words.
985   for (; i != width / APINT_BITS_PER_WORD; i++) {
986     Result.pVal[i] = word;
987     word = (int64_t)word >> (APINT_BITS_PER_WORD - 1);
988   }
989
990   // Write any partial word.
991   bits = (0 - width) % APINT_BITS_PER_WORD;
992   if (bits != 0)
993     Result.pVal[i] = word << bits >> bits;
994
995   return Result;
996 }
997
998 //  Zero extend to a new width.
999 APInt APInt::zext(unsigned width) const {
1000   assert(width > BitWidth && "Invalid APInt ZeroExtend request");
1001
1002   if (width <= APINT_BITS_PER_WORD)
1003     return APInt(width, VAL);
1004
1005   APInt Result(getMemory(getNumWords(width)), width);
1006
1007   // Copy words.
1008   unsigned i;
1009   for (i = 0; i != getNumWords(); i++)
1010     Result.pVal[i] = getRawData()[i];
1011
1012   // Zero remaining words.
1013   memset(&Result.pVal[i], 0, (Result.getNumWords() - i) * APINT_WORD_SIZE);
1014
1015   return Result;
1016 }
1017
1018 APInt APInt::zextOrTrunc(unsigned width) const {
1019   if (BitWidth < width)
1020     return zext(width);
1021   if (BitWidth > width)
1022     return trunc(width);
1023   return *this;
1024 }
1025
1026 APInt APInt::sextOrTrunc(unsigned width) const {
1027   if (BitWidth < width)
1028     return sext(width);
1029   if (BitWidth > width)
1030     return trunc(width);
1031   return *this;
1032 }
1033
1034 APInt APInt::zextOrSelf(unsigned width) const {
1035   if (BitWidth < width)
1036     return zext(width);
1037   return *this;
1038 }
1039
1040 APInt APInt::sextOrSelf(unsigned width) const {
1041   if (BitWidth < width)
1042     return sext(width);
1043   return *this;
1044 }
1045
1046 /// Arithmetic right-shift this APInt by shiftAmt.
1047 /// @brief Arithmetic right-shift function.
1048 APInt APInt::ashr(const APInt &shiftAmt) const {
1049   return ashr((unsigned)shiftAmt.getLimitedValue(BitWidth));
1050 }
1051
1052 /// Arithmetic right-shift this APInt by shiftAmt.
1053 /// @brief Arithmetic right-shift function.
1054 APInt APInt::ashr(unsigned shiftAmt) const {
1055   assert(shiftAmt <= BitWidth && "Invalid shift amount");
1056   // Handle a degenerate case
1057   if (shiftAmt == 0)
1058     return *this;
1059
1060   // Handle single word shifts with built-in ashr
1061   if (isSingleWord()) {
1062     if (shiftAmt == BitWidth)
1063       return APInt(BitWidth, 0); // undefined
1064     else {
1065       unsigned SignBit = APINT_BITS_PER_WORD - BitWidth;
1066       return APInt(BitWidth,
1067         (((int64_t(VAL) << SignBit) >> SignBit) >> shiftAmt));
1068     }
1069   }
1070
1071   // If all the bits were shifted out, the result is, technically, undefined.
1072   // We return -1 if it was negative, 0 otherwise. We check this early to avoid
1073   // issues in the algorithm below.
1074   if (shiftAmt == BitWidth) {
1075     if (isNegative())
1076       return APInt(BitWidth, -1ULL, true);
1077     else
1078       return APInt(BitWidth, 0);
1079   }
1080
1081   // Create some space for the result.
1082   uint64_t * val = new uint64_t[getNumWords()];
1083
1084   // Compute some values needed by the following shift algorithms
1085   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD; // bits to shift per word
1086   unsigned offset = shiftAmt / APINT_BITS_PER_WORD; // word offset for shift
1087   unsigned breakWord = getNumWords() - 1 - offset; // last word affected
1088   unsigned bitsInWord = whichBit(BitWidth); // how many bits in last word?
1089   if (bitsInWord == 0)
1090     bitsInWord = APINT_BITS_PER_WORD;
1091
1092   // If we are shifting whole words, just move whole words
1093   if (wordShift == 0) {
1094     // Move the words containing significant bits
1095     for (unsigned i = 0; i <= breakWord; ++i)
1096       val[i] = pVal[i+offset]; // move whole word
1097
1098     // Adjust the top significant word for sign bit fill, if negative
1099     if (isNegative())
1100       if (bitsInWord < APINT_BITS_PER_WORD)
1101         val[breakWord] |= ~0ULL << bitsInWord; // set high bits
1102   } else {
1103     // Shift the low order words
1104     for (unsigned i = 0; i < breakWord; ++i) {
1105       // This combines the shifted corresponding word with the low bits from
1106       // the next word (shifted into this word's high bits).
1107       val[i] = (pVal[i+offset] >> wordShift) |
1108                (pVal[i+offset+1] << (APINT_BITS_PER_WORD - wordShift));
1109     }
1110
1111     // Shift the break word. In this case there are no bits from the next word
1112     // to include in this word.
1113     val[breakWord] = pVal[breakWord+offset] >> wordShift;
1114
1115     // Deal with sign extenstion in the break word, and possibly the word before
1116     // it.
1117     if (isNegative()) {
1118       if (wordShift > bitsInWord) {
1119         if (breakWord > 0)
1120           val[breakWord-1] |=
1121             ~0ULL << (APINT_BITS_PER_WORD - (wordShift - bitsInWord));
1122         val[breakWord] |= ~0ULL;
1123       } else
1124         val[breakWord] |= (~0ULL << (bitsInWord - wordShift));
1125     }
1126   }
1127
1128   // Remaining words are 0 or -1, just assign them.
1129   uint64_t fillValue = (isNegative() ? -1ULL : 0);
1130   for (unsigned i = breakWord+1; i < getNumWords(); ++i)
1131     val[i] = fillValue;
1132   return APInt(val, BitWidth).clearUnusedBits();
1133 }
1134
1135 /// Logical right-shift this APInt by shiftAmt.
1136 /// @brief Logical right-shift function.
1137 APInt APInt::lshr(const APInt &shiftAmt) const {
1138   return lshr((unsigned)shiftAmt.getLimitedValue(BitWidth));
1139 }
1140
1141 /// Logical right-shift this APInt by shiftAmt.
1142 /// @brief Logical right-shift function.
1143 APInt APInt::lshr(unsigned shiftAmt) const {
1144   if (isSingleWord()) {
1145     if (shiftAmt >= BitWidth)
1146       return APInt(BitWidth, 0);
1147     else
1148       return APInt(BitWidth, this->VAL >> shiftAmt);
1149   }
1150
1151   // If all the bits were shifted out, the result is 0. This avoids issues
1152   // with shifting by the size of the integer type, which produces undefined
1153   // results. We define these "undefined results" to always be 0.
1154   if (shiftAmt == BitWidth)
1155     return APInt(BitWidth, 0);
1156
1157   // If none of the bits are shifted out, the result is *this. This avoids
1158   // issues with shifting by the size of the integer type, which produces
1159   // undefined results in the code below. This is also an optimization.
1160   if (shiftAmt == 0)
1161     return *this;
1162
1163   // Create some space for the result.
1164   uint64_t * val = new uint64_t[getNumWords()];
1165
1166   // If we are shifting less than a word, compute the shift with a simple carry
1167   if (shiftAmt < APINT_BITS_PER_WORD) {
1168     lshrNear(val, pVal, getNumWords(), shiftAmt);
1169     return APInt(val, BitWidth).clearUnusedBits();
1170   }
1171
1172   // Compute some values needed by the remaining shift algorithms
1173   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD;
1174   unsigned offset = shiftAmt / APINT_BITS_PER_WORD;
1175
1176   // If we are shifting whole words, just move whole words
1177   if (wordShift == 0) {
1178     for (unsigned i = 0; i < getNumWords() - offset; ++i)
1179       val[i] = pVal[i+offset];
1180     for (unsigned i = getNumWords()-offset; i < getNumWords(); i++)
1181       val[i] = 0;
1182     return APInt(val,BitWidth).clearUnusedBits();
1183   }
1184
1185   // Shift the low order words
1186   unsigned breakWord = getNumWords() - offset -1;
1187   for (unsigned i = 0; i < breakWord; ++i)
1188     val[i] = (pVal[i+offset] >> wordShift) |
1189              (pVal[i+offset+1] << (APINT_BITS_PER_WORD - wordShift));
1190   // Shift the break word.
1191   val[breakWord] = pVal[breakWord+offset] >> wordShift;
1192
1193   // Remaining words are 0
1194   for (unsigned i = breakWord+1; i < getNumWords(); ++i)
1195     val[i] = 0;
1196   return APInt(val, BitWidth).clearUnusedBits();
1197 }
1198
1199 /// Left-shift this APInt by shiftAmt.
1200 /// @brief Left-shift function.
1201 APInt APInt::shl(const APInt &shiftAmt) const {
1202   // It's undefined behavior in C to shift by BitWidth or greater.
1203   return shl((unsigned)shiftAmt.getLimitedValue(BitWidth));
1204 }
1205
1206 APInt APInt::shlSlowCase(unsigned shiftAmt) const {
1207   // If all the bits were shifted out, the result is 0. This avoids issues
1208   // with shifting by the size of the integer type, which produces undefined
1209   // results. We define these "undefined results" to always be 0.
1210   if (shiftAmt == BitWidth)
1211     return APInt(BitWidth, 0);
1212
1213   // If none of the bits are shifted out, the result is *this. This avoids a
1214   // lshr by the words size in the loop below which can produce incorrect
1215   // results. It also avoids the expensive computation below for a common case.
1216   if (shiftAmt == 0)
1217     return *this;
1218
1219   // Create some space for the result.
1220   uint64_t * val = new uint64_t[getNumWords()];
1221
1222   // If we are shifting less than a word, do it the easy way
1223   if (shiftAmt < APINT_BITS_PER_WORD) {
1224     uint64_t carry = 0;
1225     for (unsigned i = 0; i < getNumWords(); i++) {
1226       val[i] = pVal[i] << shiftAmt | carry;
1227       carry = pVal[i] >> (APINT_BITS_PER_WORD - shiftAmt);
1228     }
1229     return APInt(val, BitWidth).clearUnusedBits();
1230   }
1231
1232   // Compute some values needed by the remaining shift algorithms
1233   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD;
1234   unsigned offset = shiftAmt / APINT_BITS_PER_WORD;
1235
1236   // If we are shifting whole words, just move whole words
1237   if (wordShift == 0) {
1238     for (unsigned i = 0; i < offset; i++)
1239       val[i] = 0;
1240     for (unsigned i = offset; i < getNumWords(); i++)
1241       val[i] = pVal[i-offset];
1242     return APInt(val,BitWidth).clearUnusedBits();
1243   }
1244
1245   // Copy whole words from this to Result.
1246   unsigned i = getNumWords() - 1;
1247   for (; i > offset; --i)
1248     val[i] = pVal[i-offset] << wordShift |
1249              pVal[i-offset-1] >> (APINT_BITS_PER_WORD - wordShift);
1250   val[offset] = pVal[0] << wordShift;
1251   for (i = 0; i < offset; ++i)
1252     val[i] = 0;
1253   return APInt(val, BitWidth).clearUnusedBits();
1254 }
1255
1256 APInt APInt::rotl(const APInt &rotateAmt) const {
1257   return rotl((unsigned)rotateAmt.getLimitedValue(BitWidth));
1258 }
1259
1260 APInt APInt::rotl(unsigned rotateAmt) const {
1261   rotateAmt %= BitWidth;
1262   if (rotateAmt == 0)
1263     return *this;
1264   return shl(rotateAmt) | lshr(BitWidth - rotateAmt);
1265 }
1266
1267 APInt APInt::rotr(const APInt &rotateAmt) const {
1268   return rotr((unsigned)rotateAmt.getLimitedValue(BitWidth));
1269 }
1270
1271 APInt APInt::rotr(unsigned rotateAmt) const {
1272   rotateAmt %= BitWidth;
1273   if (rotateAmt == 0)
1274     return *this;
1275   return lshr(rotateAmt) | shl(BitWidth - rotateAmt);
1276 }
1277
1278 // Square Root - this method computes and returns the square root of "this".
1279 // Three mechanisms are used for computation. For small values (<= 5 bits),
1280 // a table lookup is done. This gets some performance for common cases. For
1281 // values using less than 52 bits, the value is converted to double and then
1282 // the libc sqrt function is called. The result is rounded and then converted
1283 // back to a uint64_t which is then used to construct the result. Finally,
1284 // the Babylonian method for computing square roots is used.
1285 APInt APInt::sqrt() const {
1286
1287   // Determine the magnitude of the value.
1288   unsigned magnitude = getActiveBits();
1289
1290   // Use a fast table for some small values. This also gets rid of some
1291   // rounding errors in libc sqrt for small values.
1292   if (magnitude <= 5) {
1293     static const uint8_t results[32] = {
1294       /*     0 */ 0,
1295       /*  1- 2 */ 1, 1,
1296       /*  3- 6 */ 2, 2, 2, 2,
1297       /*  7-12 */ 3, 3, 3, 3, 3, 3,
1298       /* 13-20 */ 4, 4, 4, 4, 4, 4, 4, 4,
1299       /* 21-30 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1300       /*    31 */ 6
1301     };
1302     return APInt(BitWidth, results[ (isSingleWord() ? VAL : pVal[0]) ]);
1303   }
1304
1305   // If the magnitude of the value fits in less than 52 bits (the precision of
1306   // an IEEE double precision floating point value), then we can use the
1307   // libc sqrt function which will probably use a hardware sqrt computation.
1308   // This should be faster than the algorithm below.
1309   if (magnitude < 52) {
1310 #if HAVE_ROUND
1311     return APInt(BitWidth,
1312                  uint64_t(::round(::sqrt(double(isSingleWord()?VAL:pVal[0])))));
1313 #else
1314     return APInt(BitWidth,
1315                  uint64_t(::sqrt(double(isSingleWord()?VAL:pVal[0])) + 0.5));
1316 #endif
1317   }
1318
1319   // Okay, all the short cuts are exhausted. We must compute it. The following
1320   // is a classical Babylonian method for computing the square root. This code
1321   // was adapted to APINt from a wikipedia article on such computations.
1322   // See http://www.wikipedia.org/ and go to the page named
1323   // Calculate_an_integer_square_root.
1324   unsigned nbits = BitWidth, i = 4;
1325   APInt testy(BitWidth, 16);
1326   APInt x_old(BitWidth, 1);
1327   APInt x_new(BitWidth, 0);
1328   APInt two(BitWidth, 2);
1329
1330   // Select a good starting value using binary logarithms.
1331   for (;; i += 2, testy = testy.shl(2))
1332     if (i >= nbits || this->ule(testy)) {
1333       x_old = x_old.shl(i / 2);
1334       break;
1335     }
1336
1337   // Use the Babylonian method to arrive at the integer square root:
1338   for (;;) {
1339     x_new = (this->udiv(x_old) + x_old).udiv(two);
1340     if (x_old.ule(x_new))
1341       break;
1342     x_old = x_new;
1343   }
1344
1345   // Make sure we return the closest approximation
1346   // NOTE: The rounding calculation below is correct. It will produce an
1347   // off-by-one discrepancy with results from pari/gp. That discrepancy has been
1348   // determined to be a rounding issue with pari/gp as it begins to use a
1349   // floating point representation after 192 bits. There are no discrepancies
1350   // between this algorithm and pari/gp for bit widths < 192 bits.
1351   APInt square(x_old * x_old);
1352   APInt nextSquare((x_old + 1) * (x_old +1));
1353   if (this->ult(square))
1354     return x_old;
1355   assert(this->ule(nextSquare) && "Error in APInt::sqrt computation");
1356   APInt midpoint((nextSquare - square).udiv(two));
1357   APInt offset(*this - square);
1358   if (offset.ult(midpoint))
1359     return x_old;
1360   return x_old + 1;
1361 }
1362
1363 /// Computes the multiplicative inverse of this APInt for a given modulo. The
1364 /// iterative extended Euclidean algorithm is used to solve for this value,
1365 /// however we simplify it to speed up calculating only the inverse, and take
1366 /// advantage of div+rem calculations. We also use some tricks to avoid copying
1367 /// (potentially large) APInts around.
1368 APInt APInt::multiplicativeInverse(const APInt& modulo) const {
1369   assert(ult(modulo) && "This APInt must be smaller than the modulo");
1370
1371   // Using the properties listed at the following web page (accessed 06/21/08):
1372   //   http://www.numbertheory.org/php/euclid.html
1373   // (especially the properties numbered 3, 4 and 9) it can be proved that
1374   // BitWidth bits suffice for all the computations in the algorithm implemented
1375   // below. More precisely, this number of bits suffice if the multiplicative
1376   // inverse exists, but may not suffice for the general extended Euclidean
1377   // algorithm.
1378
1379   APInt r[2] = { modulo, *this };
1380   APInt t[2] = { APInt(BitWidth, 0), APInt(BitWidth, 1) };
1381   APInt q(BitWidth, 0);
1382
1383   unsigned i;
1384   for (i = 0; r[i^1] != 0; i ^= 1) {
1385     // An overview of the math without the confusing bit-flipping:
1386     // q = r[i-2] / r[i-1]
1387     // r[i] = r[i-2] % r[i-1]
1388     // t[i] = t[i-2] - t[i-1] * q
1389     udivrem(r[i], r[i^1], q, r[i]);
1390     t[i] -= t[i^1] * q;
1391   }
1392
1393   // If this APInt and the modulo are not coprime, there is no multiplicative
1394   // inverse, so return 0. We check this by looking at the next-to-last
1395   // remainder, which is the gcd(*this,modulo) as calculated by the Euclidean
1396   // algorithm.
1397   if (r[i] != 1)
1398     return APInt(BitWidth, 0);
1399
1400   // The next-to-last t is the multiplicative inverse.  However, we are
1401   // interested in a positive inverse. Calcuate a positive one from a negative
1402   // one if necessary. A simple addition of the modulo suffices because
1403   // abs(t[i]) is known to be less than *this/2 (see the link above).
1404   return t[i].isNegative() ? t[i] + modulo : t[i];
1405 }
1406
1407 /// Calculate the magic numbers required to implement a signed integer division
1408 /// by a constant as a sequence of multiplies, adds and shifts.  Requires that
1409 /// the divisor not be 0, 1, or -1.  Taken from "Hacker's Delight", Henry S.
1410 /// Warren, Jr., chapter 10.
1411 APInt::ms APInt::magic() const {
1412   const APInt& d = *this;
1413   unsigned p;
1414   APInt ad, anc, delta, q1, r1, q2, r2, t;
1415   APInt signedMin = APInt::getSignedMinValue(d.getBitWidth());
1416   struct ms mag;
1417
1418   ad = d.abs();
1419   t = signedMin + (d.lshr(d.getBitWidth() - 1));
1420   anc = t - 1 - t.urem(ad);   // absolute value of nc
1421   p = d.getBitWidth() - 1;    // initialize p
1422   q1 = signedMin.udiv(anc);   // initialize q1 = 2p/abs(nc)
1423   r1 = signedMin - q1*anc;    // initialize r1 = rem(2p,abs(nc))
1424   q2 = signedMin.udiv(ad);    // initialize q2 = 2p/abs(d)
1425   r2 = signedMin - q2*ad;     // initialize r2 = rem(2p,abs(d))
1426   do {
1427     p = p + 1;
1428     q1 = q1<<1;          // update q1 = 2p/abs(nc)
1429     r1 = r1<<1;          // update r1 = rem(2p/abs(nc))
1430     if (r1.uge(anc)) {  // must be unsigned comparison
1431       q1 = q1 + 1;
1432       r1 = r1 - anc;
1433     }
1434     q2 = q2<<1;          // update q2 = 2p/abs(d)
1435     r2 = r2<<1;          // update r2 = rem(2p/abs(d))
1436     if (r2.uge(ad)) {   // must be unsigned comparison
1437       q2 = q2 + 1;
1438       r2 = r2 - ad;
1439     }
1440     delta = ad - r2;
1441   } while (q1.ult(delta) || (q1 == delta && r1 == 0));
1442
1443   mag.m = q2 + 1;
1444   if (d.isNegative()) mag.m = -mag.m;   // resulting magic number
1445   mag.s = p - d.getBitWidth();          // resulting shift
1446   return mag;
1447 }
1448
1449 /// Calculate the magic numbers required to implement an unsigned integer
1450 /// division by a constant as a sequence of multiplies, adds and shifts.
1451 /// Requires that the divisor not be 0.  Taken from "Hacker's Delight", Henry
1452 /// S. Warren, Jr., chapter 10.
1453 /// LeadingZeros can be used to simplify the calculation if the upper bits
1454 /// of the divided value are known zero.
1455 APInt::mu APInt::magicu(unsigned LeadingZeros) const {
1456   const APInt& d = *this;
1457   unsigned p;
1458   APInt nc, delta, q1, r1, q2, r2;
1459   struct mu magu;
1460   magu.a = 0;               // initialize "add" indicator
1461   APInt allOnes = APInt::getAllOnesValue(d.getBitWidth()).lshr(LeadingZeros);
1462   APInt signedMin = APInt::getSignedMinValue(d.getBitWidth());
1463   APInt signedMax = APInt::getSignedMaxValue(d.getBitWidth());
1464
1465   nc = allOnes - (-d).urem(d);
1466   p = d.getBitWidth() - 1;  // initialize p
1467   q1 = signedMin.udiv(nc);  // initialize q1 = 2p/nc
1468   r1 = signedMin - q1*nc;   // initialize r1 = rem(2p,nc)
1469   q2 = signedMax.udiv(d);   // initialize q2 = (2p-1)/d
1470   r2 = signedMax - q2*d;    // initialize r2 = rem((2p-1),d)
1471   do {
1472     p = p + 1;
1473     if (r1.uge(nc - r1)) {
1474       q1 = q1 + q1 + 1;  // update q1
1475       r1 = r1 + r1 - nc; // update r1
1476     }
1477     else {
1478       q1 = q1+q1; // update q1
1479       r1 = r1+r1; // update r1
1480     }
1481     if ((r2 + 1).uge(d - r2)) {
1482       if (q2.uge(signedMax)) magu.a = 1;
1483       q2 = q2+q2 + 1;     // update q2
1484       r2 = r2+r2 + 1 - d; // update r2
1485     }
1486     else {
1487       if (q2.uge(signedMin)) magu.a = 1;
1488       q2 = q2+q2;     // update q2
1489       r2 = r2+r2 + 1; // update r2
1490     }
1491     delta = d - 1 - r2;
1492   } while (p < d.getBitWidth()*2 &&
1493            (q1.ult(delta) || (q1 == delta && r1 == 0)));
1494   magu.m = q2 + 1; // resulting magic number
1495   magu.s = p - d.getBitWidth();  // resulting shift
1496   return magu;
1497 }
1498
1499 /// Implementation of Knuth's Algorithm D (Division of nonnegative integers)
1500 /// from "Art of Computer Programming, Volume 2", section 4.3.1, p. 272. The
1501 /// variables here have the same names as in the algorithm. Comments explain
1502 /// the algorithm and any deviation from it.
1503 static void KnuthDiv(unsigned *u, unsigned *v, unsigned *q, unsigned* r,
1504                      unsigned m, unsigned n) {
1505   assert(u && "Must provide dividend");
1506   assert(v && "Must provide divisor");
1507   assert(q && "Must provide quotient");
1508   assert(u != v && u != q && v != q && "Must us different memory");
1509   assert(n>1 && "n must be > 1");
1510
1511   // Knuth uses the value b as the base of the number system. In our case b
1512   // is 2^31 so we just set it to -1u.
1513   uint64_t b = uint64_t(1) << 32;
1514
1515 #if 0
1516   DEBUG(dbgs() << "KnuthDiv: m=" << m << " n=" << n << '\n');
1517   DEBUG(dbgs() << "KnuthDiv: original:");
1518   DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1519   DEBUG(dbgs() << " by");
1520   DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]);
1521   DEBUG(dbgs() << '\n');
1522 #endif
1523   // D1. [Normalize.] Set d = b / (v[n-1] + 1) and multiply all the digits of
1524   // u and v by d. Note that we have taken Knuth's advice here to use a power
1525   // of 2 value for d such that d * v[n-1] >= b/2 (b is the base). A power of
1526   // 2 allows us to shift instead of multiply and it is easy to determine the
1527   // shift amount from the leading zeros.  We are basically normalizing the u
1528   // and v so that its high bits are shifted to the top of v's range without
1529   // overflow. Note that this can require an extra word in u so that u must
1530   // be of length m+n+1.
1531   unsigned shift = CountLeadingZeros_32(v[n-1]);
1532   unsigned v_carry = 0;
1533   unsigned u_carry = 0;
1534   if (shift) {
1535     for (unsigned i = 0; i < m+n; ++i) {
1536       unsigned u_tmp = u[i] >> (32 - shift);
1537       u[i] = (u[i] << shift) | u_carry;
1538       u_carry = u_tmp;
1539     }
1540     for (unsigned i = 0; i < n; ++i) {
1541       unsigned v_tmp = v[i] >> (32 - shift);
1542       v[i] = (v[i] << shift) | v_carry;
1543       v_carry = v_tmp;
1544     }
1545   }
1546   u[m+n] = u_carry;
1547 #if 0
1548   DEBUG(dbgs() << "KnuthDiv:   normal:");
1549   DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1550   DEBUG(dbgs() << " by");
1551   DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]);
1552   DEBUG(dbgs() << '\n');
1553 #endif
1554
1555   // D2. [Initialize j.]  Set j to m. This is the loop counter over the places.
1556   int j = m;
1557   do {
1558     DEBUG(dbgs() << "KnuthDiv: quotient digit #" << j << '\n');
1559     // D3. [Calculate q'.].
1560     //     Set qp = (u[j+n]*b + u[j+n-1]) / v[n-1]. (qp=qprime=q')
1561     //     Set rp = (u[j+n]*b + u[j+n-1]) % v[n-1]. (rp=rprime=r')
1562     // Now test if qp == b or qp*v[n-2] > b*rp + u[j+n-2]; if so, decrease
1563     // qp by 1, inrease rp by v[n-1], and repeat this test if rp < b. The test
1564     // on v[n-2] determines at high speed most of the cases in which the trial
1565     // value qp is one too large, and it eliminates all cases where qp is two
1566     // too large.
1567     uint64_t dividend = ((uint64_t(u[j+n]) << 32) + u[j+n-1]);
1568     DEBUG(dbgs() << "KnuthDiv: dividend == " << dividend << '\n');
1569     uint64_t qp = dividend / v[n-1];
1570     uint64_t rp = dividend % v[n-1];
1571     if (qp == b || qp*v[n-2] > b*rp + u[j+n-2]) {
1572       qp--;
1573       rp += v[n-1];
1574       if (rp < b && (qp == b || qp*v[n-2] > b*rp + u[j+n-2]))
1575         qp--;
1576     }
1577     DEBUG(dbgs() << "KnuthDiv: qp == " << qp << ", rp == " << rp << '\n');
1578
1579     // D4. [Multiply and subtract.] Replace (u[j+n]u[j+n-1]...u[j]) with
1580     // (u[j+n]u[j+n-1]..u[j]) - qp * (v[n-1]...v[1]v[0]). This computation
1581     // consists of a simple multiplication by a one-place number, combined with
1582     // a subtraction.
1583     bool isNeg = false;
1584     for (unsigned i = 0; i < n; ++i) {
1585       uint64_t u_tmp = uint64_t(u[j+i]) | (uint64_t(u[j+i+1]) << 32);
1586       uint64_t subtrahend = uint64_t(qp) * uint64_t(v[i]);
1587       bool borrow = subtrahend > u_tmp;
1588       DEBUG(dbgs() << "KnuthDiv: u_tmp == " << u_tmp
1589                    << ", subtrahend == " << subtrahend
1590                    << ", borrow = " << borrow << '\n');
1591
1592       uint64_t result = u_tmp - subtrahend;
1593       unsigned k = j + i;
1594       u[k++] = (unsigned)(result & (b-1)); // subtract low word
1595       u[k++] = (unsigned)(result >> 32);   // subtract high word
1596       while (borrow && k <= m+n) { // deal with borrow to the left
1597         borrow = u[k] == 0;
1598         u[k]--;
1599         k++;
1600       }
1601       isNeg |= borrow;
1602       DEBUG(dbgs() << "KnuthDiv: u[j+i] == " << u[j+i] << ",  u[j+i+1] == " <<
1603                     u[j+i+1] << '\n');
1604     }
1605     DEBUG(dbgs() << "KnuthDiv: after subtraction:");
1606     DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1607     DEBUG(dbgs() << '\n');
1608     // The digits (u[j+n]...u[j]) should be kept positive; if the result of
1609     // this step is actually negative, (u[j+n]...u[j]) should be left as the
1610     // true value plus b**(n+1), namely as the b's complement of
1611     // the true value, and a "borrow" to the left should be remembered.
1612     //
1613     if (isNeg) {
1614       bool carry = true;  // true because b's complement is "complement + 1"
1615       for (unsigned i = 0; i <= m+n; ++i) {
1616         u[i] = ~u[i] + carry; // b's complement
1617         carry = carry && u[i] == 0;
1618       }
1619     }
1620     DEBUG(dbgs() << "KnuthDiv: after complement:");
1621     DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1622     DEBUG(dbgs() << '\n');
1623
1624     // D5. [Test remainder.] Set q[j] = qp. If the result of step D4 was
1625     // negative, go to step D6; otherwise go on to step D7.
1626     q[j] = (unsigned)qp;
1627     if (isNeg) {
1628       // D6. [Add back]. The probability that this step is necessary is very
1629       // small, on the order of only 2/b. Make sure that test data accounts for
1630       // this possibility. Decrease q[j] by 1
1631       q[j]--;
1632       // and add (0v[n-1]...v[1]v[0]) to (u[j+n]u[j+n-1]...u[j+1]u[j]).
1633       // A carry will occur to the left of u[j+n], and it should be ignored
1634       // since it cancels with the borrow that occurred in D4.
1635       bool carry = false;
1636       for (unsigned i = 0; i < n; i++) {
1637         unsigned limit = std::min(u[j+i],v[i]);
1638         u[j+i] += v[i] + carry;
1639         carry = u[j+i] < limit || (carry && u[j+i] == limit);
1640       }
1641       u[j+n] += carry;
1642     }
1643     DEBUG(dbgs() << "KnuthDiv: after correction:");
1644     DEBUG(for (int i = m+n; i >=0; i--) dbgs() <<" " << u[i]);
1645     DEBUG(dbgs() << "\nKnuthDiv: digit result = " << q[j] << '\n');
1646
1647   // D7. [Loop on j.]  Decrease j by one. Now if j >= 0, go back to D3.
1648   } while (--j >= 0);
1649
1650   DEBUG(dbgs() << "KnuthDiv: quotient:");
1651   DEBUG(for (int i = m; i >=0; i--) dbgs() <<" " << q[i]);
1652   DEBUG(dbgs() << '\n');
1653
1654   // D8. [Unnormalize]. Now q[...] is the desired quotient, and the desired
1655   // remainder may be obtained by dividing u[...] by d. If r is non-null we
1656   // compute the remainder (urem uses this).
1657   if (r) {
1658     // The value d is expressed by the "shift" value above since we avoided
1659     // multiplication by d by using a shift left. So, all we have to do is
1660     // shift right here. In order to mak
1661     if (shift) {
1662       unsigned carry = 0;
1663       DEBUG(dbgs() << "KnuthDiv: remainder:");
1664       for (int i = n-1; i >= 0; i--) {
1665         r[i] = (u[i] >> shift) | carry;
1666         carry = u[i] << (32 - shift);
1667         DEBUG(dbgs() << " " << r[i]);
1668       }
1669     } else {
1670       for (int i = n-1; i >= 0; i--) {
1671         r[i] = u[i];
1672         DEBUG(dbgs() << " " << r[i]);
1673       }
1674     }
1675     DEBUG(dbgs() << '\n');
1676   }
1677 #if 0
1678   DEBUG(dbgs() << '\n');
1679 #endif
1680 }
1681
1682 void APInt::divide(const APInt LHS, unsigned lhsWords,
1683                    const APInt &RHS, unsigned rhsWords,
1684                    APInt *Quotient, APInt *Remainder)
1685 {
1686   assert(lhsWords >= rhsWords && "Fractional result");
1687
1688   // First, compose the values into an array of 32-bit words instead of
1689   // 64-bit words. This is a necessity of both the "short division" algorithm
1690   // and the Knuth "classical algorithm" which requires there to be native
1691   // operations for +, -, and * on an m bit value with an m*2 bit result. We
1692   // can't use 64-bit operands here because we don't have native results of
1693   // 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't
1694   // work on large-endian machines.
1695   uint64_t mask = ~0ull >> (sizeof(unsigned)*CHAR_BIT);
1696   unsigned n = rhsWords * 2;
1697   unsigned m = (lhsWords * 2) - n;
1698
1699   // Allocate space for the temporary values we need either on the stack, if
1700   // it will fit, or on the heap if it won't.
1701   unsigned SPACE[128];
1702   unsigned *U = 0;
1703   unsigned *V = 0;
1704   unsigned *Q = 0;
1705   unsigned *R = 0;
1706   if ((Remainder?4:3)*n+2*m+1 <= 128) {
1707     U = &SPACE[0];
1708     V = &SPACE[m+n+1];
1709     Q = &SPACE[(m+n+1) + n];
1710     if (Remainder)
1711       R = &SPACE[(m+n+1) + n + (m+n)];
1712   } else {
1713     U = new unsigned[m + n + 1];
1714     V = new unsigned[n];
1715     Q = new unsigned[m+n];
1716     if (Remainder)
1717       R = new unsigned[n];
1718   }
1719
1720   // Initialize the dividend
1721   memset(U, 0, (m+n+1)*sizeof(unsigned));
1722   for (unsigned i = 0; i < lhsWords; ++i) {
1723     uint64_t tmp = (LHS.getNumWords() == 1 ? LHS.VAL : LHS.pVal[i]);
1724     U[i * 2] = (unsigned)(tmp & mask);
1725     U[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT));
1726   }
1727   U[m+n] = 0; // this extra word is for "spill" in the Knuth algorithm.
1728
1729   // Initialize the divisor
1730   memset(V, 0, (n)*sizeof(unsigned));
1731   for (unsigned i = 0; i < rhsWords; ++i) {
1732     uint64_t tmp = (RHS.getNumWords() == 1 ? RHS.VAL : RHS.pVal[i]);
1733     V[i * 2] = (unsigned)(tmp & mask);
1734     V[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT));
1735   }
1736
1737   // initialize the quotient and remainder
1738   memset(Q, 0, (m+n) * sizeof(unsigned));
1739   if (Remainder)
1740     memset(R, 0, n * sizeof(unsigned));
1741
1742   // Now, adjust m and n for the Knuth division. n is the number of words in
1743   // the divisor. m is the number of words by which the dividend exceeds the
1744   // divisor (i.e. m+n is the length of the dividend). These sizes must not
1745   // contain any zero words or the Knuth algorithm fails.
1746   for (unsigned i = n; i > 0 && V[i-1] == 0; i--) {
1747     n--;
1748     m++;
1749   }
1750   for (unsigned i = m+n; i > 0 && U[i-1] == 0; i--)
1751     m--;
1752
1753   // If we're left with only a single word for the divisor, Knuth doesn't work
1754   // so we implement the short division algorithm here. This is much simpler
1755   // and faster because we are certain that we can divide a 64-bit quantity
1756   // by a 32-bit quantity at hardware speed and short division is simply a
1757   // series of such operations. This is just like doing short division but we
1758   // are using base 2^32 instead of base 10.
1759   assert(n != 0 && "Divide by zero?");
1760   if (n == 1) {
1761     unsigned divisor = V[0];
1762     unsigned remainder = 0;
1763     for (int i = m+n-1; i >= 0; i--) {
1764       uint64_t partial_dividend = uint64_t(remainder) << 32 | U[i];
1765       if (partial_dividend == 0) {
1766         Q[i] = 0;
1767         remainder = 0;
1768       } else if (partial_dividend < divisor) {
1769         Q[i] = 0;
1770         remainder = (unsigned)partial_dividend;
1771       } else if (partial_dividend == divisor) {
1772         Q[i] = 1;
1773         remainder = 0;
1774       } else {
1775         Q[i] = (unsigned)(partial_dividend / divisor);
1776         remainder = (unsigned)(partial_dividend - (Q[i] * divisor));
1777       }
1778     }
1779     if (R)
1780       R[0] = remainder;
1781   } else {
1782     // Now we're ready to invoke the Knuth classical divide algorithm. In this
1783     // case n > 1.
1784     KnuthDiv(U, V, Q, R, m, n);
1785   }
1786
1787   // If the caller wants the quotient
1788   if (Quotient) {
1789     // Set up the Quotient value's memory.
1790     if (Quotient->BitWidth != LHS.BitWidth) {
1791       if (Quotient->isSingleWord())
1792         Quotient->VAL = 0;
1793       else
1794         delete [] Quotient->pVal;
1795       Quotient->BitWidth = LHS.BitWidth;
1796       if (!Quotient->isSingleWord())
1797         Quotient->pVal = getClearedMemory(Quotient->getNumWords());
1798     } else
1799       Quotient->clearAllBits();
1800
1801     // The quotient is in Q. Reconstitute the quotient into Quotient's low
1802     // order words.
1803     if (lhsWords == 1) {
1804       uint64_t tmp =
1805         uint64_t(Q[0]) | (uint64_t(Q[1]) << (APINT_BITS_PER_WORD / 2));
1806       if (Quotient->isSingleWord())
1807         Quotient->VAL = tmp;
1808       else
1809         Quotient->pVal[0] = tmp;
1810     } else {
1811       assert(!Quotient->isSingleWord() && "Quotient APInt not large enough");
1812       for (unsigned i = 0; i < lhsWords; ++i)
1813         Quotient->pVal[i] =
1814           uint64_t(Q[i*2]) | (uint64_t(Q[i*2+1]) << (APINT_BITS_PER_WORD / 2));
1815     }
1816   }
1817
1818   // If the caller wants the remainder
1819   if (Remainder) {
1820     // Set up the Remainder value's memory.
1821     if (Remainder->BitWidth != RHS.BitWidth) {
1822       if (Remainder->isSingleWord())
1823         Remainder->VAL = 0;
1824       else
1825         delete [] Remainder->pVal;
1826       Remainder->BitWidth = RHS.BitWidth;
1827       if (!Remainder->isSingleWord())
1828         Remainder->pVal = getClearedMemory(Remainder->getNumWords());
1829     } else
1830       Remainder->clearAllBits();
1831
1832     // The remainder is in R. Reconstitute the remainder into Remainder's low
1833     // order words.
1834     if (rhsWords == 1) {
1835       uint64_t tmp =
1836         uint64_t(R[0]) | (uint64_t(R[1]) << (APINT_BITS_PER_WORD / 2));
1837       if (Remainder->isSingleWord())
1838         Remainder->VAL = tmp;
1839       else
1840         Remainder->pVal[0] = tmp;
1841     } else {
1842       assert(!Remainder->isSingleWord() && "Remainder APInt not large enough");
1843       for (unsigned i = 0; i < rhsWords; ++i)
1844         Remainder->pVal[i] =
1845           uint64_t(R[i*2]) | (uint64_t(R[i*2+1]) << (APINT_BITS_PER_WORD / 2));
1846     }
1847   }
1848
1849   // Clean up the memory we allocated.
1850   if (U != &SPACE[0]) {
1851     delete [] U;
1852     delete [] V;
1853     delete [] Q;
1854     delete [] R;
1855   }
1856 }
1857
1858 APInt APInt::udiv(const APInt& RHS) const {
1859   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
1860
1861   // First, deal with the easy case
1862   if (isSingleWord()) {
1863     assert(RHS.VAL != 0 && "Divide by zero?");
1864     return APInt(BitWidth, VAL / RHS.VAL);
1865   }
1866
1867   // Get some facts about the LHS and RHS number of bits and words
1868   unsigned rhsBits = RHS.getActiveBits();
1869   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
1870   assert(rhsWords && "Divided by zero???");
1871   unsigned lhsBits = this->getActiveBits();
1872   unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1);
1873
1874   // Deal with some degenerate cases
1875   if (!lhsWords)
1876     // 0 / X ===> 0
1877     return APInt(BitWidth, 0);
1878   else if (lhsWords < rhsWords || this->ult(RHS)) {
1879     // X / Y ===> 0, iff X < Y
1880     return APInt(BitWidth, 0);
1881   } else if (*this == RHS) {
1882     // X / X ===> 1
1883     return APInt(BitWidth, 1);
1884   } else if (lhsWords == 1 && rhsWords == 1) {
1885     // All high words are zero, just use native divide
1886     return APInt(BitWidth, this->pVal[0] / RHS.pVal[0]);
1887   }
1888
1889   // We have to compute it the hard way. Invoke the Knuth divide algorithm.
1890   APInt Quotient(1,0); // to hold result.
1891   divide(*this, lhsWords, RHS, rhsWords, &Quotient, 0);
1892   return Quotient;
1893 }
1894
1895 APInt APInt::urem(const APInt& RHS) const {
1896   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
1897   if (isSingleWord()) {
1898     assert(RHS.VAL != 0 && "Remainder by zero?");
1899     return APInt(BitWidth, VAL % RHS.VAL);
1900   }
1901
1902   // Get some facts about the LHS
1903   unsigned lhsBits = getActiveBits();
1904   unsigned lhsWords = !lhsBits ? 0 : (whichWord(lhsBits - 1) + 1);
1905
1906   // Get some facts about the RHS
1907   unsigned rhsBits = RHS.getActiveBits();
1908   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
1909   assert(rhsWords && "Performing remainder operation by zero ???");
1910
1911   // Check the degenerate cases
1912   if (lhsWords == 0) {
1913     // 0 % Y ===> 0
1914     return APInt(BitWidth, 0);
1915   } else if (lhsWords < rhsWords || this->ult(RHS)) {
1916     // X % Y ===> X, iff X < Y
1917     return *this;
1918   } else if (*this == RHS) {
1919     // X % X == 0;
1920     return APInt(BitWidth, 0);
1921   } else if (lhsWords == 1) {
1922     // All high words are zero, just use native remainder
1923     return APInt(BitWidth, pVal[0] % RHS.pVal[0]);
1924   }
1925
1926   // We have to compute it the hard way. Invoke the Knuth divide algorithm.
1927   APInt Remainder(1,0);
1928   divide(*this, lhsWords, RHS, rhsWords, 0, &Remainder);
1929   return Remainder;
1930 }
1931
1932 void APInt::udivrem(const APInt &LHS, const APInt &RHS,
1933                     APInt &Quotient, APInt &Remainder) {
1934   // Get some size facts about the dividend and divisor
1935   unsigned lhsBits  = LHS.getActiveBits();
1936   unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1);
1937   unsigned rhsBits  = RHS.getActiveBits();
1938   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
1939
1940   // Check the degenerate cases
1941   if (lhsWords == 0) {
1942     Quotient = 0;                // 0 / Y ===> 0
1943     Remainder = 0;               // 0 % Y ===> 0
1944     return;
1945   }
1946
1947   if (lhsWords < rhsWords || LHS.ult(RHS)) {
1948     Remainder = LHS;            // X % Y ===> X, iff X < Y
1949     Quotient = 0;               // X / Y ===> 0, iff X < Y
1950     return;
1951   }
1952
1953   if (LHS == RHS) {
1954     Quotient  = 1;              // X / X ===> 1
1955     Remainder = 0;              // X % X ===> 0;
1956     return;
1957   }
1958
1959   if (lhsWords == 1 && rhsWords == 1) {
1960     // There is only one word to consider so use the native versions.
1961     uint64_t lhsValue = LHS.isSingleWord() ? LHS.VAL : LHS.pVal[0];
1962     uint64_t rhsValue = RHS.isSingleWord() ? RHS.VAL : RHS.pVal[0];
1963     Quotient = APInt(LHS.getBitWidth(), lhsValue / rhsValue);
1964     Remainder = APInt(LHS.getBitWidth(), lhsValue % rhsValue);
1965     return;
1966   }
1967
1968   // Okay, lets do it the long way
1969   divide(LHS, lhsWords, RHS, rhsWords, &Quotient, &Remainder);
1970 }
1971
1972 APInt APInt::sadd_ov(const APInt &RHS, bool &Overflow) const {
1973   APInt Res = *this+RHS;
1974   Overflow = isNonNegative() == RHS.isNonNegative() &&
1975              Res.isNonNegative() != isNonNegative();
1976   return Res;
1977 }
1978
1979 APInt APInt::uadd_ov(const APInt &RHS, bool &Overflow) const {
1980   APInt Res = *this+RHS;
1981   Overflow = Res.ult(RHS);
1982   return Res;
1983 }
1984
1985 APInt APInt::ssub_ov(const APInt &RHS, bool &Overflow) const {
1986   APInt Res = *this - RHS;
1987   Overflow = isNonNegative() != RHS.isNonNegative() &&
1988              Res.isNonNegative() != isNonNegative();
1989   return Res;
1990 }
1991
1992 APInt APInt::usub_ov(const APInt &RHS, bool &Overflow) const {
1993   APInt Res = *this-RHS;
1994   Overflow = Res.ugt(*this);
1995   return Res;
1996 }
1997
1998 APInt APInt::sdiv_ov(const APInt &RHS, bool &Overflow) const {
1999   // MININT/-1  -->  overflow.
2000   Overflow = isMinSignedValue() && RHS.isAllOnesValue();
2001   return sdiv(RHS);
2002 }
2003
2004 APInt APInt::smul_ov(const APInt &RHS, bool &Overflow) const {
2005   APInt Res = *this * RHS;
2006   
2007   if (*this != 0 && RHS != 0)
2008     Overflow = Res.sdiv(RHS) != *this || Res.sdiv(*this) != RHS;
2009   else
2010     Overflow = false;
2011   return Res;
2012 }
2013
2014 APInt APInt::umul_ov(const APInt &RHS, bool &Overflow) const {
2015   APInt Res = *this * RHS;
2016
2017   if (*this != 0 && RHS != 0)
2018     Overflow = Res.udiv(RHS) != *this || Res.udiv(*this) != RHS;
2019   else
2020     Overflow = false;
2021   return Res;
2022 }
2023
2024 APInt APInt::sshl_ov(unsigned ShAmt, bool &Overflow) const {
2025   Overflow = ShAmt >= getBitWidth();
2026   if (Overflow)
2027     ShAmt = getBitWidth()-1;
2028
2029   if (isNonNegative()) // Don't allow sign change.
2030     Overflow = ShAmt >= countLeadingZeros();
2031   else
2032     Overflow = ShAmt >= countLeadingOnes();
2033   
2034   return *this << ShAmt;
2035 }
2036
2037
2038
2039
2040 void APInt::fromString(unsigned numbits, StringRef str, uint8_t radix) {
2041   // Check our assumptions here
2042   assert(!str.empty() && "Invalid string length");
2043   assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 || 
2044           radix == 36) &&
2045          "Radix should be 2, 8, 10, 16, or 36!");
2046
2047   StringRef::iterator p = str.begin();
2048   size_t slen = str.size();
2049   bool isNeg = *p == '-';
2050   if (*p == '-' || *p == '+') {
2051     p++;
2052     slen--;
2053     assert(slen && "String is only a sign, needs a value.");
2054   }
2055   assert((slen <= numbits || radix != 2) && "Insufficient bit width");
2056   assert(((slen-1)*3 <= numbits || radix != 8) && "Insufficient bit width");
2057   assert(((slen-1)*4 <= numbits || radix != 16) && "Insufficient bit width");
2058   assert((((slen-1)*64)/22 <= numbits || radix != 10) &&
2059          "Insufficient bit width");
2060
2061   // Allocate memory
2062   if (!isSingleWord())
2063     pVal = getClearedMemory(getNumWords());
2064
2065   // Figure out if we can shift instead of multiply
2066   unsigned shift = (radix == 16 ? 4 : radix == 8 ? 3 : radix == 2 ? 1 : 0);
2067
2068   // Set up an APInt for the digit to add outside the loop so we don't
2069   // constantly construct/destruct it.
2070   APInt apdigit(getBitWidth(), 0);
2071   APInt apradix(getBitWidth(), radix);
2072
2073   // Enter digit traversal loop
2074   for (StringRef::iterator e = str.end(); p != e; ++p) {
2075     unsigned digit = getDigit(*p, radix);
2076     assert(digit < radix && "Invalid character in digit string");
2077
2078     // Shift or multiply the value by the radix
2079     if (slen > 1) {
2080       if (shift)
2081         *this <<= shift;
2082       else
2083         *this *= apradix;
2084     }
2085
2086     // Add in the digit we just interpreted
2087     if (apdigit.isSingleWord())
2088       apdigit.VAL = digit;
2089     else
2090       apdigit.pVal[0] = digit;
2091     *this += apdigit;
2092   }
2093   // If its negative, put it in two's complement form
2094   if (isNeg) {
2095     (*this)--;
2096     this->flipAllBits();
2097   }
2098 }
2099
2100 void APInt::toString(SmallVectorImpl<char> &Str, unsigned Radix,
2101                      bool Signed, bool formatAsCLiteral) const {
2102   assert((Radix == 10 || Radix == 8 || Radix == 16 || Radix == 2 || 
2103           Radix == 36) &&
2104          "Radix should be 2, 8, 10, 16, or 36!");
2105
2106   const char *Prefix = "";
2107   if (formatAsCLiteral) {
2108     switch (Radix) {
2109       case 2:
2110         // Binary literals are a non-standard extension added in gcc 4.3:
2111         // http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Binary-constants.html
2112         Prefix = "0b";
2113         break;
2114       case 8:
2115         Prefix = "0";
2116         break;
2117       case 10:
2118         break; // No prefix
2119       case 16:
2120         Prefix = "0x";
2121         break;
2122       default:
2123         llvm_unreachable("Invalid radix!");
2124     }
2125   }
2126
2127   // First, check for a zero value and just short circuit the logic below.
2128   if (*this == 0) {
2129     while (*Prefix) {
2130       Str.push_back(*Prefix);
2131       ++Prefix;
2132     };
2133     Str.push_back('0');
2134     return;
2135   }
2136
2137   static const char Digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
2138
2139   if (isSingleWord()) {
2140     char Buffer[65];
2141     char *BufPtr = Buffer+65;
2142
2143     uint64_t N;
2144     if (!Signed) {
2145       N = getZExtValue();
2146     } else {
2147       int64_t I = getSExtValue();
2148       if (I >= 0) {
2149         N = I;
2150       } else {
2151         Str.push_back('-');
2152         N = -(uint64_t)I;
2153       }
2154     }
2155
2156     while (*Prefix) {
2157       Str.push_back(*Prefix);
2158       ++Prefix;
2159     };
2160
2161     while (N) {
2162       *--BufPtr = Digits[N % Radix];
2163       N /= Radix;
2164     }
2165     Str.append(BufPtr, Buffer+65);
2166     return;
2167   }
2168
2169   APInt Tmp(*this);
2170
2171   if (Signed && isNegative()) {
2172     // They want to print the signed version and it is a negative value
2173     // Flip the bits and add one to turn it into the equivalent positive
2174     // value and put a '-' in the result.
2175     Tmp.flipAllBits();
2176     Tmp++;
2177     Str.push_back('-');
2178   }
2179
2180   while (*Prefix) {
2181     Str.push_back(*Prefix);
2182     ++Prefix;
2183   };
2184
2185   // We insert the digits backward, then reverse them to get the right order.
2186   unsigned StartDig = Str.size();
2187
2188   // For the 2, 8 and 16 bit cases, we can just shift instead of divide
2189   // because the number of bits per digit (1, 3 and 4 respectively) divides
2190   // equaly.  We just shift until the value is zero.
2191   if (Radix == 2 || Radix == 8 || Radix == 16) {
2192     // Just shift tmp right for each digit width until it becomes zero
2193     unsigned ShiftAmt = (Radix == 16 ? 4 : (Radix == 8 ? 3 : 1));
2194     unsigned MaskAmt = Radix - 1;
2195
2196     while (Tmp != 0) {
2197       unsigned Digit = unsigned(Tmp.getRawData()[0]) & MaskAmt;
2198       Str.push_back(Digits[Digit]);
2199       Tmp = Tmp.lshr(ShiftAmt);
2200     }
2201   } else {
2202     APInt divisor(Radix == 10? 4 : 8, Radix);
2203     while (Tmp != 0) {
2204       APInt APdigit(1, 0);
2205       APInt tmp2(Tmp.getBitWidth(), 0);
2206       divide(Tmp, Tmp.getNumWords(), divisor, divisor.getNumWords(), &tmp2,
2207              &APdigit);
2208       unsigned Digit = (unsigned)APdigit.getZExtValue();
2209       assert(Digit < Radix && "divide failed");
2210       Str.push_back(Digits[Digit]);
2211       Tmp = tmp2;
2212     }
2213   }
2214
2215   // Reverse the digits before returning.
2216   std::reverse(Str.begin()+StartDig, Str.end());
2217 }
2218
2219 /// toString - This returns the APInt as a std::string.  Note that this is an
2220 /// inefficient method.  It is better to pass in a SmallVector/SmallString
2221 /// to the methods above.
2222 std::string APInt::toString(unsigned Radix = 10, bool Signed = true) const {
2223   SmallString<40> S;
2224   toString(S, Radix, Signed, /* formatAsCLiteral = */false);
2225   return S.str();
2226 }
2227
2228
2229 void APInt::dump() const {
2230   SmallString<40> S, U;
2231   this->toStringUnsigned(U);
2232   this->toStringSigned(S);
2233   dbgs() << "APInt(" << BitWidth << "b, "
2234          << U.str() << "u " << S.str() << "s)";
2235 }
2236
2237 void APInt::print(raw_ostream &OS, bool isSigned) const {
2238   SmallString<40> S;
2239   this->toString(S, 10, isSigned, /* formatAsCLiteral = */false);
2240   OS << S.str();
2241 }
2242
2243 // This implements a variety of operations on a representation of
2244 // arbitrary precision, two's-complement, bignum integer values.
2245
2246 // Assumed by lowHalf, highHalf, partMSB and partLSB.  A fairly safe
2247 // and unrestricting assumption.
2248 #define COMPILE_TIME_ASSERT(cond) extern int CTAssert[(cond) ? 1 : -1]
2249 COMPILE_TIME_ASSERT(integerPartWidth % 2 == 0);
2250
2251 /* Some handy functions local to this file.  */
2252 namespace {
2253
2254   /* Returns the integer part with the least significant BITS set.
2255      BITS cannot be zero.  */
2256   static inline integerPart
2257   lowBitMask(unsigned int bits)
2258   {
2259     assert(bits != 0 && bits <= integerPartWidth);
2260
2261     return ~(integerPart) 0 >> (integerPartWidth - bits);
2262   }
2263
2264   /* Returns the value of the lower half of PART.  */
2265   static inline integerPart
2266   lowHalf(integerPart part)
2267   {
2268     return part & lowBitMask(integerPartWidth / 2);
2269   }
2270
2271   /* Returns the value of the upper half of PART.  */
2272   static inline integerPart
2273   highHalf(integerPart part)
2274   {
2275     return part >> (integerPartWidth / 2);
2276   }
2277
2278   /* Returns the bit number of the most significant set bit of a part.
2279      If the input number has no bits set -1U is returned.  */
2280   static unsigned int
2281   partMSB(integerPart value)
2282   {
2283     unsigned int n, msb;
2284
2285     if (value == 0)
2286       return -1U;
2287
2288     n = integerPartWidth / 2;
2289
2290     msb = 0;
2291     do {
2292       if (value >> n) {
2293         value >>= n;
2294         msb += n;
2295       }
2296
2297       n >>= 1;
2298     } while (n);
2299
2300     return msb;
2301   }
2302
2303   /* Returns the bit number of the least significant set bit of a
2304      part.  If the input number has no bits set -1U is returned.  */
2305   static unsigned int
2306   partLSB(integerPart value)
2307   {
2308     unsigned int n, lsb;
2309
2310     if (value == 0)
2311       return -1U;
2312
2313     lsb = integerPartWidth - 1;
2314     n = integerPartWidth / 2;
2315
2316     do {
2317       if (value << n) {
2318         value <<= n;
2319         lsb -= n;
2320       }
2321
2322       n >>= 1;
2323     } while (n);
2324
2325     return lsb;
2326   }
2327 }
2328
2329 /* Sets the least significant part of a bignum to the input value, and
2330    zeroes out higher parts.  */
2331 void
2332 APInt::tcSet(integerPart *dst, integerPart part, unsigned int parts)
2333 {
2334   unsigned int i;
2335
2336   assert(parts > 0);
2337
2338   dst[0] = part;
2339   for (i = 1; i < parts; i++)
2340     dst[i] = 0;
2341 }
2342
2343 /* Assign one bignum to another.  */
2344 void
2345 APInt::tcAssign(integerPart *dst, const integerPart *src, unsigned int parts)
2346 {
2347   unsigned int i;
2348
2349   for (i = 0; i < parts; i++)
2350     dst[i] = src[i];
2351 }
2352
2353 /* Returns true if a bignum is zero, false otherwise.  */
2354 bool
2355 APInt::tcIsZero(const integerPart *src, unsigned int parts)
2356 {
2357   unsigned int i;
2358
2359   for (i = 0; i < parts; i++)
2360     if (src[i])
2361       return false;
2362
2363   return true;
2364 }
2365
2366 /* Extract the given bit of a bignum; returns 0 or 1.  */
2367 int
2368 APInt::tcExtractBit(const integerPart *parts, unsigned int bit)
2369 {
2370   return (parts[bit / integerPartWidth] &
2371           ((integerPart) 1 << bit % integerPartWidth)) != 0;
2372 }
2373
2374 /* Set the given bit of a bignum. */
2375 void
2376 APInt::tcSetBit(integerPart *parts, unsigned int bit)
2377 {
2378   parts[bit / integerPartWidth] |= (integerPart) 1 << (bit % integerPartWidth);
2379 }
2380
2381 /* Clears the given bit of a bignum. */
2382 void
2383 APInt::tcClearBit(integerPart *parts, unsigned int bit)
2384 {
2385   parts[bit / integerPartWidth] &=
2386     ~((integerPart) 1 << (bit % integerPartWidth));
2387 }
2388
2389 /* Returns the bit number of the least significant set bit of a
2390    number.  If the input number has no bits set -1U is returned.  */
2391 unsigned int
2392 APInt::tcLSB(const integerPart *parts, unsigned int n)
2393 {
2394   unsigned int i, lsb;
2395
2396   for (i = 0; i < n; i++) {
2397       if (parts[i] != 0) {
2398           lsb = partLSB(parts[i]);
2399
2400           return lsb + i * integerPartWidth;
2401       }
2402   }
2403
2404   return -1U;
2405 }
2406
2407 /* Returns the bit number of the most significant set bit of a number.
2408    If the input number has no bits set -1U is returned.  */
2409 unsigned int
2410 APInt::tcMSB(const integerPart *parts, unsigned int n)
2411 {
2412   unsigned int msb;
2413
2414   do {
2415     --n;
2416
2417     if (parts[n] != 0) {
2418       msb = partMSB(parts[n]);
2419
2420       return msb + n * integerPartWidth;
2421     }
2422   } while (n);
2423
2424   return -1U;
2425 }
2426
2427 /* Copy the bit vector of width srcBITS from SRC, starting at bit
2428    srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes
2429    the least significant bit of DST.  All high bits above srcBITS in
2430    DST are zero-filled.  */
2431 void
2432 APInt::tcExtract(integerPart *dst, unsigned int dstCount,const integerPart *src,
2433                  unsigned int srcBits, unsigned int srcLSB)
2434 {
2435   unsigned int firstSrcPart, dstParts, shift, n;
2436
2437   dstParts = (srcBits + integerPartWidth - 1) / integerPartWidth;
2438   assert(dstParts <= dstCount);
2439
2440   firstSrcPart = srcLSB / integerPartWidth;
2441   tcAssign (dst, src + firstSrcPart, dstParts);
2442
2443   shift = srcLSB % integerPartWidth;
2444   tcShiftRight (dst, dstParts, shift);
2445
2446   /* We now have (dstParts * integerPartWidth - shift) bits from SRC
2447      in DST.  If this is less that srcBits, append the rest, else
2448      clear the high bits.  */
2449   n = dstParts * integerPartWidth - shift;
2450   if (n < srcBits) {
2451     integerPart mask = lowBitMask (srcBits - n);
2452     dst[dstParts - 1] |= ((src[firstSrcPart + dstParts] & mask)
2453                           << n % integerPartWidth);
2454   } else if (n > srcBits) {
2455     if (srcBits % integerPartWidth)
2456       dst[dstParts - 1] &= lowBitMask (srcBits % integerPartWidth);
2457   }
2458
2459   /* Clear high parts.  */
2460   while (dstParts < dstCount)
2461     dst[dstParts++] = 0;
2462 }
2463
2464 /* DST += RHS + C where C is zero or one.  Returns the carry flag.  */
2465 integerPart
2466 APInt::tcAdd(integerPart *dst, const integerPart *rhs,
2467              integerPart c, unsigned int parts)
2468 {
2469   unsigned int i;
2470
2471   assert(c <= 1);
2472
2473   for (i = 0; i < parts; i++) {
2474     integerPart l;
2475
2476     l = dst[i];
2477     if (c) {
2478       dst[i] += rhs[i] + 1;
2479       c = (dst[i] <= l);
2480     } else {
2481       dst[i] += rhs[i];
2482       c = (dst[i] < l);
2483     }
2484   }
2485
2486   return c;
2487 }
2488
2489 /* DST -= RHS + C where C is zero or one.  Returns the carry flag.  */
2490 integerPart
2491 APInt::tcSubtract(integerPart *dst, const integerPart *rhs,
2492                   integerPart c, unsigned int parts)
2493 {
2494   unsigned int i;
2495
2496   assert(c <= 1);
2497
2498   for (i = 0; i < parts; i++) {
2499     integerPart l;
2500
2501     l = dst[i];
2502     if (c) {
2503       dst[i] -= rhs[i] + 1;
2504       c = (dst[i] >= l);
2505     } else {
2506       dst[i] -= rhs[i];
2507       c = (dst[i] > l);
2508     }
2509   }
2510
2511   return c;
2512 }
2513
2514 /* Negate a bignum in-place.  */
2515 void
2516 APInt::tcNegate(integerPart *dst, unsigned int parts)
2517 {
2518   tcComplement(dst, parts);
2519   tcIncrement(dst, parts);
2520 }
2521
2522 /*  DST += SRC * MULTIPLIER + CARRY   if add is true
2523     DST  = SRC * MULTIPLIER + CARRY   if add is false
2524
2525     Requires 0 <= DSTPARTS <= SRCPARTS + 1.  If DST overlaps SRC
2526     they must start at the same point, i.e. DST == SRC.
2527
2528     If DSTPARTS == SRCPARTS + 1 no overflow occurs and zero is
2529     returned.  Otherwise DST is filled with the least significant
2530     DSTPARTS parts of the result, and if all of the omitted higher
2531     parts were zero return zero, otherwise overflow occurred and
2532     return one.  */
2533 int
2534 APInt::tcMultiplyPart(integerPart *dst, const integerPart *src,
2535                       integerPart multiplier, integerPart carry,
2536                       unsigned int srcParts, unsigned int dstParts,
2537                       bool add)
2538 {
2539   unsigned int i, n;
2540
2541   /* Otherwise our writes of DST kill our later reads of SRC.  */
2542   assert(dst <= src || dst >= src + srcParts);
2543   assert(dstParts <= srcParts + 1);
2544
2545   /* N loops; minimum of dstParts and srcParts.  */
2546   n = dstParts < srcParts ? dstParts: srcParts;
2547
2548   for (i = 0; i < n; i++) {
2549     integerPart low, mid, high, srcPart;
2550
2551       /* [ LOW, HIGH ] = MULTIPLIER * SRC[i] + DST[i] + CARRY.
2552
2553          This cannot overflow, because
2554
2555          (n - 1) * (n - 1) + 2 (n - 1) = (n - 1) * (n + 1)
2556
2557          which is less than n^2.  */
2558
2559     srcPart = src[i];
2560
2561     if (multiplier == 0 || srcPart == 0)        {
2562       low = carry;
2563       high = 0;
2564     } else {
2565       low = lowHalf(srcPart) * lowHalf(multiplier);
2566       high = highHalf(srcPart) * highHalf(multiplier);
2567
2568       mid = lowHalf(srcPart) * highHalf(multiplier);
2569       high += highHalf(mid);
2570       mid <<= integerPartWidth / 2;
2571       if (low + mid < low)
2572         high++;
2573       low += mid;
2574
2575       mid = highHalf(srcPart) * lowHalf(multiplier);
2576       high += highHalf(mid);
2577       mid <<= integerPartWidth / 2;
2578       if (low + mid < low)
2579         high++;
2580       low += mid;
2581
2582       /* Now add carry.  */
2583       if (low + carry < low)
2584         high++;
2585       low += carry;
2586     }
2587
2588     if (add) {
2589       /* And now DST[i], and store the new low part there.  */
2590       if (low + dst[i] < low)
2591         high++;
2592       dst[i] += low;
2593     } else
2594       dst[i] = low;
2595
2596     carry = high;
2597   }
2598
2599   if (i < dstParts) {
2600     /* Full multiplication, there is no overflow.  */
2601     assert(i + 1 == dstParts);
2602     dst[i] = carry;
2603     return 0;
2604   } else {
2605     /* We overflowed if there is carry.  */
2606     if (carry)
2607       return 1;
2608
2609     /* We would overflow if any significant unwritten parts would be
2610        non-zero.  This is true if any remaining src parts are non-zero
2611        and the multiplier is non-zero.  */
2612     if (multiplier)
2613       for (; i < srcParts; i++)
2614         if (src[i])
2615           return 1;
2616
2617     /* We fitted in the narrow destination.  */
2618     return 0;
2619   }
2620 }
2621
2622 /* DST = LHS * RHS, where DST has the same width as the operands and
2623    is filled with the least significant parts of the result.  Returns
2624    one if overflow occurred, otherwise zero.  DST must be disjoint
2625    from both operands.  */
2626 int
2627 APInt::tcMultiply(integerPart *dst, const integerPart *lhs,
2628                   const integerPart *rhs, unsigned int parts)
2629 {
2630   unsigned int i;
2631   int overflow;
2632
2633   assert(dst != lhs && dst != rhs);
2634
2635   overflow = 0;
2636   tcSet(dst, 0, parts);
2637
2638   for (i = 0; i < parts; i++)
2639     overflow |= tcMultiplyPart(&dst[i], lhs, rhs[i], 0, parts,
2640                                parts - i, true);
2641
2642   return overflow;
2643 }
2644
2645 /* DST = LHS * RHS, where DST has width the sum of the widths of the
2646    operands.  No overflow occurs.  DST must be disjoint from both
2647    operands.  Returns the number of parts required to hold the
2648    result.  */
2649 unsigned int
2650 APInt::tcFullMultiply(integerPart *dst, const integerPart *lhs,
2651                       const integerPart *rhs, unsigned int lhsParts,
2652                       unsigned int rhsParts)
2653 {
2654   /* Put the narrower number on the LHS for less loops below.  */
2655   if (lhsParts > rhsParts) {
2656     return tcFullMultiply (dst, rhs, lhs, rhsParts, lhsParts);
2657   } else {
2658     unsigned int n;
2659
2660     assert(dst != lhs && dst != rhs);
2661
2662     tcSet(dst, 0, rhsParts);
2663
2664     for (n = 0; n < lhsParts; n++)
2665       tcMultiplyPart(&dst[n], rhs, lhs[n], 0, rhsParts, rhsParts + 1, true);
2666
2667     n = lhsParts + rhsParts;
2668
2669     return n - (dst[n - 1] == 0);
2670   }
2671 }
2672
2673 /* If RHS is zero LHS and REMAINDER are left unchanged, return one.
2674    Otherwise set LHS to LHS / RHS with the fractional part discarded,
2675    set REMAINDER to the remainder, return zero.  i.e.
2676
2677    OLD_LHS = RHS * LHS + REMAINDER
2678
2679    SCRATCH is a bignum of the same size as the operands and result for
2680    use by the routine; its contents need not be initialized and are
2681    destroyed.  LHS, REMAINDER and SCRATCH must be distinct.
2682 */
2683 int
2684 APInt::tcDivide(integerPart *lhs, const integerPart *rhs,
2685                 integerPart *remainder, integerPart *srhs,
2686                 unsigned int parts)
2687 {
2688   unsigned int n, shiftCount;
2689   integerPart mask;
2690
2691   assert(lhs != remainder && lhs != srhs && remainder != srhs);
2692
2693   shiftCount = tcMSB(rhs, parts) + 1;
2694   if (shiftCount == 0)
2695     return true;
2696
2697   shiftCount = parts * integerPartWidth - shiftCount;
2698   n = shiftCount / integerPartWidth;
2699   mask = (integerPart) 1 << (shiftCount % integerPartWidth);
2700
2701   tcAssign(srhs, rhs, parts);
2702   tcShiftLeft(srhs, parts, shiftCount);
2703   tcAssign(remainder, lhs, parts);
2704   tcSet(lhs, 0, parts);
2705
2706   /* Loop, subtracting SRHS if REMAINDER is greater and adding that to
2707      the total.  */
2708   for (;;) {
2709       int compare;
2710
2711       compare = tcCompare(remainder, srhs, parts);
2712       if (compare >= 0) {
2713         tcSubtract(remainder, srhs, 0, parts);
2714         lhs[n] |= mask;
2715       }
2716
2717       if (shiftCount == 0)
2718         break;
2719       shiftCount--;
2720       tcShiftRight(srhs, parts, 1);
2721       if ((mask >>= 1) == 0)
2722         mask = (integerPart) 1 << (integerPartWidth - 1), n--;
2723   }
2724
2725   return false;
2726 }
2727
2728 /* Shift a bignum left COUNT bits in-place.  Shifted in bits are zero.
2729    There are no restrictions on COUNT.  */
2730 void
2731 APInt::tcShiftLeft(integerPart *dst, unsigned int parts, unsigned int count)
2732 {
2733   if (count) {
2734     unsigned int jump, shift;
2735
2736     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2737     jump = count / integerPartWidth;
2738     shift = count % integerPartWidth;
2739
2740     while (parts > jump) {
2741       integerPart part;
2742
2743       parts--;
2744
2745       /* dst[i] comes from the two parts src[i - jump] and, if we have
2746          an intra-part shift, src[i - jump - 1].  */
2747       part = dst[parts - jump];
2748       if (shift) {
2749         part <<= shift;
2750         if (parts >= jump + 1)
2751           part |= dst[parts - jump - 1] >> (integerPartWidth - shift);
2752       }
2753
2754       dst[parts] = part;
2755     }
2756
2757     while (parts > 0)
2758       dst[--parts] = 0;
2759   }
2760 }
2761
2762 /* Shift a bignum right COUNT bits in-place.  Shifted in bits are
2763    zero.  There are no restrictions on COUNT.  */
2764 void
2765 APInt::tcShiftRight(integerPart *dst, unsigned int parts, unsigned int count)
2766 {
2767   if (count) {
2768     unsigned int i, jump, shift;
2769
2770     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2771     jump = count / integerPartWidth;
2772     shift = count % integerPartWidth;
2773
2774     /* Perform the shift.  This leaves the most significant COUNT bits
2775        of the result at zero.  */
2776     for (i = 0; i < parts; i++) {
2777       integerPart part;
2778
2779       if (i + jump >= parts) {
2780         part = 0;
2781       } else {
2782         part = dst[i + jump];
2783         if (shift) {
2784           part >>= shift;
2785           if (i + jump + 1 < parts)
2786             part |= dst[i + jump + 1] << (integerPartWidth - shift);
2787         }
2788       }
2789
2790       dst[i] = part;
2791     }
2792   }
2793 }
2794
2795 /* Bitwise and of two bignums.  */
2796 void
2797 APInt::tcAnd(integerPart *dst, const integerPart *rhs, unsigned int parts)
2798 {
2799   unsigned int i;
2800
2801   for (i = 0; i < parts; i++)
2802     dst[i] &= rhs[i];
2803 }
2804
2805 /* Bitwise inclusive or of two bignums.  */
2806 void
2807 APInt::tcOr(integerPart *dst, const integerPart *rhs, unsigned int parts)
2808 {
2809   unsigned int i;
2810
2811   for (i = 0; i < parts; i++)
2812     dst[i] |= rhs[i];
2813 }
2814
2815 /* Bitwise exclusive or of two bignums.  */
2816 void
2817 APInt::tcXor(integerPart *dst, const integerPart *rhs, unsigned int parts)
2818 {
2819   unsigned int i;
2820
2821   for (i = 0; i < parts; i++)
2822     dst[i] ^= rhs[i];
2823 }
2824
2825 /* Complement a bignum in-place.  */
2826 void
2827 APInt::tcComplement(integerPart *dst, unsigned int parts)
2828 {
2829   unsigned int i;
2830
2831   for (i = 0; i < parts; i++)
2832     dst[i] = ~dst[i];
2833 }
2834
2835 /* Comparison (unsigned) of two bignums.  */
2836 int
2837 APInt::tcCompare(const integerPart *lhs, const integerPart *rhs,
2838                  unsigned int parts)
2839 {
2840   while (parts) {
2841       parts--;
2842       if (lhs[parts] == rhs[parts])
2843         continue;
2844
2845       if (lhs[parts] > rhs[parts])
2846         return 1;
2847       else
2848         return -1;
2849     }
2850
2851   return 0;
2852 }
2853
2854 /* Increment a bignum in-place, return the carry flag.  */
2855 integerPart
2856 APInt::tcIncrement(integerPart *dst, unsigned int parts)
2857 {
2858   unsigned int i;
2859
2860   for (i = 0; i < parts; i++)
2861     if (++dst[i] != 0)
2862       break;
2863
2864   return i == parts;
2865 }
2866
2867 /* Set the least significant BITS bits of a bignum, clear the
2868    rest.  */
2869 void
2870 APInt::tcSetLeastSignificantBits(integerPart *dst, unsigned int parts,
2871                                  unsigned int bits)
2872 {
2873   unsigned int i;
2874
2875   i = 0;
2876   while (bits > integerPartWidth) {
2877     dst[i++] = ~(integerPart) 0;
2878     bits -= integerPartWidth;
2879   }
2880
2881   if (bits)
2882     dst[i++] = ~(integerPart) 0 >> (integerPartWidth - bits);
2883
2884   while (i < parts)
2885     dst[i++] = 0;
2886 }