blob: 157baad9ab9a15fa9b2cc7b4e1711b8d8d31ffa6 [file] [log] [blame]
Marat Dukhan2ab3ccb2017-04-16 08:46:37 -04001#pragma once
2
3#include <stdint.h>
4
5
6inline static uint32_t bit_length(uint32_t n) {
7 const uint32_t n_minus_1 = n - 1;
8 if (n_minus_1 == 0) {
9 return 0;
10 } else {
Marat Dukhanb2fc4ab2018-02-19 22:43:26 -080011 #ifdef _MSC_VER
12 unsigned long bsr;
13 _BitScanReverse(&bsr, n_minus_1);
14 return bsr + 1;
15 #else
16 return 32 - __builtin_clz(n_minus_1);
17 #endif
Marat Dukhan2ab3ccb2017-04-16 08:46:37 -040018 }
19}