From e21a0b26042f615fdbe8d2c6b29612c212079d52 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Sun, 25 Apr 2021 10:58:07 +0200 Subject: [PATCH] vppinfra: add clear_lowest_set_bit() function, use BMI2 if available Type: improvement Change-Id: I973cacd0cade0ca98e6261c1fb026a5eb38b44d3 Signed-off-by: Damjan Marion --- src/vppinfra/clib.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vppinfra/clib.h b/src/vppinfra/clib.h index 22377c61440..05af8fe7168 100644 --- a/src/vppinfra/clib.h +++ b/src/vppinfra/clib.h @@ -158,6 +158,16 @@ #endif #if defined (count_leading_zeros) +always_inline uword +clear_lowest_set_bit (uword x) +{ +#ifdef __BMI2__ + return _blsr_u64 (x); +#else + return x ^ (1ULL << count_trailing_zeros (x)); +#endif +} + always_inline uword min_log2 (uword x) { -- 2.16.6