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 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