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