| ======== |
| stdbit.h |
| ======== |
| |
| The optional C23 ``stdbit.h`` header provides bit manipulation macros |
| (endianness, leading/trailing zeros and ones, count, single-bit test, |
| bit width, bit floor, bit ceil). NuttX provides this header only when |
| explicitly enabled via Kconfig. |
| |
| Configuration |
| ============= |
| |
| - **CONFIG_ARCH_HAVE_STDBIT_H** (bool, selected by arch) |
| Architecture indicates it provides ``arch/<arch>/include/stdbit.h``. |
| |
| - **CONFIG_ARCH_STDBIT_H** (bool "stdbit.h", depends on ARCH_HAVE_STDBIT_H) |
| Use the redirecting header. The build copies |
| ``include/nuttx/lib/stdbit.h`` to ``include/stdbit.h``; that header |
| then includes ``<arch/stdbit.h>`` when this option is set. |
| |
| - **CONFIG_LIBC_STDBIT_GENERIC** (bool "stdbit.h (generic C23)") |
| Use the generic C23 implementation. The same redirecting file |
| ``include/nuttx/lib/stdbit.h`` is copied to ``include/stdbit.h``, |
| and the generic implementation is used (no arch header). Requires |
| compiler builtins (e.g. ``__builtin_clz``, ``__builtin_ctz``, |
| ``__builtin_popcount``); see ``CONFIG_HAVE_BUILTIN_*`` in |
| ``nuttx/compiler.h``. |
| |
| Either **CONFIG_ARCH_STDBIT_H** or **CONFIG_LIBC_STDBIT_GENERIC** may be |
| enabled so that ``#include <stdbit.h>`` is available. |