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