aboutsummaryrefslogtreecommitdiff
path: root/src/utils.h
blob: 157baad9ab9a15fa9b2cc7b4e1711b8d8d31ffa6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once

#include <stdint.h>


inline static uint32_t bit_length(uint32_t n) {
	const uint32_t n_minus_1 = n - 1;
	if (n_minus_1 == 0) {
		return 0;
	} else {
		#ifdef _MSC_VER
			unsigned long bsr;
			_BitScanReverse(&bsr, n_minus_1);
			return bsr + 1;
		#else
			return 32 - __builtin_clz(n_minus_1);
		#endif
	}
}