#ifndef COM_BITS_H #define COM_BITS_H #include "def.h" #include #include /* How many bits needed to represent a given number */ /* Alternitive semntic: nearest upper power of two */ static inline int com_bits_needed(uint32_t v) { #ifdef COM_DEF_COMPILE_MODERN /* Use intrinsic, required for fast sqrt impl */ return v == 0 ? 1 : 32 - __builtin_clz(v); #else #endif if (v == 0) return 1; v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } #endif