4e9ee3402b35d9b989d4f23b3aad5d4ebc0050ab
[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.str();
2172 }
2173
2174
2175 void APInt::dump() const {
2176   SmallString<40> S, U;
2177   this->toStringUnsigned(U);
2178   this->toStringSigned(S);
2179   errs() << "APInt(" << BitWidth << "b, "
2180          << U.str() << "u " << S.str() << "s)";
2181 }
2182
2183 void APInt::print(raw_ostream &OS, bool isSigned) const {
2184   SmallString<40> S;
2185   this->toString(S, 10, isSigned);
2186   OS << S.str();
2187 }
2188
2189 std::ostream &llvm::operator<<(std::ostream &o, const APInt &I) {
2190   raw_os_ostream OS(o);
2191   OS << I;
2192   return o;
2193 }
2194
2195 // This implements a variety of operations on a representation of
2196 // arbitrary precision, two's-complement, bignum integer values.
2197
2198 /* Assumed by lowHalf, highHalf, partMSB and partLSB.  A fairly safe
2199    and unrestricting assumption.  */
2200 #define COMPILE_TIME_ASSERT(cond) extern int CTAssert[(cond) ? 1 : -1]
2201 COMPILE_TIME_ASSERT(integerPartWidth % 2 == 0);
2202
2203 /* Some handy functions local to this file.  */
2204 namespace {
2205
2206   /* Returns the integer part with the least significant BITS set.
2207      BITS cannot be zero.  */
2208   static inline integerPart
2209   lowBitMask(unsigned int bits)
2210   {
2211     assert (bits != 0 && bits <= integerPartWidth);
2212
2213     return ~(integerPart) 0 >> (integerPartWidth - bits);
2214   }
2215
2216   /* Returns the value of the lower half of PART.  */
2217   static inline integerPart
2218   lowHalf(integerPart part)
2219   {
2220     return part & lowBitMask(integerPartWidth / 2);
2221   }
2222
2223   /* Returns the value of the upper half of PART.  */
2224   static inline integerPart
2225   highHalf(integerPart part)
2226   {
2227     return part >> (integerPartWidth / 2);
2228   }
2229
2230   /* Returns the bit number of the most significant set bit of a part.
2231      If the input number has no bits set -1U is returned.  */
2232   static unsigned int
2233   partMSB(integerPart value)
2234   {
2235     unsigned int n, msb;
2236
2237     if (value == 0)
2238       return -1U;
2239
2240     n = integerPartWidth / 2;
2241
2242     msb = 0;
2243     do {
2244       if (value >> n) {
2245         value >>= n;
2246         msb += n;
2247       }
2248
2249       n >>= 1;
2250     } while (n);
2251
2252     return msb;
2253   }
2254
2255   /* Returns the bit number of the least significant set bit of a
2256      part.  If the input number has no bits set -1U is returned.  */
2257   static unsigned int
2258   partLSB(integerPart value)
2259   {
2260     unsigned int n, lsb;
2261
2262     if (value == 0)
2263       return -1U;
2264
2265     lsb = integerPartWidth - 1;
2266     n = integerPartWidth / 2;
2267
2268     do {
2269       if (value << n) {
2270         value <<= n;
2271         lsb -= n;
2272       }
2273
2274       n >>= 1;
2275     } while (n);
2276
2277     return lsb;
2278   }
2279 }
2280
2281 /* Sets the least significant part of a bignum to the input value, and
2282    zeroes out higher parts.  */
2283 void
2284 APInt::tcSet(integerPart *dst, integerPart part, unsigned int parts)
2285 {
2286   unsigned int i;
2287
2288   assert (parts > 0);
2289
2290   dst[0] = part;
2291   for(i = 1; i < parts; i++)
2292     dst[i] = 0;
2293 }
2294
2295 /* Assign one bignum to another.  */
2296 void
2297 APInt::tcAssign(integerPart *dst, const integerPart *src, unsigned int parts)
2298 {
2299   unsigned int i;
2300
2301   for(i = 0; i < parts; i++)
2302     dst[i] = src[i];
2303 }
2304
2305 /* Returns true if a bignum is zero, false otherwise.  */
2306 bool
2307 APInt::tcIsZero(const integerPart *src, unsigned int parts)
2308 {
2309   unsigned int i;
2310
2311   for(i = 0; i < parts; i++)
2312     if (src[i])
2313       return false;
2314
2315   return true;
2316 }
2317
2318 /* Extract the given bit of a bignum; returns 0 or 1.  */
2319 int
2320 APInt::tcExtractBit(const integerPart *parts, unsigned int bit)
2321 {
2322   return(parts[bit / integerPartWidth]
2323          & ((integerPart) 1 << bit % integerPartWidth)) != 0;
2324 }
2325
2326 /* Set the given bit of a bignum.  */
2327 void
2328 APInt::tcSetBit(integerPart *parts, unsigned int bit)
2329 {
2330   parts[bit / integerPartWidth] |= (integerPart) 1 << (bit % integerPartWidth);
2331 }
2332
2333 /* Returns the bit number of the least significant set bit of a
2334    number.  If the input number has no bits set -1U is returned.  */
2335 unsigned int
2336 APInt::tcLSB(const integerPart *parts, unsigned int n)
2337 {
2338   unsigned int i, lsb;
2339
2340   for(i = 0; i < n; i++) {
2341       if (parts[i] != 0) {
2342           lsb = partLSB(parts[i]);
2343
2344           return lsb + i * integerPartWidth;
2345       }
2346   }
2347
2348   return -1U;
2349 }
2350
2351 /* Returns the bit number of the most significant set bit of a number.
2352    If the input number has no bits set -1U is returned.  */
2353 unsigned int
2354 APInt::tcMSB(const integerPart *parts, unsigned int n)
2355 {
2356   unsigned int msb;
2357
2358   do {
2359       --n;
2360
2361       if (parts[n] != 0) {
2362           msb = partMSB(parts[n]);
2363
2364           return msb + n * integerPartWidth;
2365       }
2366   } while (n);
2367
2368   return -1U;
2369 }
2370
2371 /* Copy the bit vector of width srcBITS from SRC, starting at bit
2372    srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes
2373    the least significant bit of DST.  All high bits above srcBITS in
2374    DST are zero-filled.  */
2375 void
2376 APInt::tcExtract(integerPart *dst, unsigned int dstCount,const integerPart *src,
2377                  unsigned int srcBits, unsigned int srcLSB)
2378 {
2379   unsigned int firstSrcPart, dstParts, shift, n;
2380
2381   dstParts = (srcBits + integerPartWidth - 1) / integerPartWidth;
2382   assert (dstParts <= dstCount);
2383
2384   firstSrcPart = srcLSB / integerPartWidth;
2385   tcAssign (dst, src + firstSrcPart, dstParts);
2386
2387   shift = srcLSB % integerPartWidth;
2388   tcShiftRight (dst, dstParts, shift);
2389
2390   /* We now have (dstParts * integerPartWidth - shift) bits from SRC
2391      in DST.  If this is less that srcBits, append the rest, else
2392      clear the high bits.  */
2393   n = dstParts * integerPartWidth - shift;
2394   if (n < srcBits) {
2395     integerPart mask = lowBitMask (srcBits - n);
2396     dst[dstParts - 1] |= ((src[firstSrcPart + dstParts] & mask)
2397                           << n % integerPartWidth);
2398   } else if (n > srcBits) {
2399     if (srcBits % integerPartWidth)
2400       dst[dstParts - 1] &= lowBitMask (srcBits % integerPartWidth);
2401   }
2402
2403   /* Clear high parts.  */
2404   while (dstParts < dstCount)
2405     dst[dstParts++] = 0;
2406 }
2407
2408 /* DST += RHS + C where C is zero or one.  Returns the carry flag.  */
2409 integerPart
2410 APInt::tcAdd(integerPart *dst, const integerPart *rhs,
2411              integerPart c, unsigned int parts)
2412 {
2413   unsigned int i;
2414
2415   assert(c <= 1);
2416
2417   for(i = 0; i < parts; i++) {
2418     integerPart l;
2419
2420     l = dst[i];
2421     if (c) {
2422       dst[i] += rhs[i] + 1;
2423       c = (dst[i] <= l);
2424     } else {
2425       dst[i] += rhs[i];
2426       c = (dst[i] < l);
2427     }
2428   }
2429
2430   return c;
2431 }
2432
2433 /* DST -= RHS + C where C is zero or one.  Returns the carry flag.  */
2434 integerPart
2435 APInt::tcSubtract(integerPart *dst, const integerPart *rhs,
2436                   integerPart c, unsigned int parts)
2437 {
2438   unsigned int i;
2439
2440   assert(c <= 1);
2441
2442   for(i = 0; i < parts; i++) {
2443     integerPart l;
2444
2445     l = dst[i];
2446     if (c) {
2447       dst[i] -= rhs[i] + 1;
2448       c = (dst[i] >= l);
2449     } else {
2450       dst[i] -= rhs[i];
2451       c = (dst[i] > l);
2452     }
2453   }
2454
2455   return c;
2456 }
2457
2458 /* Negate a bignum in-place.  */
2459 void
2460 APInt::tcNegate(integerPart *dst, unsigned int parts)
2461 {
2462   tcComplement(dst, parts);
2463   tcIncrement(dst, parts);
2464 }
2465
2466 /*  DST += SRC * MULTIPLIER + CARRY   if add is true
2467     DST  = SRC * MULTIPLIER + CARRY   if add is false
2468
2469     Requires 0 <= DSTPARTS <= SRCPARTS + 1.  If DST overlaps SRC
2470     they must start at the same point, i.e. DST == SRC.
2471
2472     If DSTPARTS == SRCPARTS + 1 no overflow occurs and zero is
2473     returned.  Otherwise DST is filled with the least significant
2474     DSTPARTS parts of the result, and if all of the omitted higher
2475     parts were zero return zero, otherwise overflow occurred and
2476     return one.  */
2477 int
2478 APInt::tcMultiplyPart(integerPart *dst, const integerPart *src,
2479                       integerPart multiplier, integerPart carry,
2480                       unsigned int srcParts, unsigned int dstParts,
2481                       bool add)
2482 {
2483   unsigned int i, n;
2484
2485   /* Otherwise our writes of DST kill our later reads of SRC.  */
2486   assert(dst <= src || dst >= src + srcParts);
2487   assert(dstParts <= srcParts + 1);
2488
2489   /* N loops; minimum of dstParts and srcParts.  */
2490   n = dstParts < srcParts ? dstParts: srcParts;
2491
2492   for(i = 0; i < n; i++) {
2493     integerPart low, mid, high, srcPart;
2494
2495       /* [ LOW, HIGH ] = MULTIPLIER * SRC[i] + DST[i] + CARRY.
2496
2497          This cannot overflow, because
2498
2499          (n - 1) * (n - 1) + 2 (n - 1) = (n - 1) * (n + 1)
2500
2501          which is less than n^2.  */
2502
2503     srcPart = src[i];
2504
2505     if (multiplier == 0 || srcPart == 0)        {
2506       low = carry;
2507       high = 0;
2508     } else {
2509       low = lowHalf(srcPart) * lowHalf(multiplier);
2510       high = highHalf(srcPart) * highHalf(multiplier);
2511
2512       mid = lowHalf(srcPart) * highHalf(multiplier);
2513       high += highHalf(mid);
2514       mid <<= integerPartWidth / 2;
2515       if (low + mid < low)
2516         high++;
2517       low += mid;
2518
2519       mid = highHalf(srcPart) * lowHalf(multiplier);
2520       high += highHalf(mid);
2521       mid <<= integerPartWidth / 2;
2522       if (low + mid < low)
2523         high++;
2524       low += mid;
2525
2526       /* Now add carry.  */
2527       if (low + carry < low)
2528         high++;
2529       low += carry;
2530     }
2531
2532     if (add) {
2533       /* And now DST[i], and store the new low part there.  */
2534       if (low + dst[i] < low)
2535         high++;
2536       dst[i] += low;
2537     } else
2538       dst[i] = low;
2539
2540     carry = high;
2541   }
2542
2543   if (i < dstParts) {
2544     /* Full multiplication, there is no overflow.  */
2545     assert(i + 1 == dstParts);
2546     dst[i] = carry;
2547     return 0;
2548   } else {
2549     /* We overflowed if there is carry.  */
2550     if (carry)
2551       return 1;
2552
2553     /* We would overflow if any significant unwritten parts would be
2554        non-zero.  This is true if any remaining src parts are non-zero
2555        and the multiplier is non-zero.  */
2556     if (multiplier)
2557       for(; i < srcParts; i++)
2558         if (src[i])
2559           return 1;
2560
2561     /* We fitted in the narrow destination.  */
2562     return 0;
2563   }
2564 }
2565
2566 /* DST = LHS * RHS, where DST has the same width as the operands and
2567    is filled with the least significant parts of the result.  Returns
2568    one if overflow occurred, otherwise zero.  DST must be disjoint
2569    from both operands.  */
2570 int
2571 APInt::tcMultiply(integerPart *dst, const integerPart *lhs,
2572                   const integerPart *rhs, unsigned int parts)
2573 {
2574   unsigned int i;
2575   int overflow;
2576
2577   assert(dst != lhs && dst != rhs);
2578
2579   overflow = 0;
2580   tcSet(dst, 0, parts);
2581
2582   for(i = 0; i < parts; i++)
2583     overflow |= tcMultiplyPart(&dst[i], lhs, rhs[i], 0, parts,
2584                                parts - i, true);
2585
2586   return overflow;
2587 }
2588
2589 /* DST = LHS * RHS, where DST has width the sum of the widths of the
2590    operands.  No overflow occurs.  DST must be disjoint from both
2591    operands.  Returns the number of parts required to hold the
2592    result.  */
2593 unsigned int
2594 APInt::tcFullMultiply(integerPart *dst, const integerPart *lhs,
2595                       const integerPart *rhs, unsigned int lhsParts,
2596                       unsigned int rhsParts)
2597 {
2598   /* Put the narrower number on the LHS for less loops below.  */
2599   if (lhsParts > rhsParts) {
2600     return tcFullMultiply (dst, rhs, lhs, rhsParts, lhsParts);
2601   } else {
2602     unsigned int n;
2603
2604     assert(dst != lhs && dst != rhs);
2605
2606     tcSet(dst, 0, rhsParts);
2607
2608     for(n = 0; n < lhsParts; n++)
2609       tcMultiplyPart(&dst[n], rhs, lhs[n], 0, rhsParts, rhsParts + 1, true);
2610
2611     n = lhsParts + rhsParts;
2612
2613     return n - (dst[n - 1] == 0);
2614   }
2615 }
2616
2617 /* If RHS is zero LHS and REMAINDER are left unchanged, return one.
2618    Otherwise set LHS to LHS / RHS with the fractional part discarded,
2619    set REMAINDER to the remainder, return zero.  i.e.
2620
2621    OLD_LHS = RHS * LHS + REMAINDER
2622
2623    SCRATCH is a bignum of the same size as the operands and result for
2624    use by the routine; its contents need not be initialized and are
2625    destroyed.  LHS, REMAINDER and SCRATCH must be distinct.
2626 */
2627 int
2628 APInt::tcDivide(integerPart *lhs, const integerPart *rhs,
2629                 integerPart *remainder, integerPart *srhs,
2630                 unsigned int parts)
2631 {
2632   unsigned int n, shiftCount;
2633   integerPart mask;
2634
2635   assert(lhs != remainder && lhs != srhs && remainder != srhs);
2636
2637   shiftCount = tcMSB(rhs, parts) + 1;
2638   if (shiftCount == 0)
2639     return true;
2640
2641   shiftCount = parts * integerPartWidth - shiftCount;
2642   n = shiftCount / integerPartWidth;
2643   mask = (integerPart) 1 << (shiftCount % integerPartWidth);
2644
2645   tcAssign(srhs, rhs, parts);
2646   tcShiftLeft(srhs, parts, shiftCount);
2647   tcAssign(remainder, lhs, parts);
2648   tcSet(lhs, 0, parts);
2649
2650   /* Loop, subtracting SRHS if REMAINDER is greater and adding that to
2651      the total.  */
2652   for(;;) {
2653       int compare;
2654
2655       compare = tcCompare(remainder, srhs, parts);
2656       if (compare >= 0) {
2657         tcSubtract(remainder, srhs, 0, parts);
2658         lhs[n] |= mask;
2659       }
2660
2661       if (shiftCount == 0)
2662         break;
2663       shiftCount--;
2664       tcShiftRight(srhs, parts, 1);
2665       if ((mask >>= 1) == 0)
2666         mask = (integerPart) 1 << (integerPartWidth - 1), n--;
2667   }
2668
2669   return false;
2670 }
2671
2672 /* Shift a bignum left COUNT bits in-place.  Shifted in bits are zero.
2673    There are no restrictions on COUNT.  */
2674 void
2675 APInt::tcShiftLeft(integerPart *dst, unsigned int parts, unsigned int count)
2676 {
2677   if (count) {
2678     unsigned int jump, shift;
2679
2680     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2681     jump = count / integerPartWidth;
2682     shift = count % integerPartWidth;
2683
2684     while (parts > jump) {
2685       integerPart part;
2686
2687       parts--;
2688
2689       /* dst[i] comes from the two parts src[i - jump] and, if we have
2690          an intra-part shift, src[i - jump - 1].  */
2691       part = dst[parts - jump];
2692       if (shift) {
2693         part <<= shift;
2694         if (parts >= jump + 1)
2695           part |= dst[parts - jump - 1] >> (integerPartWidth - shift);
2696       }
2697
2698       dst[parts] = part;
2699     }
2700
2701     while (parts > 0)
2702       dst[--parts] = 0;
2703   }
2704 }
2705
2706 /* Shift a bignum right COUNT bits in-place.  Shifted in bits are
2707    zero.  There are no restrictions on COUNT.  */
2708 void
2709 APInt::tcShiftRight(integerPart *dst, unsigned int parts, unsigned int count)
2710 {
2711   if (count) {
2712     unsigned int i, jump, shift;
2713
2714     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2715     jump = count / integerPartWidth;
2716     shift = count % integerPartWidth;
2717
2718     /* Perform the shift.  This leaves the most significant COUNT bits
2719        of the result at zero.  */
2720     for(i = 0; i < parts; i++) {
2721       integerPart part;
2722
2723       if (i + jump >= parts) {
2724         part = 0;
2725       } else {
2726         part = dst[i + jump];
2727         if (shift) {
2728           part >>= shift;
2729           if (i + jump + 1 < parts)
2730             part |= dst[i + jump + 1] << (integerPartWidth - shift);
2731         }
2732       }
2733
2734       dst[i] = part;
2735     }
2736   }
2737 }
2738
2739 /* Bitwise and of two bignums.  */
2740 void
2741 APInt::tcAnd(integerPart *dst, const integerPart *rhs, unsigned int parts)
2742 {
2743   unsigned int i;
2744
2745   for(i = 0; i < parts; i++)
2746     dst[i] &= rhs[i];
2747 }
2748
2749 /* Bitwise inclusive or of two bignums.  */
2750 void
2751 APInt::tcOr(integerPart *dst, const integerPart *rhs, unsigned int parts)
2752 {
2753   unsigned int i;
2754
2755   for(i = 0; i < parts; i++)
2756     dst[i] |= rhs[i];
2757 }
2758
2759 /* Bitwise exclusive or of two bignums.  */
2760 void
2761 APInt::tcXor(integerPart *dst, const integerPart *rhs, unsigned int parts)
2762 {
2763   unsigned int i;
2764
2765   for(i = 0; i < parts; i++)
2766     dst[i] ^= rhs[i];
2767 }
2768
2769 /* Complement a bignum in-place.  */
2770 void
2771 APInt::tcComplement(integerPart *dst, unsigned int parts)
2772 {
2773   unsigned int i;
2774
2775   for(i = 0; i < parts; i++)
2776     dst[i] = ~dst[i];
2777 }
2778
2779 /* Comparison (unsigned) of two bignums.  */
2780 int
2781 APInt::tcCompare(const integerPart *lhs, const integerPart *rhs,
2782                  unsigned int parts)
2783 {
2784   while (parts) {
2785       parts--;
2786       if (lhs[parts] == rhs[parts])
2787         continue;
2788
2789       if (lhs[parts] > rhs[parts])
2790         return 1;
2791       else
2792         return -1;
2793     }
2794
2795   return 0;
2796 }
2797
2798 /* Increment a bignum in-place, return the carry flag.  */
2799 integerPart
2800 APInt::tcIncrement(integerPart *dst, unsigned int parts)
2801 {
2802   unsigned int i;
2803
2804   for(i = 0; i < parts; i++)
2805     if (++dst[i] != 0)
2806       break;
2807
2808   return i == parts;
2809 }
2810
2811 /* Set the least significant BITS bits of a bignum, clear the
2812    rest.  */
2813 void
2814 APInt::tcSetLeastSignificantBits(integerPart *dst, unsigned int parts,
2815                                  unsigned int bits)
2816 {
2817   unsigned int i;
2818
2819   i = 0;
2820   while (bits > integerPartWidth) {
2821     dst[i++] = ~(integerPart) 0;
2822     bits -= integerPartWidth;
2823   }
2824
2825   if (bits)
2826     dst[i++] = ~(integerPart) 0 >> (integerPartWidth - bits);
2827
2828   while (i < parts)
2829     dst[i++] = 0;
2830 }