This is what is supposed to be the shortest post on this blog.
Remember last post where I used __builtin_ctz to compute GCD? Well… Here’s a way to compute the log2 of an integer using another gcc builtin. Let me introduce __builtin_clz. clz stands for count leading zeroes. So this wonderful thing counts 0 bits starting from the most significant bit. Please note that the result is undefined for 0.
inline uint32_t ilog2(uint32_t i) { return (32-__builtin_clz(i)); }
Check the section 5.49 of GCC doc for more builtins.
By the way the title of this post comes from a short novel by Fredric Brown called Knock.