fix 32 bit multiply in generic ctz/clz

This commit is contained in:
daanx 2024-12-09 19:43:00 -08:00
parent f28d5c7029
commit 56a1bd7f9e
2 changed files with 4 additions and 4 deletions

View file

@ -289,7 +289,7 @@ static size_t mi_ctz_generic32(uint32_t x) {
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
if (x==0) return 32;
return debruijn[((x & -(int32_t)x) * 0x077CB531UL) >> 27];
return debruijn[((x & -(int32_t)x) * (uint32_t)(0x077CB531U)) >> 27];
}
static size_t mi_clz_generic32(uint32_t x) {
@ -304,7 +304,7 @@ static size_t mi_clz_generic32(uint32_t x) {
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return debruijn[(uint32_t)(x * 0x07C4ACDDUL) >> 27];
return debruijn[(uint32_t)(x * (uint32_t)(0x07C4ACDDU)) >> 27];
}
size_t _mi_clz_generic(size_t x) {