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