add fallback a_clz_32 implementation
authorRich Felker <dalias@aerifal.cx>
Thu, 11 Jun 2020 04:12:48 +0000 (00:12 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 11 Jun 2020 04:12:48 +0000 (00:12 -0400)
some archs already have a_clz_32, used to provide a_ctz_32, but it
hasn't been mandatory because it's not used anywhere yet. mallocng
will need it, however, so add it now. it should probably be optimized
better, but doesn't seem to make a difference at present.

src/internal/atomic.h

index f938879b07798380254791406a4de252db0833db..99539cc035e9ee6f8f401d5bc9b03f585724c167 100644 (file)
@@ -315,4 +315,19 @@ static inline int a_clz_64(uint64_t x)
 }
 #endif
 
+#ifndef a_clz_32
+#define a_clz_32 a_clz_32
+static inline int a_clz_32(uint32_t x)
+{
+       x--;
+       x |= x >> 1;
+       x |= x >> 2;
+       x |= x >> 4;
+       x |= x >> 8;
+       x |= x >> 16;
+       x++;
+       return 31-a_ctz_32(x);
+}
+#endif
+
 #endif