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