Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rte_bitops.h(3)			     DPDK		       rte_bitops.h(3)

NAME
       rte_bitops.h

SYNOPSIS
       #include	<stdint.h>
       #include	<rte_compat.h>
       #include	<rte_debug.h>
       #include	<rte_stdatomic.h>

   Macros
       #define RTE_BIT64(nr)   (UINT64_C(1) << (nr))
       #define RTE_BIT32(nr)   (UINT32_C(1) << (nr))
       #define RTE_SHIFT_VAL32(val,  nr)   (UINT32_C(val) << (nr))
       #define RTE_SHIFT_VAL64(val,  nr)   (UINT64_C(val) << (nr))
       #define RTE_GENMASK32(high,  low)	    (((~UINT32_C(0)) <<	(low))
	   & (~UINT32_C(0) >> (31u - (high))))
       #define RTE_GENMASK64(high,  low)	    (((~UINT64_C(0)) <<	(low))
	   & (~UINT64_C(0) >> (63u - (high))))
       #define RTE_FIELD_GET32(mask,  reg)	    ((typeof(mask))(((reg) &
	   (mask)) >> rte_ctz32(mask)))
       #define RTE_FIELD_GET64(mask,  reg)	    ((typeof(mask))(((reg) &
	   (mask)) >> rte_ctz64(mask)))
       #define rte_bit_test(addr,  nr)
       #define rte_bit_set(addr,  nr)
       #define rte_bit_clear(addr,  nr)
       #define rte_bit_assign(addr,  nr,  value)
       #define rte_bit_flip(addr,  nr)
       #define rte_bit_atomic_test(addr,  nr,  memory_order)
       #define rte_bit_atomic_set(addr,	 nr,  memory_order)
       #define rte_bit_atomic_clear(addr,  nr,	memory_order)
       #define rte_bit_atomic_assign(addr,  nr,	 value,	 memory_order)
       #define rte_bit_atomic_flip(addr,  nr,  memory_order)
       #define rte_bit_atomic_test_and_set(addr,  nr,  memory_order)
       #define rte_bit_atomic_test_and_clear(addr,  nr,	 memory_order)
       #define rte_bit_atomic_test_and_assign(addr,  nr,  value,
	   memory_order)
       #define RTE_IS_POWER_OF_2(n)   ((n) && !(((n) - 1) & (n)))

   Functions
       static uint32_t rte_bit_relaxed_get32 (unsigned int nr, volatile
	   uint32_t *addr)
       static void rte_bit_relaxed_set32 (unsigned int nr, volatile uint32_t
	   *addr)
       static void rte_bit_relaxed_clear32 (unsigned int nr, volatile uint32_t
	   *addr)
       static uint32_t rte_bit_relaxed_test_and_set32 (unsigned	int nr,
	   volatile uint32_t *addr)
       static uint32_t rte_bit_relaxed_test_and_clear32	(unsigned int nr,
	   volatile uint32_t *addr)
       static uint64_t rte_bit_relaxed_get64 (unsigned int nr, volatile
	   uint64_t *addr)
       static void rte_bit_relaxed_set64 (unsigned int nr, volatile uint64_t
	   *addr)
       static void rte_bit_relaxed_clear64 (unsigned int nr, volatile uint64_t
	   *addr)
       static uint64_t rte_bit_relaxed_test_and_set64 (unsigned	int nr,
	   volatile uint64_t *addr)
       static uint64_t rte_bit_relaxed_test_and_clear64	(unsigned int nr,
	   volatile uint64_t *addr)
       static unsigned int rte_clz32 (uint32_t v)
       static unsigned int rte_clz64 (uint64_t v)
       static unsigned int rte_ctz32 (uint32_t v)
       static unsigned int rte_ctz64 (uint64_t v)
       static unsigned int rte_popcount32 (uint32_t v)
       static unsigned int rte_popcount64 (uint64_t v)
       static __rte_experimental unsigned int rte_ffs32	(uint32_t v)
       static __rte_experimental unsigned int rte_ffs64	(uint64_t v)
       static uint32_t rte_combine32ms1b (uint32_t x)
       static uint64_t rte_combine64ms1b (uint64_t v)
       static uint32_t rte_bsf32 (uint32_t v)
       static int rte_bsf32_safe (uint32_t v, uint32_t *pos)
       static uint32_t rte_bsf64 (uint64_t v)
       static int rte_bsf64_safe (uint64_t v, uint32_t *pos)
       static uint32_t rte_fls_u32 (uint32_t x)
       static uint32_t rte_fls_u64 (uint64_t x)
       static int rte_is_power_of_2 (uint32_t n)
       static uint32_t rte_align32pow2 (uint32_t x)
       static uint32_t rte_align32prevpow2 (uint32_t x)
       static uint64_t rte_align64pow2 (uint64_t v)
       static uint64_t rte_align64prevpow2 (uint64_t v)
       static uint32_t rte_log2_u32 (uint32_t v)
       static uint32_t rte_log2_u64 (uint64_t v)

Detailed Description
       Bit Operations

       This file provides functionality	for low-level, single-word arithmetic
       and bit-level operations, such as counting or setting individual	bits.

       Definition in file rte_bitops.h.

Macro Definition Documentation
   #define RTE_BIT64(nr)   (UINT64_C(1)	<< (nr))
       Get the uint64_t	value for a specified bit set.

       Parameters
	   nr The bit number in	range of 0 to 63.

       Definition at line 36 of	file rte_bitops.h.

   #define RTE_BIT32(nr)   (UINT32_C(1)	<< (nr))
       Get the uint32_t	value for a specified bit set.

       Parameters
	   nr The bit number in	range of 0 to 31.

       Definition at line 44 of	file rte_bitops.h.

   #define RTE_SHIFT_VAL32(val,	nr)   (UINT32_C(val) <<	(nr))
       Get the uint32_t	shifted	value.

       Parameters
	   val The value to be shifted.
	   nr The shift	number in range	of 0 to	(32 - width of val).

       Definition at line 54 of	file rte_bitops.h.

   #define RTE_SHIFT_VAL64(val,	nr)   (UINT64_C(val) <<	(nr))
       Get the uint64_t	shifted	value.

       Parameters
	   val The value to be shifted.
	   nr The shift	number in range	of 0 to	(64 - width of val).

       Definition at line 64 of	file rte_bitops.h.

   #define RTE_GENMASK32(high, low)		(((~UINT32_C(0)) << (low)) &
       (~UINT32_C(0) >>	(31u - (high))))
       Generate	a contiguous 32-bit mask starting at bit position low and
       ending at position high.

       Parameters
	   high	High bit position.
	   low Low bit position.

       Definition at line 75 of	file rte_bitops.h.

   #define RTE_GENMASK64(high, low)		(((~UINT64_C(0)) << (low)) &
       (~UINT64_C(0) >>	(63u - (high))))
       Generate	a contiguous 64-bit mask starting at bit position low and
       ending at position high.

       Parameters
	   high	High bit position.
	   low Low bit position.

       Definition at line 87 of	file rte_bitops.h.

   #define RTE_FIELD_GET32(mask, reg)		((typeof(mask))(((reg) &
       (mask)) >> rte_ctz32(mask)))
       Extract a 32-bit	field element.

       Parameters
	   mask	Shifted	mask.
	   reg Value of	entire bitfield.

       Definition at line 98 of	file rte_bitops.h.

   #define RTE_FIELD_GET64(mask, reg)		((typeof(mask))(((reg) &
       (mask)) >> rte_ctz64(mask)))
       Extract a 64-bit	field element.

       Parameters
	   mask	Shifted	mask.
	   reg Value of	entire bitfield.

       Definition at line 109 of file rte_bitops.h.

   #define rte_bit_test(addr, nr)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_test32, \
	       const uint32_t *: __rte_bit_test32, \
	       volatile	uint32_t *: __rte_bit_v_test32,	\
	       const volatile uint32_t *: __rte_bit_v_test32, \
	       uint64_t	*: __rte_bit_test64, \
	       const uint64_t *: __rte_bit_test64, \
	       volatile	uint64_t *: __rte_bit_v_test64,	\
	       const volatile uint64_t *: __rte_bit_v_test64) \
		   (addr, nr)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Test bit	in word.

       Generic selection macro to test the value of a bit in a 32-bit or
       64-bit word. The	type of	operation depends on the type of the addr
       parameter.

       This macro does not give	any guarantees in regards to memory ordering
       or atomicity.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.

       Definition at line 130 of file rte_bitops.h.

   #define rte_bit_set(addr, nr)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_set32, \
	       volatile	uint32_t *: __rte_bit_v_set32, \
	       uint64_t	*: __rte_bit_set64, \
	       volatile	uint64_t *: __rte_bit_v_set64) \
		   (addr, nr)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Set bit in word.

       Generic selection macro to set a	bit in a 32-bit	or 64-bit word.	The
       type of operation depends on the	type of	the addr parameter.

       This macro does not give	any guarantees in regards to memory ordering
       or atomicity.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.

       Definition at line 160 of file rte_bitops.h.

   #define rte_bit_clear(addr, nr)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_clear32, \
	       volatile	uint32_t *: __rte_bit_v_clear32, \
	       uint64_t	*: __rte_bit_clear64, \
	       volatile	uint64_t *: __rte_bit_v_clear64) \
		   (addr, nr)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Clear bit in word.

       Generic selection macro to clear	a bit in a 32-bit or 64-bit word. The
       type of operation depends on the	type of	the addr parameter.

       This macro does not give	any guarantees in regards to memory ordering
       or atomicity.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.

       Definition at line 186 of file rte_bitops.h.

   #define rte_bit_assign(addr,	nr, value)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_assign32, \
	       volatile	uint32_t *: __rte_bit_v_assign32, \
	       uint64_t	*: __rte_bit_assign64, \
	       volatile	uint64_t *: __rte_bit_v_assign64) \
		   (addr, nr, value)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Assign a	value to a bit in word.

       Generic selection macro to assign a value to a bit in a 32-bit or
       64-bit word. The	type of	operation depends on the type of the addr
       parameter.

       This macro does not give	any guarantees in regards to memory ordering
       or atomicity.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   value The new value of the bit - true for '1', or false for '0'.

       Definition at line 213 of file rte_bitops.h.

   #define rte_bit_flip(addr, nr)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_flip32, \
	       volatile	uint32_t *: __rte_bit_v_flip32,	\
	       uint64_t	*: __rte_bit_flip64, \
	       volatile	uint64_t *: __rte_bit_v_flip64)	\
		   (addr, nr)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Flip a bit in word.

       Generic selection macro to change the value of a	bit to '0' if '1' or
       '1' if '0' in a 32-bit or 64-bit	word. The type of operation depends on
       the type	of the addr parameter.

       This macro does not give	any guarantees in regards to memory ordering
       or atomicity.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.

       Definition at line 239 of file rte_bitops.h.

   #define rte_bit_atomic_test(addr, nr, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_test32, \
	       const uint32_t *: __rte_bit_atomic_test32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_test32, \
	       const volatile uint32_t *: __rte_bit_atomic_v_test32, \
	       uint64_t	*: __rte_bit_atomic_test64, \
	       const uint64_t *: __rte_bit_atomic_test64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_test64, \
	       const volatile uint64_t *: __rte_bit_atomic_v_test64) \
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Test if a particular bit	in a word is set with a	particular memory
       order.

       Test a bit with the resulting memory load ordered as per	the specified
       memory order.

       Parameters
	   addr	A pointer to the word to query.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Returns
	   Returns true	if the bit is set, and false otherwise.

       Definition at line 266 of file rte_bitops.h.

   #define rte_bit_atomic_set(addr, nr,	memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_set32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_set32, \
	       uint64_t	*: __rte_bit_atomic_set64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_set64) \
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically set bit in word.

       Generic selection macro to atomically set bit specified by nr in	the
       word pointed to by addr to '1', with the	memory ordering	as specified
       by memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Definition at line 295 of file rte_bitops.h.

   #define rte_bit_atomic_clear(addr, nr, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_clear32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_clear32,	\
	       uint64_t	*: __rte_bit_atomic_clear64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_clear64)	\
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically clear	bit in word.

       Generic selection macro to atomically set bit specified by nr in	the
       word pointed to by addr to '0', with the	memory ordering	as specified
       by memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Definition at line 320 of file rte_bitops.h.

   #define rte_bit_atomic_assign(addr, nr, value, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_assign32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_assign32, \
	       uint64_t	*: __rte_bit_atomic_assign64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_assign64) \
		   (addr, nr, value, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically assign a value to bit	in word.

       Generic selection macro to atomically set bit specified by nr in	the
       word pointed to by addr to the value indicated by value,	with the
       memory ordering as specified with memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   value The new value of the bit - true for '1', or false for '0'.
	   memory_order	The memory order to use.

       Definition at line 347 of file rte_bitops.h.

   #define rte_bit_atomic_flip(addr, nr, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_flip32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_flip32, \
	       uint64_t	*: __rte_bit_atomic_flip64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_flip64) \
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically flip bit in word.

       Generic selection macro to atomically negate the	value of the bit
       specified by nr in the word pointed to by addr to the value indicated
       by value, with the memory ordering as specified with memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Definition at line 373 of file rte_bitops.h.

   #define rte_bit_atomic_test_and_set(addr, nr, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_test_and_set32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_test_and_set32, \
	       uint64_t	*: __rte_bit_atomic_test_and_set64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_test_and_set64) \
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically test and set a bit in	word.

       Generic selection macro to atomically test and set bit specified	by nr
       in the word pointed to by addr to '1', with the memory ordering as
       specified with memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Returns
	   Returns true	if the bit was set, and	false otherwise.

       Definition at line 400 of file rte_bitops.h.

   #define rte_bit_atomic_test_and_clear(addr, nr, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_test_and_clear32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_test_and_clear32, \
	       uint64_t	*: __rte_bit_atomic_test_and_clear64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_test_and_clear64) \
		   (addr, nr, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically test and clear a bit in word.

       Generic selection macro to atomically test and clear bit	specified by
       nr in the word pointed to by addr to '0', with the memory ordering as
       specified with memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   memory_order	The memory order to use.

       Returns
	   Returns true	if the bit was set, and	false otherwise.

       Definition at line 427 of file rte_bitops.h.

   #define rte_bit_atomic_test_and_assign(addr,	nr, value, memory_order)
       Value:.PP
	   _Generic((addr), \
	       uint32_t	*: __rte_bit_atomic_test_and_assign32, \
	       volatile	uint32_t *: __rte_bit_atomic_v_test_and_assign32, \
	       uint64_t	*: __rte_bit_atomic_test_and_assign64, \
	       volatile	uint64_t *: __rte_bit_atomic_v_test_and_assign64) \
		   (addr, nr, value, memory_order)

       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Atomically test and assign a bit	in word.

       Generic selection macro to atomically test and assign bit specified by
       nr in the word pointed to by addr the value specified by	value, with
       the memory ordering as specified	with memory_order.

       Parameters
	   addr	A pointer to the word to modify.
	   nr The index	of the bit.
	   value The new value of the bit - true for '1', or false for '0'.
	   memory_order	The memory order to use.

       Returns
	   Returns true	if the bit was set, and	false otherwise.

       Definition at line 457 of file rte_bitops.h.

   #define RTE_IS_POWER_OF_2(n)	  ((n) && !(((n) - 1) &	(n)))
       Macro to	return 1 if n is a power of 2, 0 otherwise

       Definition at line 1302 of file rte_bitops.h.

Function Documentation
   static uint32_t rte_bit_relaxed_get32 (unsigned int nr, volatile uint32_t *
       addr) [inline],	[static]
       Get the target bit from a 32-bit	value without memory ordering.

       Parameters
	   nr The target bit to	get.
	   addr	The address holding the	bit.

       Returns
	   The target bit.

       Definition at line 674 of file rte_bitops.h.

   static void rte_bit_relaxed_set32 (unsigned int nr, volatile	uint32_t *
       addr) [inline],	[static]
       Set the target bit in a 32-bit value to 1 without memory	ordering.

       Parameters
	   nr The target bit to	set.
	   addr	The address holding the	bit.

       Definition at line 691 of file rte_bitops.h.

   static void rte_bit_relaxed_clear32 (unsigned int nr, volatile uint32_t *
       addr) [inline],	[static]
       Clear the target	bit in a 32-bit	value to 0 without memory ordering.

       Parameters
	   nr The target bit to	clear.
	   addr	The address holding the	bit.

       Definition at line 708 of file rte_bitops.h.

   static uint32_t rte_bit_relaxed_test_and_set32 (unsigned int	nr, volatile
       uint32_t	* addr)	[inline],  [static]
       Return the original bit from a 32-bit value, then set it	to 1 without
       memory ordering.

       Parameters
	   nr The target bit to	get and	set.
	   addr	The address holding the	bit.

       Returns
	   The original	bit.

       Definition at line 728 of file rte_bitops.h.

   static uint32_t rte_bit_relaxed_test_and_clear32 (unsigned int nr, volatile
       uint32_t	* addr)	[inline],  [static]
       Return the original bit from a 32-bit value, then clear it to 0 without
       memory ordering.

       Parameters
	   nr The target bit to	get and	clear.
	   addr	The address holding the	bit.

       Returns
	   The original	bit.

       Definition at line 750 of file rte_bitops.h.

   static uint64_t rte_bit_relaxed_get64 (unsigned int nr, volatile uint64_t *
       addr) [inline],	[static]
       Get the target bit from a 64-bit	value without memory ordering.

       Parameters
	   nr The target bit to	get.
	   addr	The address holding the	bit.

       Returns
	   The target bit.

       Definition at line 773 of file rte_bitops.h.

   static void rte_bit_relaxed_set64 (unsigned int nr, volatile	uint64_t *
       addr) [inline],	[static]
       Set the target bit in a 64-bit value to 1 without memory	ordering.

       Parameters
	   nr The target bit to	set.
	   addr	The address holding the	bit.

       Definition at line 790 of file rte_bitops.h.

   static void rte_bit_relaxed_clear64 (unsigned int nr, volatile uint64_t *
       addr) [inline],	[static]
       Clear the target	bit in a 64-bit	value to 0 without memory ordering.

       Parameters
	   nr The target bit to	clear.
	   addr	The address holding the	bit.

       Definition at line 807 of file rte_bitops.h.

   static uint64_t rte_bit_relaxed_test_and_set64 (unsigned int	nr, volatile
       uint64_t	* addr)	[inline],  [static]
       Return the original bit from a 64-bit value, then set it	to 1 without
       memory ordering.

       Parameters
	   nr The target bit to	get and	set.
	   addr	The address holding the	bit.

       Returns
	   The original	bit.

       Definition at line 827 of file rte_bitops.h.

   static uint64_t rte_bit_relaxed_test_and_clear64 (unsigned int nr, volatile
       uint64_t	* addr)	[inline],  [static]
       Return the original bit from a 64-bit value, then clear it to 0 without
       memory ordering.

       Parameters
	   nr The target bit to	get and	clear.
	   addr	The address holding the	bit.

       Returns
	   The original	bit.

       Definition at line 849 of file rte_bitops.h.

   static unsigned int rte_clz32 (uint32_t v) [inline],	 [static]
       Get the count of	leading	0-bits in v.

       Parameters
	   v The value.

       Returns
	   The count of	leading	zero bits.

       Definition at line 1020 of file rte_bitops.h.

   static unsigned int rte_clz64 (uint64_t v) [inline],	 [static]
       Get the count of	leading	0-bits in v.

       Parameters
	   v The value.

       Returns
	   The count of	leading	zero bits.

       Definition at line 1034 of file rte_bitops.h.

   static unsigned int rte_ctz32 (uint32_t v) [inline],	 [static]
       Get the count of	trailing 0-bits	in v.

       Parameters
	   v The value.

       Returns
	   The count of	trailing zero bits.

       Definition at line 1048 of file rte_bitops.h.

   static unsigned int rte_ctz64 (uint64_t v) [inline],	 [static]
       Get the count of	trailing 0-bits	in v.

       Parameters
	   v The value.

       Returns
	   The count of	trailing zero bits.

       Definition at line 1062 of file rte_bitops.h.

   static unsigned int rte_popcount32 (uint32_t	v) [inline],  [static]
       Get the count of	1-bits in v.

       Parameters
	   v The value.

       Returns
	   The count of	1-bits.

       Definition at line 1076 of file rte_bitops.h.

   static unsigned int rte_popcount64 (uint64_t	v) [inline],  [static]
       Get the count of	1-bits in v.

       Parameters
	   v The value.

       Returns
	   The count of	1-bits.

       Definition at line 1090 of file rte_bitops.h.

   static __rte_experimental unsigned int rte_ffs32 (uint32_t v) [inline],
       [static]
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Search v	from least significant bit (LSB) to the	most significant bit
       (MSB) for a set bit (1).

       Parameters
	   v The value.

       Returns
	   Bit index + 1 if a set bit is found,	zero otherwise.

       Definition at line 1109 of file rte_bitops.h.

   static __rte_experimental unsigned int rte_ffs64 (uint64_t v) [inline],
       [static]
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Search v	from least significant bit (LSB) to the	most significant bit
       (MSB) for a set bit (1).

       Parameters
	   v The value.

       Returns
	   Bit index + 1 if a set bit is found,	zero otherwise.

       Definition at line 1128 of file rte_bitops.h.

   static uint32_t rte_combine32ms1b (uint32_t x) [inline],  [static]
       Combines	32b inputs most	significant set	bits into the least
       significant bits	to construct a value with the same MSBs	as x but all
       1's under it.

       Parameters
	   x The integer whose MSBs need to be combined	with its LSBs

       Returns
	   The combined	value.

       Definition at line 1146 of file rte_bitops.h.

   static uint64_t rte_combine64ms1b (uint64_t v) [inline],  [static]
       Combines	64b inputs most	significant set	bits into the least
       significant bits	to construct a value with the same MSBs	as x but all
       1's under it.

       Parameters
	   v The integer whose MSBs need to be combined	with its LSBs

       Returns
	   The combined	value.

       Definition at line 1168 of file rte_bitops.h.

   static uint32_t rte_bsf32 (uint32_t v) [inline],  [static]
       Searches	the input parameter for	the least significant set bit
       (starting from zero). If	a least	significant 1 bit is found, its	bit
       index is	returned. If the content of the	input parameter	is zero, then
       the content of the return value is undefined.

       Parameters
	   v input parameter, should not be zero.

       Returns
	   least significant set bit in	the input parameter.

       Definition at line 1192 of file rte_bitops.h.

   static int rte_bsf32_safe (uint32_t v, uint32_t * pos) [inline],  [static]
       Searches	the input parameter for	the least significant set bit
       (starting from zero). Safe version (checks for input parameter being
       zero).

       Warning
	   pos must be a valid pointer.	It is not checked!

       Parameters
	   v The input parameter.
	   pos If v was	not 0, this value will contain position	of least
	   significant bit within the input parameter.

       Returns
	   Returns 0 if	v was 0, otherwise returns 1.

       Definition at line 1212 of file rte_bitops.h.

   static uint32_t rte_bsf64 (uint64_t v) [inline],  [static]
       Searches	the input parameter for	the least significant set bit
       (starting from zero). If	a least	significant 1 bit is found, its	bit
       index is	returned. If the content of the	input parameter	is zero, then
       the content of the return value is undefined.

       Parameters
	   v input parameter, should not be zero.

       Returns
	   least significant set bit in	the input parameter.

       Definition at line 1233 of file rte_bitops.h.

   static int rte_bsf64_safe (uint64_t v, uint32_t * pos) [inline],  [static]
       Searches	the input parameter for	the least significant set bit
       (starting from zero). Safe version (checks for input parameter being
       zero).

       Warning
	   pos must be a valid pointer.	It is not checked!

       Parameters
	   v The input parameter.
	   pos If v was	not 0, this value will contain position	of least
	   significant bit within the input parameter.

       Returns
	   Returns 0 if	v was 0, otherwise returns 1.

       Definition at line 1253 of file rte_bitops.h.

   static uint32_t rte_fls_u32 (uint32_t x) [inline],  [static]
       Return the last (most-significant) bit set.

       Note
	   The last (most significant) bit is at position 32.

	   rte_fls_u32(0) = 0, rte_fls_u32(1) =	1, rte_fls_u32(0x80000000) =
	   32

       Parameters
	   x The input parameter.

       Returns
	   The last (most-significant) bit set,	or 0 if	the input is 0.

       Definition at line 1274 of file rte_bitops.h.

   static uint32_t rte_fls_u64 (uint64_t x) [inline],  [static]
       Return the last (most-significant) bit set.

       Note
	   The last (most significant) bit is at position 64.

	   rte_fls_u64(0) = 0, rte_fls_u64(1) =	1,
	   rte_fls_u64(0x8000000000000000) = 64

       Parameters
	   x The input parameter.

       Returns
	   The last (most-significant) bit set,	or 0 if	the input is 0.

       Definition at line 1292 of file rte_bitops.h.

   static int rte_is_power_of_2	(uint32_t n) [inline],	[static]
       Returns true if n is a power of 2

       Parameters
	   n Number to check

       Returns
	   1 if	true, 0	otherwise

       Definition at line 1311 of file rte_bitops.h.

   static uint32_t rte_align32pow2 (uint32_t x)	[inline],  [static]
       Aligns input parameter to the next power	of 2

       Parameters
	   x The integer value to align

       Returns
	   The smallest	power of 2 which is greater than or equal to x.

       Definition at line 1326 of file rte_bitops.h.

   static uint32_t rte_align32prevpow2 (uint32_t x) [inline],  [static]
       Aligns input parameter to the previous power of 2

       Parameters
	   x The integer value to align

       Returns
	   The greatest	power of 2 which is smaller than or equal to x.

       Definition at line 1344 of file rte_bitops.h.

   static uint64_t rte_align64pow2 (uint64_t v)	[inline],  [static]
       Aligns 64b input	parameter to the next power of 2

       Parameters
	   v The 64b value to align

       Returns
	   The smallest	power of 2 which is greater than or equal to v.

       Definition at line 1361 of file rte_bitops.h.

   static uint64_t rte_align64prevpow2 (uint64_t v) [inline],  [static]
       Aligns 64b input	parameter to the previous power	of 2

       Parameters
	   v The 64b value to align

       Returns
	   The greatest	power of 2 which is smaller than or equal to v.

       Definition at line 1379 of file rte_bitops.h.

   static uint32_t rte_log2_u32	(uint32_t v) [inline],	[static]
       Return the rounded-up log2 of a integer.

       Note
	   Contrary to the logarithm mathematical operation, rte_log2_u32(0)
	   == 0	and not	-inf.

       Parameters
	   v The input parameter.

       Returns
	   The rounded-up log2 of the input, or	0 if the input is 0.

       Definition at line 1398 of file rte_bitops.h.

   static uint32_t rte_log2_u64	(uint64_t v) [inline],	[static]
       Return the rounded-up log2 of a 64-bit integer.

       Note
	   Contrary to the logarithm mathematical operation, rte_log2_u64(0)
	   == 0	and not	-inf.

       Parameters
	   v The input parameter.

       Returns
	   The rounded-up log2 of the input, or	0 if the input is 0.

       Definition at line 1418 of file rte_bitops.h.

Author
       Generated automatically by Doxygen for DPDK from	the source code.

Version	25.11.0			Thu Jun	11 2026		       rte_bitops.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rte_ctz64&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help