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