core/utils.h: add OSMO_LIKELY / OSMO_UNLIKELY macros

These macros are built on top of the __builtin_expect() function [1],
which provides the compiler with branch prediction information.

Similar macros exist in the Linux kernel: likely() / unlikely().

[1] https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

Change-Id: I0b029654ba050f079eed4a0574a3fa8019677067
This commit is contained in:
Vadim Yanitskiy 2022-02-02 01:17:45 +06:00
parent 1790f1763a
commit e59e839dd9
1 changed files with 9 additions and 0 deletions

View File

@ -38,6 +38,15 @@
/*! Copy a C-string into a sized buffer using sizeof to detect buffer's size */
#define OSMO_STRLCPY_ARRAY(array, src) osmo_strlcpy(array, src, sizeof(array))
/*! Branch prediction optimizations */
#if defined(__GNUC__)
#define OSMO_LIKELY(exp) __builtin_expect(!!(exp), 1)
#define OSMO_UNLIKELY(exp) __builtin_expect(!!(exp), 0)
#else
#define OSMO_LIKELY(exp) exp
#define OSMO_UNLIKELY(exp) exp
#endif
/*! A mapping between human-readable string and numeric value */
struct value_string {
uint32_t value; /*!< numeric value */