diff --git a/include/mimalloc/internal.h b/include/mimalloc/internal.h index eae85ab6..52e83069 100644 --- a/include/mimalloc/internal.h +++ b/include/mimalloc/internal.h @@ -976,7 +976,8 @@ static inline 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[(uint32_t)((x & -(int32_t)x) * (uint32_t)(0x077CB531U)) >> 27]; + return debruijn[(((x & -(int32_t)x) * 0x077CB531U) >> 27) & 31]; + } static inline size_t mi_clz_generic32(uint32_t x) { @@ -991,7 +992,8 @@ static inline size_t mi_clz_generic32(uint32_t x) { x |= x >> 4; x |= x >> 8; x |= x >> 16; - return debruijn[(uint32_t)(x * (uint32_t)(0x07C4ACDDU)) >> 27]; + return debruijn[((x * 0x07C4ACDDU) >> 27) & 31]; + } static inline size_t mi_ctz(size_t x) {