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