Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
math_extras.h File Reference

Extra arithmetic and bit manipulation functions. More...

#include <zephyr/types.h>
#include <stdbool.h>
#include <stddef.h>
#include <sys/math_extras_impl.h>

Go to the source code of this file.

Functions

Unsigned integer addition with overflow detection.

These functions compute a + b and store the result in *result, returning true if the operation overflowed.

static bool u16_add_overflow (uint16_t a, uint16_t b, uint16_t *result)
 
static bool u32_add_overflow (uint32_t a, uint32_t b, uint32_t *result)
 
static bool u64_add_overflow (uint64_t a, uint64_t b, uint64_t *result)
 
static bool size_add_overflow (size_t a, size_t b, size_t *result)
 
Unsigned integer multiplication with overflow detection.

These functions compute a * b and store the result in *result, returning true if the operation overflowed.

static bool u16_mul_overflow (uint16_t a, uint16_t b, uint16_t *result)
 
static bool u32_mul_overflow (uint32_t a, uint32_t b, uint32_t *result)
 
static bool u64_mul_overflow (uint64_t a, uint64_t b, uint64_t *result)
 
static bool size_mul_overflow (size_t a, size_t b, size_t *result)
 
Count leading zeros.

Count the number of leading zero bits in the bitwise representation of x. When x = 0, this is the size of x in bits.

static int u32_count_leading_zeros (uint32_t x)
 
static int u64_count_leading_zeros (uint64_t x)
 
Count trailing zeros.

Count the number of trailing zero bits in the bitwise representation of x. When x = 0, this is the size of x in bits.

static int u32_count_trailing_zeros (uint32_t x)
 
static int u64_count_trailing_zeros (uint64_t x)
 

Detailed Description

Extra arithmetic and bit manipulation functions.

This header file provides portable wrapper functions for a number of arithmetic and bit-counting functions that are often provided by compiler builtins. If the compiler does not have an appropriate builtin, a portable C implementation is used instead.

Function Documentation

◆ size_add_overflow()

static bool size_add_overflow ( size_t  a,
size_t  b,
size_t *  result 
)
static

◆ size_mul_overflow()

static bool size_mul_overflow ( size_t  a,
size_t  b,
size_t *  result 
)
static

◆ u16_add_overflow()

static bool u16_add_overflow ( uint16_t  a,
uint16_t  b,
uint16_t result 
)
static

◆ u16_mul_overflow()

static bool u16_mul_overflow ( uint16_t  a,
uint16_t  b,
uint16_t result 
)
static

◆ u32_add_overflow()

static bool u32_add_overflow ( uint32_t  a,
uint32_t  b,
uint32_t result 
)
static

◆ u32_count_leading_zeros()

static int u32_count_leading_zeros ( uint32_t  x)
static

◆ u32_count_trailing_zeros()

static int u32_count_trailing_zeros ( uint32_t  x)
static

◆ u32_mul_overflow()

static bool u32_mul_overflow ( uint32_t  a,
uint32_t  b,
uint32_t result 
)
static

◆ u64_add_overflow()

static bool u64_add_overflow ( uint64_t  a,
uint64_t  b,
uint64_t result 
)
static

◆ u64_count_leading_zeros()

static int u64_count_leading_zeros ( uint64_t  x)
static

◆ u64_count_trailing_zeros()

static int u64_count_trailing_zeros ( uint64_t  x)
static

◆ u64_mul_overflow()

static bool u64_mul_overflow ( uint64_t  a,
uint64_t  b,
uint64_t result 
)
static