diff options
author | Rich Felker <dalias@aerifal.cx> | 2020-07-05 13:49:55 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-07-05 13:51:50 -0400 |
commit | 0a005f499cf39822166dd4db3d2d31f0639f1b1b (patch) | |
tree | 685e6646f2b13b18a45fab6e71dfc2a29fa9935d | |
parent | a62df9c9b7cad47e62b293abeddaf3fcdf09d8ae (diff) | |
download | musl-0a005f499cf39822166dd4db3d2d31f0639f1b1b.zip musl-0a005f499cf39822166dd4db3d2d31f0639f1b1b.tar.gz musl-0a005f499cf39822166dd4db3d2d31f0639f1b1b.tar.bz2 |
fix C implementation of a_clz_32
this broke mallocng size_to_class on archs without a native
implementation of a_clz_32. the incorrect logic seems to have been
something i derived from a related but distinct log2-type operation.
with the change made here, it passes an exhaustive test.
as this function is new and presently only used by mallocng, no other
functionality was affected.
-rw-r--r-- | src/internal/atomic.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/internal/atomic.h b/src/internal/atomic.h index 99539cc..96c1552 100644 --- a/src/internal/atomic.h +++ b/src/internal/atomic.h @@ -319,7 +319,7 @@ static inline int a_clz_64(uint64_t x) #define a_clz_32 a_clz_32 static inline int a_clz_32(uint32_t x) { - x--; + x >>= 1; x |= x >> 1; x |= x >> 2; x |= x >> 4; |