LLVM API Documentation

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