1 2 3 4 5 6 7 8 9 10 11 12 13 14
template <typename U> uint bsr(U x) { uint k; #if __i386__ && USEASM __asm__("bsr %1, %0" : "=r"(k) : "r"(x)); #else k = 0; do k++; while (x >>= 1); k--; #endif return k; }