add assertion in count_bits64_with_mask and fix undefined behavior for size 64

Signed-off-by: Francesco Mani <email@francescomani.it>
Assisted-by: Claude:claude-sonnet-4-6
This commit is contained in:
Francesco Mani
2026-05-20 18:06:18 +02:00
parent 19a8a0d1d4
commit db5c84e864

View File

@@ -70,7 +70,8 @@ static __attribute__((always_inline)) inline int count_bits64(uint64_t v)
static __attribute__((always_inline)) inline int count_bits64_with_mask(uint64_t v, int start, int num)
{
uint64_t mask = ((1LL << num) - 1) << start;
AssertFatal(start >= 0 && num > 0 && start + num <= 64, "Invalid range: start=%d num=%d for 64 bits mask\n", start, num);
uint64_t mask = (num == 64 ? ~0ULL : (1ULL << num) - 1) << start;
return count_bits64(v & mask);
}