diff --git a/include/gp/math/integer_math.hpp b/include/gp/math/integer_math.hpp index ea3e979..b1c8a73 100644 --- a/include/gp/math/integer_math.hpp +++ b/include/gp/math/integer_math.hpp @@ -13,6 +13,21 @@ namespace gp { Sean Eron Anderson seander@cs.stanford.edu **/ + template<> + constexpr size_t log2(uint8_t v) + { + constexpr int MultiplyDeBruijnBitPosition[8] = + { + 0, 5, 1, 6, 4, 3, 2, 7 + }; + + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + + return MultiplyDeBruijnBitPosition[(v * 29U) >> 5]; + } + template<> constexpr size_t log2(uint32_t v) {