1 /*
2 * Copyright (C) 2017 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 #include <math.h>
30
31 #include "header_checks.h"
32
math_h()33 static void math_h() {
34 TYPE(float_t);
35 TYPE(double_t);
36
37 #if !defined(fpclassify)
38 #error fpclassify
39 #endif
40 #if !defined(isfinite)
41 #error isfinite
42 #endif
43 #if !defined(isgreater)
44 #error isgreater
45 #endif
46 #if !defined(isgreaterequal)
47 #error isgreaterequal
48 #endif
49 #if !defined(isinf)
50 #error isinf
51 #endif
52 #if !defined(isless)
53 #error isless
54 #endif
55 #if !defined(islessequal)
56 #error islessequal
57 #endif
58 #if !defined(islessgreater)
59 #error islessgreater
60 #endif
61 #if !defined(isnan)
62 #error isnan
63 #endif
64 #if !defined(isnormal)
65 #error isnormal
66 #endif
67 #if !defined(isunordered)
68 #error isunordered
69 #endif
70 #if !defined(signbit)
71 #error signbit
72 #endif
73
74 MACRO(M_E);
75 MACRO(M_LOG2E);
76 MACRO(M_LOG10E);
77 MACRO(M_LN2);
78 MACRO(M_LN10);
79 MACRO(M_PI);
80 MACRO(M_PI_2);
81 MACRO(M_PI_4);
82 MACRO(M_1_PI);
83 MACRO(M_2_PI);
84 MACRO(M_2_SQRTPI);
85 MACRO(M_SQRT2);
86 MACRO(M_SQRT1_2);
87
88 MACRO(MAXFLOAT);
89
90 MACRO(HUGE_VAL);
91 MACRO(HUGE_VALF);
92 MACRO(HUGE_VALL);
93 MACRO(INFINITY);
94 MACRO(NAN);
95
96 MACRO(FP_INFINITE);
97 MACRO(FP_NAN);
98 MACRO(FP_NORMAL);
99 MACRO(FP_SUBNORMAL);
100 MACRO(FP_ZERO);
101
102 #if defined(FP_FAST_FMA) && FP_FAST_FMA != 1
103 #error FP_FAST_FMA
104 #endif
105 #if defined(FP_FAST_FMAF) && FP_FAST_FMAF != 1
106 #error FP_FAST_FMAF
107 #endif
108 #if defined(FP_FAST_FMAL) && FP_FAST_FMAL != 1
109 #error FP_FAST_FMAL
110 #endif
111
112 MACRO(FP_ILOGB0);
113 MACRO(FP_ILOGBNAN);
114
115 MACRO_VALUE(MATH_ERRNO, 1);
116 MACRO_VALUE(MATH_ERREXCEPT, 2);
117
118 #if !defined(math_errhandling)
119 #error math_errhandling
120 #endif
121 MACRO_TYPE(int, math_errhandling);
122
123 FUNCTION(acos, double (*f)(double));
124 FUNCTION(acosf, float (*f)(float));
125 FUNCTION(acosh, double (*f)(double));
126 FUNCTION(acoshf, float (*f)(float));
127 FUNCTION(acoshl, long double (*f)(long double));
128 FUNCTION(acosl, long double (*f)(long double));
129
130 FUNCTION(asin, double (*f)(double));
131 FUNCTION(asinf, float (*f)(float));
132 FUNCTION(asinh, double (*f)(double));
133 FUNCTION(asinhf, float (*f)(float));
134 FUNCTION(asinhl, long double (*f)(long double));
135 FUNCTION(asinl, long double (*f)(long double));
136
137 FUNCTION(atan, double (*f)(double));
138 FUNCTION(atan2, double (*f)(double, double));
139 FUNCTION(atan2f, float (*f)(float, float));
140 FUNCTION(atan2l, long double (*f)(long double, long double));
141 FUNCTION(atanf, float (*f)(float));
142 FUNCTION(atanh, double (*f)(double));
143 FUNCTION(atanhf, float (*f)(float));
144 FUNCTION(atanhl, long double (*f)(long double));
145 FUNCTION(atanl, long double (*f)(long double));
146
147 FUNCTION(cbrt, double (*f)(double));
148 FUNCTION(cbrtf, float (*f)(float));
149 FUNCTION(cbrtl, long double (*f)(long double));
150
151 FUNCTION(ceil, double (*f)(double));
152 FUNCTION(ceilf, float (*f)(float));
153 FUNCTION(ceill, long double (*f)(long double));
154
155 FUNCTION(copysign, double (*f)(double, double));
156 FUNCTION(copysignf, float (*f)(float, float));
157 FUNCTION(copysignl, long double (*f)(long double, long double));
158
159 FUNCTION(cos, double (*f)(double));
160 FUNCTION(cosf, float (*f)(float));
161 FUNCTION(cosh, double (*f)(double));
162 FUNCTION(coshf, float (*f)(float));
163 FUNCTION(coshl, long double (*f)(long double));
164 FUNCTION(cosl, long double (*f)(long double));
165
166 FUNCTION(erf, double (*f)(double));
167 FUNCTION(erfc, double (*f)(double));
168 FUNCTION(erfcf, float (*f)(float));
169 FUNCTION(erfcl, long double (*f)(long double));
170 FUNCTION(erff, float (*f)(float));
171 FUNCTION(erfl, long double (*f)(long double));
172
173 FUNCTION(exp, double (*f)(double));
174 FUNCTION(exp2, double (*f)(double));
175 FUNCTION(exp2f, float (*f)(float));
176 FUNCTION(exp2l, long double (*f)(long double));
177 FUNCTION(expf, float (*f)(float));
178 FUNCTION(expl, long double (*f)(long double));
179 FUNCTION(expm1, double (*f)(double));
180 FUNCTION(expm1f, float (*f)(float));
181 FUNCTION(expm1l, long double (*f)(long double));
182
183 FUNCTION(fabs, double (*f)(double));
184 FUNCTION(fabsf, float (*f)(float));
185 FUNCTION(fabsl, long double (*f)(long double));
186
187 FUNCTION(fdim, double (*f)(double, double));
188 FUNCTION(fdimf, float (*f)(float, float));
189 FUNCTION(fdiml, long double (*f)(long double, long double));
190
191 FUNCTION(floor, double (*f)(double));
192 FUNCTION(floorf, float (*f)(float));
193 FUNCTION(floorl, long double (*f)(long double));
194
195 FUNCTION(fma, double (*f)(double, double, double));
196 FUNCTION(fmaf, float (*f)(float, float, float));
197 FUNCTION(fmal, long double (*f)(long double, long double, long double));
198
199 FUNCTION(fmax, double (*f)(double, double));
200 FUNCTION(fmaxf, float (*f)(float, float));
201 FUNCTION(fmaxl, long double (*f)(long double, long double));
202
203 FUNCTION(fmin, double (*f)(double, double));
204 FUNCTION(fminf, float (*f)(float, float));
205 FUNCTION(fminl, long double (*f)(long double, long double));
206
207 FUNCTION(fmod, double (*f)(double, double));
208 FUNCTION(fmodf, float (*f)(float, float));
209 FUNCTION(fmodl, long double (*f)(long double, long double));
210
211 FUNCTION(frexp, double (*f)(double, int*));
212 FUNCTION(frexpf, float (*f)(float, int*));
213 FUNCTION(frexpl, long double (*f)(long double, int*));
214
215 FUNCTION(hypot, double (*f)(double, double));
216 FUNCTION(hypotf, float (*f)(float, float));
217 FUNCTION(hypotl, long double (*f)(long double, long double));
218
219 FUNCTION(ilogb, int (*f)(double));
220 FUNCTION(ilogbf, int (*f)(float));
221 FUNCTION(ilogbl, int (*f)(long double));
222
223 FUNCTION(j0, double (*f)(double));
224 FUNCTION(j1, double (*f)(double));
225 FUNCTION(jn, double (*f)(int, double));
226
227 FUNCTION(ldexp, double (*f)(double, int));
228 FUNCTION(ldexpf, float (*f)(float, int));
229 FUNCTION(ldexpl, long double (*f)(long double, int));
230
231 FUNCTION(lgamma, double (*f)(double));
232 FUNCTION(lgammaf, float (*f)(float));
233 FUNCTION(lgammal, long double (*f)(long double));
234
235 FUNCTION(llrint, long long (*f)(double));
236 FUNCTION(llrintf, long long (*f)(float));
237 FUNCTION(llrintl, long long (*f)(long double));
238
239 FUNCTION(llround, long long (*f)(double));
240 FUNCTION(llroundf, long long (*f)(float));
241 FUNCTION(llroundl, long long (*f)(long double));
242
243 FUNCTION(log, double (*f)(double));
244 FUNCTION(log10, double (*f)(double));
245 FUNCTION(log10f, float (*f)(float));
246 FUNCTION(log10l, long double (*f)(long double));
247 FUNCTION(log1p, double (*f)(double));
248 FUNCTION(log1pf, float (*f)(float));
249 FUNCTION(log1pl, long double (*f)(long double));
250 FUNCTION(log2, double (*f)(double));
251 FUNCTION(log2f, float (*f)(float));
252 FUNCTION(log2l, long double (*f)(long double));
253 FUNCTION(logb, double (*f)(double));
254 FUNCTION(logbf, float (*f)(float));
255 FUNCTION(logbl, long double (*f)(long double));
256 FUNCTION(logf, float (*f)(float));
257 FUNCTION(logl, long double (*f)(long double));
258
259 FUNCTION(lrint, long (*f)(double));
260 FUNCTION(lrintf, long (*f)(float));
261 FUNCTION(lrintl, long (*f)(long double));
262
263 FUNCTION(lround, long (*f)(double));
264 FUNCTION(lroundf, long (*f)(float));
265 FUNCTION(lroundl, long (*f)(long double));
266
267 FUNCTION(modf, double (*f)(double, double*));
268 FUNCTION(modff, float (*f)(float, float*));
269 FUNCTION(modfl, long double (*f)(long double, long double*));
270
271 FUNCTION(nan, double (*f)(const char*));
272 FUNCTION(nanf, float (*f)(const char*));
273 FUNCTION(nanl, long double (*f)(const char*));
274
275 FUNCTION(nearbyint, double (*f)(double));
276 FUNCTION(nearbyintf, float (*f)(float));
277 FUNCTION(nearbyintl, long double (*f)(long double));
278
279 FUNCTION(nextafter, double (*f)(double, double));
280 FUNCTION(nextafterf, float (*f)(float, float));
281 FUNCTION(nextafterl, long double (*f)(long double, long double));
282
283 FUNCTION(nexttoward, double (*f)(double, long double));
284 FUNCTION(nexttowardf, float (*f)(float, long double));
285 FUNCTION(nexttowardl, long double (*f)(long double, long double));
286
287 FUNCTION(pow, double (*f)(double, double));
288 FUNCTION(powf, float (*f)(float, float));
289 FUNCTION(powl, long double (*f)(long double, long double));
290
291 FUNCTION(remainder, double (*f)(double, double));
292 FUNCTION(remainderf, float (*f)(float, float));
293 FUNCTION(remainderl, long double (*f)(long double, long double));
294
295 FUNCTION(remquo, double (*f)(double, double, int*));
296 FUNCTION(remquof, float (*f)(float, float, int*));
297 FUNCTION(remquol, long double (*f)(long double, long double, int*));
298
299 FUNCTION(rint, double (*f)(double));
300 FUNCTION(rintf, float (*f)(float));
301 FUNCTION(rintl, long double (*f)(long double));
302
303 FUNCTION(round, double (*f)(double));
304 FUNCTION(roundf, float (*f)(float));
305 FUNCTION(roundl, long double (*f)(long double));
306
307 FUNCTION(scalbln, double (*f)(double, long));
308 FUNCTION(scalblnf, float (*f)(float, long));
309 FUNCTION(scalblnl, long double (*f)(long double, long));
310
311 FUNCTION(scalbn, double (*f)(double, int));
312 FUNCTION(scalbnf, float (*f)(float, int));
313 FUNCTION(scalbnl, long double (*f)(long double, int));
314
315 FUNCTION(sin, double (*f)(double));
316 FUNCTION(sinf, float (*f)(float));
317 FUNCTION(sinh, double (*f)(double));
318 FUNCTION(sinhf, float (*f)(float));
319 FUNCTION(sinhl, long double (*f)(long double));
320 FUNCTION(sinl, long double (*f)(long double));
321
322 FUNCTION(sqrt, double (*f)(double));
323 FUNCTION(sqrtf, float (*f)(float));
324 FUNCTION(sqrtl, long double (*f)(long double));
325
326 FUNCTION(tan, double (*f)(double));
327 FUNCTION(tanf, float (*f)(float));
328 FUNCTION(tanh, double (*f)(double));
329 FUNCTION(tanhf, float (*f)(float));
330 FUNCTION(tanhl, long double (*f)(long double));
331 FUNCTION(tanl, long double (*f)(long double));
332
333 FUNCTION(tgamma, double (*f)(double));
334 FUNCTION(tgammaf, float (*f)(float));
335 FUNCTION(tgammal, long double (*f)(long double));
336
337 FUNCTION(trunc, double (*f)(double));
338 FUNCTION(truncf, float (*f)(float));
339 FUNCTION(truncl, long double (*f)(long double));
340
341 FUNCTION(y0, double (*f)(double));
342 FUNCTION(y1, double (*f)(double));
343 FUNCTION(yn, double (*f)(int, double));
344
345 int s = signgam;
346 }
347