12#ifndef ZEPHYR_INCLUDE_SYS_MATH_EXTRAS_H_
13#error "please include <sys/math_extras.h> instead of this file"
25#ifdef PORTABLE_MISC_MATH_EXTRAS
26#define use_builtin(x) 0
28#define use_builtin(x) HAS_BUILTIN(x)
31#if use_builtin(__builtin_add_overflow)
34 return __builtin_add_overflow(a, b, result);
39 return __builtin_add_overflow(a, b, result);
44 return __builtin_add_overflow(a, b, result);
49 return __builtin_add_overflow(a, b, result);
89#if use_builtin(__builtin_mul_overflow)
92 return __builtin_mul_overflow(a, b, result);
97 return __builtin_mul_overflow(a, b, result);
102 return __builtin_mul_overflow(a, b, result);
107 return __builtin_mul_overflow(a, b, result);
116 return a != 0 && (c / a) != b;
125 return a != 0 && (c / a) != b;
134 return a != 0 && (c / a) != b;
143 return a != 0 && (c / a) != b;
187#if use_builtin(__builtin_clz)
190 return (x == 0) ? 32 : __builtin_clz(x);
197 for (b = 0; b < 32 && (x >> 31) == 0; b++) {
205#if use_builtin(__builtin_clzll)
208 return (x == 0) ? 64 : __builtin_clzll(x);
221#if use_builtin(__builtin_ctz)
224 return (x == 0) ? 32 : __builtin_ctz(x);
231 for (b = 0; b < 32 && (x & 1) == 0; b++) {
239#if use_builtin(__builtin_ctzll)
242 return (x == 0) ? 64 : __builtin_ctzll(x);
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89