Reorder the conditions according to the expected distribution of input signal. This seems to make it almost as fast as the clz builtin using the bsr instruction. --- src/libFLAC/bitreader.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libFLAC/bitreader.c b/src/libFLAC/bitreader.c index 7ae086d..3d947af 100644 --- a/src/libFLAC/bitreader.c +++ b/src/libFLAC/bitreader.c @@ -68,9 +68,11 @@ COUNT_ZERO_MSBS (uint32_t word) #else /* counts the # of zero MSBs in a word */ #define COUNT_ZERO_MSBS(word) ( \ - (word) <= 0xffff ? \ - ( (word) <= 0xff? byte_to_unary_table[word] + 24 : byte_to_unary_table[(word) >> 8] + 16 ) : \ - ( (word) <= 0xffffff? byte_to_unary_table[word >> 16] + 8 : byte_to_unary_table[(word) >> 24] ) \ + (word) > 0xffffff ? byte_to_unary_table[(word) >> 24] : \ + !(word) ? 32 : \ + (word) > 0xffff ? byte_to_unary_table[(word) >> 16] + 8 : \ + (word) > 0xff ? byte_to_unary_table[(word) >> 8] + 16 : \ + byte_to_unary_table[(word)] + 24 \ ) #endif -- 1.7.7.6
Erik de Castro Lopo
2012-May-07 20:54 UTC
[flac-dev] [PATCH] Optimize COUNT_ZERO_MSBS macro
Miroslav Lichvar wrote:> Reorder the conditions according to the expected distribution of input > signal. This seems to make it almost as fast as the clz builtin using > the bsr instruction.Applied. Thanks Miroslav. Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/