Changes in directory llvm/lib/Support:
APInt.cpp updated: 1.20 -> 1.21 --- Log message: 1. Fix some indentation and variable names in the get{Min,Max}Value methods. 2. Implement toString for power-of-2 radix without using divide and always printing full words. This allows hex/binary to look at the bit respresentation of the APInt as well as avoid bugs in divide. --- Diffs of the changes: (+24 -8) APInt.cpp | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-) Index: llvm/lib/Support/APInt.cpp diff -u llvm/lib/Support/APInt.cpp:1.20 llvm/lib/Support/APInt.cpp:1.21 --- llvm/lib/Support/APInt.cpp:1.20 Sun Feb 18 14:09:41 2007 +++ llvm/lib/Support/APInt.cpp Sun Feb 18 16:29:05 2007 @@ -675,8 +675,22 @@ return result; } + if (radix != 10) { + uint64_t mask = radix - 1; + uint32_t shift = (radix == 16 ? 4 : radix == 8 ? 3 : 1); + uint32_t nibbles = APINT_BITS_PER_WORD / shift; + for (uint32_t i = 0; i < getNumWords(); ++i) { + uint64_t value = pVal[i]; + for (uint32_t j = 0; j < nibbles; ++j) { + result.insert(0, digits[ value & mask ]); + value >>= shift; + } + } + return result; + } + APInt tmp(*this); - APInt divisor(tmp.getBitWidth(), radix); + APInt divisor(tmp.getBitWidth(), 10); APInt zero(tmp.getBitWidth(), 0); size_t insert_at = 0; if (wantSigned && tmp[BitWidth-1]) { @@ -705,19 +719,21 @@ /// for an APInt of the specified bit-width and if isSign == true, /// it should be largest signed value, otherwise unsigned value. APInt APInt::getMaxValue(uint32_t numBits, bool isSign) { - APInt APIVal(numBits, 0); - APIVal.set(); - if (isSign) APIVal.clear(numBits - 1); - return APIVal; + APInt Result(numBits, 0); + Result.set(); + if (isSign) + Result.clear(numBits - 1); + return Result; } /// getMinValue - This function returns the smallest value for /// an APInt of the given bit-width and if isSign == true, /// it should be smallest signed value, otherwise zero. APInt APInt::getMinValue(uint32_t numBits, bool isSign) { - APInt APIVal(numBits, 0); - if (isSign) APIVal.set(numBits - 1); - return APIVal; + APInt Result(numBits, 0); + if (isSign) + Result.set(numBits - 1); + return Result; } /// getAllOnesValue - This function returns an all-ones value for _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits