There is a function FLAC__clz_soft_uint32 in bitmath.h:
static inline unsigned int FLAC__clz_soft_uint32(unsigned int word)
{
static const unsigned char byte_to_unary_table[] = {
8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
....................................
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
return (word) > 0xffffff ? byte_to_unary_table[(word) >> 24] :
(word) > 0xffff ? byte_to_unary_table[(word) >> 16] + 8 :
(word) > 0xff ? byte_to_unary_table[(word) >> 8] + 16 :
byte_to_unary_table[(word)] + 24;
}
It seems that it adds a copy of byte_to_unary_table[] array to
any file that includes this header.
Maybe it's better to move this array from bitmath.h to bitmath.c?
It will be something like this:
extern const unsigned char FLAC__byte_to_unary_table[];
static inline unsigned int FLAC__clz_soft_uint32(unsigned int word)
{
return (word) > 0xffffff ? FLAC__byte_to_unary_table[(word) >> 24]
:
(word) > 0xffff ? FLAC__byte_to_unary_table[(word) >> 16] + 8 :
(word) > 0xff ? FLAC__byte_to_unary_table[(word) >> 8] + 16 :
FLAC__byte_to_unary_table[(word)] + 24;
}