xref: /aosp_15_r20/external/bcc/libbpf-tools/bits.bpf.h (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
2 #ifndef __BITS_BPF_H
3 #define __BITS_BPF_H
4 
5 #define READ_ONCE(x) (*(volatile typeof(x) *)&(x))
6 #define WRITE_ONCE(x, val) ((*(volatile typeof(x) *)&(x)) = val)
7 
log2(u32 v)8 static __always_inline u64 log2(u32 v)
9 {
10 	u32 shift, r;
11 
12 	r = (v > 0xFFFF) << 4; v >>= r;
13 	shift = (v > 0xFF) << 3; v >>= shift; r |= shift;
14 	shift = (v > 0xF) << 2; v >>= shift; r |= shift;
15 	shift = (v > 0x3) << 1; v >>= shift; r |= shift;
16 	r |= (v >> 1);
17 
18 	return r;
19 }
20 
log2l(u64 v)21 static __always_inline u64 log2l(u64 v)
22 {
23 	u32 hi = v >> 32;
24 
25 	if (hi)
26 		return log2(hi) + 32;
27 	else
28 		return log2(v);
29 }
30 
31 #endif /* __BITS_BPF_H */
32