~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Support/APInt.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

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