Lines Matching refs:a

33     static ossl_inline ossl_unused type safe_add_ ## type_name(type a,       \
39 if (!__builtin_add_overflow(a, b, &r)) \
42 return a < 0 ? min : max; \
46 static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \
52 if (!__builtin_add_overflow(a, b, &r)) \
55 return a + b; \
60 static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \
64 if ((a < 0) ^ (b < 0) \
65 || (a > 0 && b <= max - a) \
66 || (a < 0 && b >= min - a) \
67 || a == 0) \
68 return a + b; \
70 return a < 0 ? min : max; \
74 static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \
78 if (b > max - a) \
80 return a + b; \
89 static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \
95 if (!__builtin_sub_overflow(a, b, &r)) \
98 return a < 0 ? min : max; \
103 static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \
107 if (!((a < 0) ^ (b < 0)) \
108 || (b > 0 && a >= min + b) \
109 || (b < 0 && a <= max + b) \
111 return a - b; \
113 return a < 0 ? min : max; \
119 static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \
123 if (b > a) \
125 return a - b; \
133 static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \
139 if (!__builtin_mul_overflow(a, b, &r)) \
142 return (a < 0) ^ (b < 0) ? min : max; \
146 static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \
152 if (!__builtin_mul_overflow(a, b, &r)) \
155 return a * b; \
160 static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \
164 if (a == 0 || b == 0) \
166 if (a == 1) \
169 return a; \
170 if (a != min && b != min) { \
171 const type x = a < 0 ? -a : a; \
175 return a * b; \
178 return (a < 0) ^ (b < 0) ? min : max; \
182 static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \
186 if (a > max / b) \
188 return a * b; \
196 static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \
202 return a < 0 ? min : max; \
204 if (b == -1 && a == min) { \
208 return a / b; \
212 static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \
217 return a / b; \
226 static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \
234 if (b == -1 && a == min) { \
238 return a % b; \
242 static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \
247 return a % b; \
256 static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \
259 if (a != min) \
260 return -a; \
266 static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \
269 if (a == 0) \
270 return a; \
272 return 1 + ~a; \
279 static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \
282 if (a != min) \
283 return a < 0 ? -a : a; \
289 static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \
292 return a; \
318 static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \
328 return a == 0 || b == 0 ? 0 : max; \
330 x = safe_mul_ ## type_name(a, b, &e2); \
333 if (b > a) { \
335 b = a; \
336 a = x; \
338 q = safe_div_ ## type_name(a, c, err); \
339 r = safe_mod_ ## type_name(a, c, err); \
347 static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \
357 return a == 0 || b == 0 ? 0 : max; \
359 x = safe_mul_ ## type_name(a, b, &e2); \
362 if (b > a) { \
364 b = a; \
365 a = x; \
367 x = safe_mul_ ## type_name(a % c, b, err); \
368 y = safe_mul_ ## type_name(a / c, b, err); \
380 (type a, type b, int *errp) \
388 if (b > 0 && a > 0) { \
390 if (a < max - b) \
391 return (a + b - 1) / b; \
392 return a / b + (a % b != 0); \
396 return a == 0 ? 0 : max; \
398 if (a == 0) \
401 x = safe_mod_ ## type_name(a, b, err); \
402 return safe_add_ ## type_name(safe_div_ ## type_name(a, b, err), \