Zephyr API Documentation 4.2.0-rc3
A Scalable Open Source RTOS
 4.2.0-rc3
Math Ilog2 Functions

Integer log2 utilities for mathematical operations. More...

Macros

#define ilog2_compile_time_const_u32(n)
 Calculate the floor of log2 for compile time constant.
#define ilog2(n)
 Calculate integer log2.

Detailed Description

Integer log2 utilities for mathematical operations.

Macro Definition Documentation

◆ ilog2

#define ilog2 ( n)

#include <zephyr/math/ilog2.h>

Value:
( \
__builtin_constant_p(n) ? \
ilog2_compile_time_const_u32(n) : \
find_msb_set(n) - 1 \
)
static ALWAYS_INLINE unsigned int find_msb_set(uint32_t op)
find most significant bit set in a 32-bit word
Definition ffs.h:32

Calculate integer log2.

This calculates the floor of log2 (integer of log2).

Warning
Will return 0 if input value is 0, which is invalid for log2.
Parameters
nInput value
Returns
Integer log2 of n

◆ ilog2_compile_time_const_u32

#define ilog2_compile_time_const_u32 ( n)

#include <zephyr/math/ilog2.h>

Value:
( \
((n) < 2) ? 0 : \
(((n) & BIT(31)) == BIT(31)) ? 31 : \
(((n) & BIT(30)) == BIT(30)) ? 30 : \
(((n) & BIT(29)) == BIT(29)) ? 29 : \
(((n) & BIT(28)) == BIT(28)) ? 28 : \
(((n) & BIT(27)) == BIT(27)) ? 27 : \
(((n) & BIT(26)) == BIT(26)) ? 26 : \
(((n) & BIT(25)) == BIT(25)) ? 25 : \
(((n) & BIT(24)) == BIT(24)) ? 24 : \
(((n) & BIT(23)) == BIT(23)) ? 23 : \
(((n) & BIT(22)) == BIT(22)) ? 22 : \
(((n) & BIT(21)) == BIT(21)) ? 21 : \
(((n) & BIT(20)) == BIT(20)) ? 20 : \
(((n) & BIT(19)) == BIT(19)) ? 19 : \
(((n) & BIT(18)) == BIT(18)) ? 18 : \
(((n) & BIT(17)) == BIT(17)) ? 17 : \
(((n) & BIT(16)) == BIT(16)) ? 16 : \
(((n) & BIT(15)) == BIT(15)) ? 15 : \
(((n) & BIT(14)) == BIT(14)) ? 14 : \
(((n) & BIT(13)) == BIT(13)) ? 13 : \
(((n) & BIT(12)) == BIT(12)) ? 12 : \
(((n) & BIT(11)) == BIT(11)) ? 11 : \
(((n) & BIT(10)) == BIT(10)) ? 10 : \
(((n) & BIT(9)) == BIT(9)) ? 9 : \
(((n) & BIT(8)) == BIT(8)) ? 8 : \
(((n) & BIT(7)) == BIT(7)) ? 7 : \
(((n) & BIT(6)) == BIT(6)) ? 6 : \
(((n) & BIT(5)) == BIT(5)) ? 5 : \
(((n) & BIT(4)) == BIT(4)) ? 4 : \
(((n) & BIT(3)) == BIT(3)) ? 3 : \
(((n) & BIT(2)) == BIT(2)) ? 2 : \
1 \
)
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44

Calculate the floor of log2 for compile time constant.

This calculates the floor of log2 (integer log2) for 32-bit unsigned integer.

Note
This should only be used for compile time constant when value is known during preprocessing stage. DO NOT USE for runtime code due to the big tree of nested if-else blocks.
Warning
Will return 0 if input value is 0, which is invalid for log2.
Parameters
nInput value
Returns
Integer log2 of