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