mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Implement the getHashValue method.
Fix toString use of getValue to use getZExtValue() git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34642 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
31a81f0190
commit
794f4725b8
@ -661,6 +661,21 @@ APInt APInt::getNullValue(uint32_t numBits) {
|
|||||||
return getMinValue(numBits, false);
|
return getMinValue(numBits, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t APInt::getHashValue() const {
|
||||||
|
// LLVM only supports bit widths up to 2^23 so shift the bitwidth into the
|
||||||
|
// high range. This makes the hash unique for integer values < 2^41 bits and
|
||||||
|
// doesn't hurt for larger values.
|
||||||
|
uint64_t hash = uint64_t(BitWidth) << (APINT_BITS_PER_WORD - 23);
|
||||||
|
|
||||||
|
// Add the sum of the words to the hash.
|
||||||
|
if (isSingleWord())
|
||||||
|
hash += VAL;
|
||||||
|
else
|
||||||
|
for (uint32_t i = 0; i < getNumWords(); ++i)
|
||||||
|
hash += pVal[i];
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
/// HiBits - This function returns the high "numBits" bits of this APInt.
|
/// HiBits - This function returns the high "numBits" bits of this APInt.
|
||||||
APInt APInt::getHiBits(uint32_t numBits) const {
|
APInt APInt::getHiBits(uint32_t numBits) const {
|
||||||
return APIntOps::lshr(*this, BitWidth - numBits);
|
return APIntOps::lshr(*this, BitWidth - numBits);
|
||||||
@ -1660,7 +1675,7 @@ std::string APInt::toString(uint8_t radix, bool wantSigned) const {
|
|||||||
APInt tmp2(tmp.getBitWidth(), 0);
|
APInt tmp2(tmp.getBitWidth(), 0);
|
||||||
divide(tmp, tmp.getNumWords(), divisor, divisor.getNumWords(), &tmp2,
|
divide(tmp, tmp.getNumWords(), divisor, divisor.getNumWords(), &tmp2,
|
||||||
&APdigit);
|
&APdigit);
|
||||||
uint32_t digit = APdigit.getValue();
|
uint32_t digit = APdigit.getZExtValue();
|
||||||
assert(digit < radix && "divide failed");
|
assert(digit < radix && "divide failed");
|
||||||
result.insert(insert_at,digits[digit]);
|
result.insert(insert_at,digits[digit]);
|
||||||
tmp = tmp2;
|
tmp = tmp2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user