From: Damjan Marion Date: Wed, 5 Jan 2022 13:06:34 +0000 (+0100) Subject: vppinfra: few bitops inlines X-Git-Tag: v22.06-rc0~71 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=fdc874af1ea8be505cd5d88663215e4f4481a7a6;p=vpp.git vppinfra: few bitops inlines Change-Id: I9aa01fafd5329a399aa9d72a6e2cc6c9d65dc85c Type: improvement Signed-off-by: Damjan Marion --- diff --git a/src/vppinfra/bitops.h b/src/vppinfra/bitops.h index 17ad49ffb46..04365699f93 100644 --- a/src/vppinfra/bitops.h +++ b/src/vppinfra/bitops.h @@ -176,6 +176,32 @@ do { \ } \ } while (0) +static_always_inline u64 +reset_lowest_set_bit (u64 x) +{ +#ifdef __BMI__ + return _blsr_u64 (x); +#else + return x & (x - 1); +#endif +} + +static_always_inline u64 +get_lowest_set_bit (u64 x) +{ +#ifdef __BMI__ + return _blsi_u64 (x); +#else + return x & -x; +#endif +} + +static_always_inline u64 +get_lowest_set_bit_index (u64 x) +{ + return __builtin_ctzll (x); +} + #endif /* included_clib_bitops_h */ /*