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