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