Commit 5289b309 authored by Miroslav Lichvar's avatar Miroslav Lichvar Committed by Erik de Castro Lopo
Browse files

Optimize COUNT_ZERO_MSBS macro



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's avatarErik de Castro Lopo <erikd@mega-nerd.com>
parent d9fde556
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment