mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
libkern: avoid local var in order_base_2()
order_base_2(n) is implemented with a variable, which keeps it from being used at file scope. Implement it instead as ilog2(2*n-1), which produces a different result when 2*n overflows, which appears unlikely in practice. Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D46826
This commit is contained in:
parent
86fc6f838e
commit
b7cbf741d5
1 changed files with 1 additions and 4 deletions
|
|
@ -227,10 +227,7 @@ ilog2_long_long(long long n)
|
|||
|
||||
#define ilog2(n) (__builtin_constant_p(n) ? ilog2_const(n) : ilog2_var(n))
|
||||
#define rounddown_pow_of_two(n) ((__typeof(n))1 << ilog2(n))
|
||||
#define order_base_2(n) ({ \
|
||||
__typeof(n) _n = (n); \
|
||||
_n == 1 ? 0 : 1 + ilog2(_n - 1); \
|
||||
})
|
||||
#define order_base_2(n) ilog2(2*(n)-1)
|
||||
#define roundup_pow_of_two(n) ((__typeof(n))1 << order_base_2(n))
|
||||
|
||||
#define bitcount64(x) __bitcount64((uint64_t)(x))
|
||||
|
|
|
|||
Loading…
Reference in a new issue