X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3903760236c30e3b5ace7a4eefac3a269d68957c..a39ff7e25e19b3a8c3020042a3872ca9ec9659f1:/libkern/os/overflow.h diff --git a/libkern/os/overflow.h b/libkern/os/overflow.h index 8d0fd9949..05ddbef39 100644 --- a/libkern/os/overflow.h +++ b/libkern/os/overflow.h @@ -131,6 +131,15 @@ __os_warn_unused(__const bool x) _s | _t; \ })) +/* os_mul3_overflow(a, b, c) -> (a * b * c) */ +#define os_mul3_overflow(a, b, c, res) __os_warn_unused(__extension__({ \ + __typeof(*(res)) _tmp; \ + bool _s, _t; \ + _s = os_mul_overflow((a), (b), &_tmp); \ + _t = os_mul_overflow((c), _tmp, (res)); \ + _s | _t; \ +})) + /* os_add_and_mul_overflow(a, b, x) -> (a + b)*x */ #define os_add_and_mul_overflow(a, b, x, res) __os_warn_unused(__extension__({ \ __typeof(*(res)) _tmp; \ @@ -149,4 +158,6 @@ __os_warn_unused(__const bool x) _s | _t; \ })) +#define os_convert_overflow(a, res) os_add_overflow((a), 0, (res)) + #endif /* _OS_OVERFLOW_H */