Lines Matching +full:max +full:- +full:by +full:- +full:define

2  * Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
11 # define OSSL_INTERNAL_SAFE_MATH_H
18 # define has(func) __has_builtin(func)
21 # define has(func) 1
27 # define has(func) 0
34 # define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ argument
44 return a < 0 ? min : max; \
47 # define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ argument
61 # define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ argument
67 || (a > 0 && b <= max - a) \
68 || (a < 0 && b >= min - a) \
72 return a < 0 ? min : max; \
75 # define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ argument
80 if (b > max - a) \
90 # define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ argument
100 return a < 0 ? min : max; \
104 # define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ argument
111 || (b < 0 && a <= max + b) \
113 return a - b; \
115 return a < 0 ? min : max; \
120 # define OSSL_SAFE_MATH_SUBU(type_name, type) \
127 return a - b; \
134 # define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ argument
144 return (a < 0) ^ (b < 0) ? min : max; \
147 # define OSSL_SAFE_MATH_MULU(type_name, type, max) \ argument
161 # define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ argument
173 const type x = a < 0 ? -a : a; \
174 const type y = b < 0 ? -b : b; \
176 if (x <= max / y) \
180 return (a < 0) ^ (b < 0) ? min : max; \
183 # define OSSL_SAFE_MATH_MULU(type_name, type, max) \ argument
188 if (b != 0 && a > max / b) \
197 # define OSSL_SAFE_MATH_DIVS(type_name, type, min, max) \ argument
204 return a < 0 ? min : max; \
206 if (b == -1 && a == min) { \
208 return max; \
213 # define OSSL_SAFE_MATH_DIVU(type_name, type, max) \ argument
221 return max; \
227 # define OSSL_SAFE_MATH_MODS(type_name, type, min, max) \ argument
236 if (b == -1 && a == min) { \
238 return max; \
243 # define OSSL_SAFE_MATH_MODU(type_name, type) \
257 # define OSSL_SAFE_MATH_NEGS(type_name, type, min) \
262 return -a; \
267 # define OSSL_SAFE_MATH_NEGU(type_name, type) \
280 # define OSSL_SAFE_MATH_ABSS(type_name, type, min) \
285 return a < 0 ? -a : a; \
290 # define OSSL_SAFE_MATH_ABSU(type_name, type) \
301 * . They begin by checking the denominator for zero and getting rid of this
319 # define OSSL_SAFE_MATH_MULDIVS(type_name, type, max) \ argument
330 return a == 0 || b == 0 ? 0 : max; \
348 # define OSSL_SAFE_MATH_MULDIVU(type_name, type, max) \ argument
359 return a == 0 || b == 0 ? 0 : max; \
377 * Which is usually (less safely) converted to (a + b - 1) / b
380 #define OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, max) \ argument
387 /* Allow errors to be ignored by callers */ \
392 if (a < max - b) \
393 return (a + b - 1) / b; \
398 return a == 0 ? 0 : max; \
409 # define OSSL_SAFE_MATH_MINS(type) ((type)1 << (sizeof(type) * 8 - 1))
410 # define OSSL_SAFE_MATH_MAXS(type) (~OSSL_SAFE_MATH_MINS(type))
411 # define OSSL_SAFE_MATH_MAXU(type) (~(type)0)
416 # define OSSL_SAFE_MATH_SIGNED(type_name, type) \
433 # define OSSL_SAFE_MATH_UNSIGNED(type_name, type) \