/* * Copyright (C) 2017 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include "header_checks.h" static void math_h() { TYPE(float_t); TYPE(double_t); #if !defined(fpclassify) #error fpclassify #endif #if !defined(isfinite) #error isfinite #endif #if !defined(isgreater) #error isgreater #endif #if !defined(isgreaterequal) #error isgreaterequal #endif #if !defined(isinf) #error isinf #endif #if !defined(isless) #error isless #endif #if !defined(islessequal) #error islessequal #endif #if !defined(islessgreater) #error islessgreater #endif #if !defined(isnan) #error isnan #endif #if !defined(isnormal) #error isnormal #endif #if !defined(isunordered) #error isunordered #endif #if !defined(signbit) #error signbit #endif MACRO(M_E); MACRO(M_LOG2E); MACRO(M_LOG10E); MACRO(M_LN2); MACRO(M_LN10); MACRO(M_PI); MACRO(M_PI_2); MACRO(M_PI_4); MACRO(M_1_PI); MACRO(M_2_PI); MACRO(M_2_SQRTPI); MACRO(M_SQRT2); MACRO(M_SQRT1_2); MACRO(MAXFLOAT); MACRO(HUGE_VAL); MACRO(HUGE_VALF); MACRO(HUGE_VALL); MACRO(INFINITY); MACRO(NAN); MACRO(FP_INFINITE); MACRO(FP_NAN); MACRO(FP_NORMAL); MACRO(FP_SUBNORMAL); MACRO(FP_ZERO); #if defined(FP_FAST_FMA) && FP_FAST_FMA != 1 #error FP_FAST_FMA #endif #if defined(FP_FAST_FMAF) && FP_FAST_FMAF != 1 #error FP_FAST_FMAF #endif #if defined(FP_FAST_FMAL) && FP_FAST_FMAL != 1 #error FP_FAST_FMAL #endif MACRO(FP_ILOGB0); MACRO(FP_ILOGBNAN); MACRO_VALUE(MATH_ERRNO, 1); MACRO_VALUE(MATH_ERREXCEPT, 2); #if !defined(math_errhandling) #error math_errhandling #endif MACRO_TYPE(int, math_errhandling); FUNCTION(acos, double (*f)(double)); FUNCTION(acosf, float (*f)(float)); FUNCTION(acosh, double (*f)(double)); FUNCTION(acoshf, float (*f)(float)); FUNCTION(acoshl, long double (*f)(long double)); FUNCTION(acosl, long double (*f)(long double)); FUNCTION(asin, double (*f)(double)); FUNCTION(asinf, float (*f)(float)); FUNCTION(asinh, double (*f)(double)); FUNCTION(asinhf, float (*f)(float)); FUNCTION(asinhl, long double (*f)(long double)); FUNCTION(asinl, long double (*f)(long double)); FUNCTION(atan, double (*f)(double)); FUNCTION(atan2, double (*f)(double, double)); FUNCTION(atan2f, float (*f)(float, float)); FUNCTION(atan2l, long double (*f)(long double, long double)); FUNCTION(atanf, float (*f)(float)); FUNCTION(atanh, double (*f)(double)); FUNCTION(atanhf, float (*f)(float)); FUNCTION(atanhl, long double (*f)(long double)); FUNCTION(atanl, long double (*f)(long double)); FUNCTION(cbrt, double (*f)(double)); FUNCTION(cbrtf, float (*f)(float)); FUNCTION(cbrtl, long double (*f)(long double)); FUNCTION(ceil, double (*f)(double)); FUNCTION(ceilf, float (*f)(float)); FUNCTION(ceill, long double (*f)(long double)); FUNCTION(copysign, double (*f)(double, double)); FUNCTION(copysignf, float (*f)(float, float)); FUNCTION(copysignl, long double (*f)(long double, long double)); FUNCTION(cos, double (*f)(double)); FUNCTION(cosf, float (*f)(float)); FUNCTION(cosh, double (*f)(double)); FUNCTION(coshf, float (*f)(float)); FUNCTION(coshl, long double (*f)(long double)); FUNCTION(cosl, long double (*f)(long double)); FUNCTION(erf, double (*f)(double)); FUNCTION(erfc, double (*f)(double)); FUNCTION(erfcf, float (*f)(float)); FUNCTION(erfcl, long double (*f)(long double)); FUNCTION(erff, float (*f)(float)); FUNCTION(erfl, long double (*f)(long double)); FUNCTION(exp, double (*f)(double)); FUNCTION(exp2, double (*f)(double)); FUNCTION(exp2f, float (*f)(float)); FUNCTION(exp2l, long double (*f)(long double)); FUNCTION(expf, float (*f)(float)); FUNCTION(expl, long double (*f)(long double)); FUNCTION(expm1, double (*f)(double)); FUNCTION(expm1f, float (*f)(float)); FUNCTION(expm1l, long double (*f)(long double)); FUNCTION(fabs, double (*f)(double)); FUNCTION(fabsf, float (*f)(float)); FUNCTION(fabsl, long double (*f)(long double)); FUNCTION(fdim, double (*f)(double, double)); FUNCTION(fdimf, float (*f)(float, float)); FUNCTION(fdiml, long double (*f)(long double, long double)); FUNCTION(floor, double (*f)(double)); FUNCTION(floorf, float (*f)(float)); FUNCTION(floorl, long double (*f)(long double)); FUNCTION(fma, double (*f)(double, double, double)); FUNCTION(fmaf, float (*f)(float, float, float)); FUNCTION(fmal, long double (*f)(long double, long double, long double)); FUNCTION(fmax, double (*f)(double, double)); FUNCTION(fmaxf, float (*f)(float, float)); FUNCTION(fmaxl, long double (*f)(long double, long double)); FUNCTION(fmin, double (*f)(double, double)); FUNCTION(fminf, float (*f)(float, float)); FUNCTION(fminl, long double (*f)(long double, long double)); FUNCTION(fmod, double (*f)(double, double)); FUNCTION(fmodf, float (*f)(float, float)); FUNCTION(fmodl, long double (*f)(long double, long double)); FUNCTION(frexp, double (*f)(double, int*)); FUNCTION(frexpf, float (*f)(float, int*)); FUNCTION(frexpl, long double (*f)(long double, int*)); FUNCTION(hypot, double (*f)(double, double)); FUNCTION(hypotf, float (*f)(float, float)); FUNCTION(hypotl, long double (*f)(long double, long double)); FUNCTION(ilogb, int (*f)(double)); FUNCTION(ilogbf, int (*f)(float)); FUNCTION(ilogbl, int (*f)(long double)); FUNCTION(j0, double (*f)(double)); FUNCTION(j1, double (*f)(double)); FUNCTION(jn, double (*f)(int, double)); FUNCTION(ldexp, double (*f)(double, int)); FUNCTION(ldexpf, float (*f)(float, int)); FUNCTION(ldexpl, long double (*f)(long double, int)); FUNCTION(lgamma, double (*f)(double)); FUNCTION(lgammaf, float (*f)(float)); FUNCTION(lgammal, long double (*f)(long double)); FUNCTION(llrint, long long (*f)(double)); FUNCTION(llrintf, long long (*f)(float)); FUNCTION(llrintl, long long (*f)(long double)); FUNCTION(llround, long long (*f)(double)); FUNCTION(llroundf, long long (*f)(float)); FUNCTION(llroundl, long long (*f)(long double)); FUNCTION(log, double (*f)(double)); FUNCTION(log10, double (*f)(double)); FUNCTION(log10f, float (*f)(float)); FUNCTION(log10l, long double (*f)(long double)); FUNCTION(log1p, double (*f)(double)); FUNCTION(log1pf, float (*f)(float)); FUNCTION(log1pl, long double (*f)(long double)); FUNCTION(log2, double (*f)(double)); FUNCTION(log2f, float (*f)(float)); FUNCTION(log2l, long double (*f)(long double)); FUNCTION(logb, double (*f)(double)); FUNCTION(logbf, float (*f)(float)); FUNCTION(logbl, long double (*f)(long double)); FUNCTION(logf, float (*f)(float)); FUNCTION(logl, long double (*f)(long double)); FUNCTION(lrint, long (*f)(double)); FUNCTION(lrintf, long (*f)(float)); FUNCTION(lrintl, long (*f)(long double)); FUNCTION(lround, long (*f)(double)); FUNCTION(lroundf, long (*f)(float)); FUNCTION(lroundl, long (*f)(long double)); FUNCTION(modf, double (*f)(double, double*)); FUNCTION(modff, float (*f)(float, float*)); FUNCTION(modfl, long double (*f)(long double, long double*)); FUNCTION(nan, double (*f)(const char*)); FUNCTION(nanf, float (*f)(const char*)); FUNCTION(nanl, long double (*f)(const char*)); FUNCTION(nearbyint, double (*f)(double)); FUNCTION(nearbyintf, float (*f)(float)); FUNCTION(nearbyintl, long double (*f)(long double)); FUNCTION(nextafter, double (*f)(double, double)); FUNCTION(nextafterf, float (*f)(float, float)); FUNCTION(nextafterl, long double (*f)(long double, long double)); FUNCTION(nexttoward, double (*f)(double, long double)); FUNCTION(nexttowardf, float (*f)(float, long double)); FUNCTION(nexttowardl, long double (*f)(long double, long double)); FUNCTION(pow, double (*f)(double, double)); FUNCTION(powf, float (*f)(float, float)); FUNCTION(powl, long double (*f)(long double, long double)); FUNCTION(remainder, double (*f)(double, double)); FUNCTION(remainderf, float (*f)(float, float)); FUNCTION(remainderl, long double (*f)(long double, long double)); FUNCTION(remquo, double (*f)(double, double, int*)); FUNCTION(remquof, float (*f)(float, float, int*)); FUNCTION(remquol, long double (*f)(long double, long double, int*)); FUNCTION(rint, double (*f)(double)); FUNCTION(rintf, float (*f)(float)); FUNCTION(rintl, long double (*f)(long double)); FUNCTION(round, double (*f)(double)); FUNCTION(roundf, float (*f)(float)); FUNCTION(roundl, long double (*f)(long double)); FUNCTION(scalbln, double (*f)(double, long)); FUNCTION(scalblnf, float (*f)(float, long)); FUNCTION(scalblnl, long double (*f)(long double, long)); FUNCTION(scalbn, double (*f)(double, int)); FUNCTION(scalbnf, float (*f)(float, int)); FUNCTION(scalbnl, long double (*f)(long double, int)); FUNCTION(sin, double (*f)(double)); FUNCTION(sinf, float (*f)(float)); FUNCTION(sinh, double (*f)(double)); FUNCTION(sinhf, float (*f)(float)); FUNCTION(sinhl, long double (*f)(long double)); FUNCTION(sinl, long double (*f)(long double)); FUNCTION(sqrt, double (*f)(double)); FUNCTION(sqrtf, float (*f)(float)); FUNCTION(sqrtl, long double (*f)(long double)); FUNCTION(tan, double (*f)(double)); FUNCTION(tanf, float (*f)(float)); FUNCTION(tanh, double (*f)(double)); FUNCTION(tanhf, float (*f)(float)); FUNCTION(tanhl, long double (*f)(long double)); FUNCTION(tanl, long double (*f)(long double)); FUNCTION(tgamma, double (*f)(double)); FUNCTION(tgammaf, float (*f)(float)); FUNCTION(tgammal, long double (*f)(long double)); FUNCTION(trunc, double (*f)(double)); FUNCTION(truncf, float (*f)(float)); FUNCTION(truncl, long double (*f)(long double)); FUNCTION(y0, double (*f)(double)); FUNCTION(y1, double (*f)(double)); FUNCTION(yn, double (*f)(int, double)); int s = signgam; }