mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Add countTrailingOnes member functions to APInt.
llvm-svn: 47086
This commit is contained in:
parent
547ea0a60d
commit
d22101a970
@ -913,8 +913,9 @@ public:
|
||||
/// one bits.
|
||||
uint32_t countLeadingZeros() const;
|
||||
|
||||
/// countLeadingOnes - This function counts the number of contiguous 1 bits
|
||||
/// in the high order bits. The count stops when the first 0 bit is reached.
|
||||
/// countLeadingOnes - This function is an APInt version of the
|
||||
/// countLeadingOnes_{32,64} functions in MathExtras.h. It counts the number
|
||||
/// of ones from the most significant bit to the first zero bit.
|
||||
/// @returns 0 if the high order bit is not set
|
||||
/// @returns the number of 1 bits from the most significant to the least
|
||||
/// @brief Count the number of leading one bits.
|
||||
@ -929,6 +930,15 @@ public:
|
||||
/// @brief Count the number of trailing zero bits.
|
||||
uint32_t countTrailingZeros() const;
|
||||
|
||||
/// countTrailingOnes - This function is an APInt version of the
|
||||
/// countTrailingOnes_{32,64} functions in MathExtras.h. It counts
|
||||
/// the number of ones from the least significant bit to the first zero bit.
|
||||
/// @returns BitWidth if the value is all ones.
|
||||
/// @returns the number of ones from the least significant bit to the first
|
||||
/// zero bit.
|
||||
/// @brief Count the number of trailing one bits.
|
||||
uint32_t countTrailingOnes() const;
|
||||
|
||||
/// countPopulation - This function is an APInt version of the
|
||||
/// countPopulation_{32,64} functions in MathExtras.h. It counts the number
|
||||
/// of 1 bits in the APInt value.
|
||||
|
@ -813,6 +813,18 @@ uint32_t APInt::countTrailingZeros() const {
|
||||
return std::min(Count, BitWidth);
|
||||
}
|
||||
|
||||
uint32_t APInt::countTrailingOnes() const {
|
||||
if (isSingleWord())
|
||||
return std::min(uint32_t(CountTrailingOnes_64(VAL)), BitWidth);
|
||||
uint32_t Count = 0;
|
||||
uint32_t i = 0;
|
||||
for (; i < getNumWords() && pVal[i] == -1; ++i)
|
||||
Count += APINT_BITS_PER_WORD;
|
||||
if (i < getNumWords())
|
||||
Count += CountTrailingOnes_64(pVal[i]);
|
||||
return std::min(Count, BitWidth);
|
||||
}
|
||||
|
||||
uint32_t APInt::countPopulation() const {
|
||||
if (isSingleWord())
|
||||
return CountPopulation_64(VAL);
|
||||
|
Loading…
Reference in New Issue
Block a user