compat: Fix the fallback definition of stdc_trailing_zeros

While shifting "value" to left, we would iterate through all bits
of an unsigned long long, while we only expect to count through
"size * CHAR_BIT" bits; instead shift bits to the right and just
count the trailing zeros.

This fixes fate with MSVC.

Signed-off-by: Martin Storsjö <martin@martin.st>
release/7.1
Martin Storsjö 2 months ago
parent e18b46d95f
commit b4d9fa6cb9
  1. 11
      compat/stdbit/stdbit.h

@ -178,11 +178,14 @@ static inline unsigned int stdc_trailing_zeros_uc(unsigned char value)
static inline unsigned int __stdc_trailing_zeros(unsigned long long value,
unsigned int size)
{
unsigned int zeros = size * CHAR_BIT;
unsigned int zeros = 0;
while (value != 0) {
value <<= 1;
zeros--;
if (!value)
return size * CHAR_BIT;
while ((value & 1) == 0) {
value >>= 1;
zeros++;
}
return zeros;

Loading…
Cancel
Save