diff options
Diffstat (limited to 'src/common/bit_util.h')
| -rw-r--r-- | src/common/bit_util.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/common/bit_util.h b/src/common/bit_util.h index 1eea17ba1..14e53c273 100644 --- a/src/common/bit_util.h +++ b/src/common/bit_util.h | |||
| @@ -58,4 +58,23 @@ inline u64 CountLeadingZeroes64(u64 value) { | |||
| 58 | return __builtin_clzll(value); | 58 | return __builtin_clzll(value); |
| 59 | } | 59 | } |
| 60 | #endif | 60 | #endif |
| 61 | |||
| 62 | inline u32 CountTrailingZeroes32(u32 value) { | ||
| 63 | u32 count = 0; | ||
| 64 | while (((value >> count) & 0xf) == 0 && count < 32) | ||
| 65 | count += 4; | ||
| 66 | while (((value >> count) & 1) == 0 && count < 32) | ||
| 67 | count++; | ||
| 68 | return count; | ||
| 69 | } | ||
| 70 | |||
| 71 | inline u64 CountTrailingZeroes64(u64 value) { | ||
| 72 | u64 count = 0; | ||
| 73 | while (((value >> count) & 0xf) == 0 && count < 64) | ||
| 74 | count += 4; | ||
| 75 | while (((value >> count) & 1) == 0 && count < 64) | ||
| 76 | count++; | ||
| 77 | return count; | ||
| 78 | } | ||
| 79 | |||
| 61 | } // namespace Common | 80 | } // namespace Common |