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