Optimize COUNT_ZERO_MSBS macro
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 7 May 2012 11:00:12 +0000 (13:00 +0200)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Mon, 7 May 2012 11:45:33 +0000 (21:45 +1000)
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.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
src/libFLAC/bitreader.c

index ae515a0..dcd9e42 100644 (file)
@@ -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