diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-07-18 00:47:10 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-07-18 00:47:10 +0000 |
| commit | 9d4ff4407ec860da1565a5c97ff8121b7c293182 (patch) | |
| tree | 7280272c30e366cb5948306b74ee8b9361976820 | |
| parent | c03caef84767a885de7ebe3613273d4cd305e025 (diff) | |
| download | bcm5719-llvm-9d4ff4407ec860da1565a5c97ff8121b7c293182.tar.gz bcm5719-llvm-9d4ff4407ec860da1565a5c97ff8121b7c293182.zip | |
Add functions to compute ceil(log2(N)) to match functions for floor(log2(N))
llvm-svn: 29168
| -rw-r--r-- | llvm/include/llvm/Support/MathExtras.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h index 72065ba3d88..0f5961ff739 100644 --- a/llvm/include/llvm/Support/MathExtras.h +++ b/llvm/include/llvm/Support/MathExtras.h @@ -228,7 +228,7 @@ inline unsigned CountPopulation_64(uint64_t Value) { // Log2_32 - This function returns the floor log base 2 of the specified value, // -1 if the value is zero. (32 bit edition.) -// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1 +// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1, Log2_32(6) == 2 inline unsigned Log2_32(unsigned Value) { return 31 - CountLeadingZeros_32(Value); } @@ -239,6 +239,19 @@ inline unsigned Log2_64(uint64_t Value) { return 63 - CountLeadingZeros_64(Value); } +// Log2_32_Ceil - This function returns the ceil log base 2 of the specified +// value, 32 if the value is zero. (32 bit edition). +// Ex. Log2_32_Ceil(32) == 5, Log2_32_Ceil(1) == 0, Log2_32_Ceil(6) == 3 +inline unsigned Log2_32_Ceil(unsigned Value) { + return 32-CountLeadingZeros_32(Value-1); +} + +// Log2_64 - This function returns the ceil log base 2 of the specified value, +// 64 if the value is zero. (64 bit edition.) +inline unsigned Log2_64_Ceil(uint64_t Value) { + return 64-CountLeadingZeros_64(Value-1); +} + // BitsToDouble - This function takes a 64-bit integer and returns the bit // equivalent double. inline double BitsToDouble(uint64_t Bits) { |

