1*8feb0f0bSmrg /* Copyright (C) 2004-2020 Free Software Foundation, Inc. 236ac495dSmrg Contributed by Apple, Inc. 336ac495dSmrg 436ac495dSmrg This file is part of GCC. 536ac495dSmrg 636ac495dSmrg GCC is free software; you can redistribute it and/or modify 736ac495dSmrg it under the terms of the GNU General Public License as published by 836ac495dSmrg the Free Software Foundation; either version 3, or (at your option) 936ac495dSmrg any later version. 1036ac495dSmrg 1136ac495dSmrg GCC is distributed in the hope that it will be useful, 1236ac495dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of 1336ac495dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1436ac495dSmrg GNU General Public License for more details. 1536ac495dSmrg 1636ac495dSmrg Under Section 7 of GPL version 3, you are granted additional 1736ac495dSmrg permissions described in the GCC Runtime Library Exception, version 1836ac495dSmrg 3.1, as published by the Free Software Foundation. 1936ac495dSmrg 2036ac495dSmrg You should have received a copy of the GNU General Public License and 2136ac495dSmrg a copy of the GCC Runtime Library Exception along with this program; 2236ac495dSmrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2336ac495dSmrg <http://www.gnu.org/licenses/>. */ 2436ac495dSmrg 2536ac495dSmrg /* 2636ac495dSmrg * ISO C Standard: 7.22 Type-generic math <tgmath.h> 2736ac495dSmrg */ 2836ac495dSmrg 2936ac495dSmrg #ifndef _TGMATH_H 3036ac495dSmrg #define _TGMATH_H 3136ac495dSmrg 3236ac495dSmrg #include <math.h> 3336ac495dSmrg 3436ac495dSmrg #ifndef __cplusplus 3536ac495dSmrg #include <complex.h> 3636ac495dSmrg 3736ac495dSmrg /* Naming convention: generic macros are defining using 3836ac495dSmrg __TGMATH_CPLX*, __TGMATH_REAL*, and __TGMATH_CPLX_ONLY. _CPLX 3936ac495dSmrg means the generic argument(s) may be real or complex, _REAL means 4036ac495dSmrg real only, _CPLX means complex only. If there is no suffix, we are 41a2dc1f3fSmrg defining a function of one argument. If the suffix is _n 42a2dc1f3fSmrg it is a function of n arguments. We only define these macros for 43a2dc1f3fSmrg values of n that are needed. */ 4436ac495dSmrg 4536ac495dSmrg #define __TGMATH_CPLX(z,R,C) \ 46a2dc1f3fSmrg __builtin_tgmath (R##f, R, R##l, C##f, C, C##l, (z)) 4736ac495dSmrg 4836ac495dSmrg #define __TGMATH_CPLX_2(z1,z2,R,C) \ 49a2dc1f3fSmrg __builtin_tgmath (R##f, R, R##l, C##f, C, C##l, (z1), (z2)) 5036ac495dSmrg 5136ac495dSmrg #define __TGMATH_REAL(x,R) \ 52a2dc1f3fSmrg __builtin_tgmath (R##f, R, R##l, (x)) 5336ac495dSmrg #define __TGMATH_REAL_2(x,y,R) \ 54a2dc1f3fSmrg __builtin_tgmath (R##f, R, R##l, (x), (y)) 5536ac495dSmrg #define __TGMATH_REAL_3(x,y,z,R) \ 56a2dc1f3fSmrg __builtin_tgmath (R##f, R, R##l, (x), (y), (z)) 5736ac495dSmrg #define __TGMATH_CPLX_ONLY(z,C) \ 58a2dc1f3fSmrg __builtin_tgmath (C##f, C, C##l, (z)) 5936ac495dSmrg 6036ac495dSmrg /* Functions defined in both <math.h> and <complex.h> (7.22p4) */ 6136ac495dSmrg #define acos(z) __TGMATH_CPLX(z, acos, cacos) 6236ac495dSmrg #define asin(z) __TGMATH_CPLX(z, asin, casin) 6336ac495dSmrg #define atan(z) __TGMATH_CPLX(z, atan, catan) 6436ac495dSmrg #define acosh(z) __TGMATH_CPLX(z, acosh, cacosh) 6536ac495dSmrg #define asinh(z) __TGMATH_CPLX(z, asinh, casinh) 6636ac495dSmrg #define atanh(z) __TGMATH_CPLX(z, atanh, catanh) 6736ac495dSmrg #define cos(z) __TGMATH_CPLX(z, cos, ccos) 6836ac495dSmrg #define sin(z) __TGMATH_CPLX(z, sin, csin) 6936ac495dSmrg #define tan(z) __TGMATH_CPLX(z, tan, ctan) 7036ac495dSmrg #define cosh(z) __TGMATH_CPLX(z, cosh, ccosh) 7136ac495dSmrg #define sinh(z) __TGMATH_CPLX(z, sinh, csinh) 7236ac495dSmrg #define tanh(z) __TGMATH_CPLX(z, tanh, ctanh) 7336ac495dSmrg #define exp(z) __TGMATH_CPLX(z, exp, cexp) 7436ac495dSmrg #define log(z) __TGMATH_CPLX(z, log, clog) 7536ac495dSmrg #define pow(z1,z2) __TGMATH_CPLX_2(z1, z2, pow, cpow) 7636ac495dSmrg #define sqrt(z) __TGMATH_CPLX(z, sqrt, csqrt) 7736ac495dSmrg #define fabs(z) __TGMATH_CPLX(z, fabs, cabs) 7836ac495dSmrg 7936ac495dSmrg /* Functions defined in <math.h> only (7.22p5) */ 8036ac495dSmrg #define atan2(x,y) __TGMATH_REAL_2(x, y, atan2) 8136ac495dSmrg #define cbrt(x) __TGMATH_REAL(x, cbrt) 8236ac495dSmrg #define ceil(x) __TGMATH_REAL(x, ceil) 8336ac495dSmrg #define copysign(x,y) __TGMATH_REAL_2(x, y, copysign) 8436ac495dSmrg #define erf(x) __TGMATH_REAL(x, erf) 8536ac495dSmrg #define erfc(x) __TGMATH_REAL(x, erfc) 8636ac495dSmrg #define exp2(x) __TGMATH_REAL(x, exp2) 8736ac495dSmrg #define expm1(x) __TGMATH_REAL(x, expm1) 8836ac495dSmrg #define fdim(x,y) __TGMATH_REAL_2(x, y, fdim) 8936ac495dSmrg #define floor(x) __TGMATH_REAL(x, floor) 9036ac495dSmrg #define fma(x,y,z) __TGMATH_REAL_3(x, y, z, fma) 9136ac495dSmrg #define fmax(x,y) __TGMATH_REAL_2(x, y, fmax) 9236ac495dSmrg #define fmin(x,y) __TGMATH_REAL_2(x, y, fmin) 9336ac495dSmrg #define fmod(x,y) __TGMATH_REAL_2(x, y, fmod) 94a2dc1f3fSmrg #define frexp(x,y) __TGMATH_REAL_2(x, y, frexp) 9536ac495dSmrg #define hypot(x,y) __TGMATH_REAL_2(x, y, hypot) 9636ac495dSmrg #define ilogb(x) __TGMATH_REAL(x, ilogb) 97a2dc1f3fSmrg #define ldexp(x,y) __TGMATH_REAL_2(x, y, ldexp) 9836ac495dSmrg #define lgamma(x) __TGMATH_REAL(x, lgamma) 9936ac495dSmrg #define llrint(x) __TGMATH_REAL(x, llrint) 10036ac495dSmrg #define llround(x) __TGMATH_REAL(x, llround) 10136ac495dSmrg #define log10(x) __TGMATH_REAL(x, log10) 10236ac495dSmrg #define log1p(x) __TGMATH_REAL(x, log1p) 10336ac495dSmrg #define log2(x) __TGMATH_REAL(x, log2) 10436ac495dSmrg #define logb(x) __TGMATH_REAL(x, logb) 10536ac495dSmrg #define lrint(x) __TGMATH_REAL(x, lrint) 10636ac495dSmrg #define lround(x) __TGMATH_REAL(x, lround) 10736ac495dSmrg #define nearbyint(x) __TGMATH_REAL(x, nearbyint) 10836ac495dSmrg #define nextafter(x,y) __TGMATH_REAL_2(x, y, nextafter) 109a2dc1f3fSmrg #define nexttoward(x,y) __TGMATH_REAL_2(x, y, nexttoward) 11036ac495dSmrg #define remainder(x,y) __TGMATH_REAL_2(x, y, remainder) 111a2dc1f3fSmrg #define remquo(x,y,z) __TGMATH_REAL_3(x, y, z, remquo) 11236ac495dSmrg #define rint(x) __TGMATH_REAL(x, rint) 11336ac495dSmrg #define round(x) __TGMATH_REAL(x, round) 114a2dc1f3fSmrg #define scalbn(x,y) __TGMATH_REAL_2(x, y, scalbn) 115a2dc1f3fSmrg #define scalbln(x,y) __TGMATH_REAL_2(x, y, scalbln) 11636ac495dSmrg #define tgamma(x) __TGMATH_REAL(x, tgamma) 11736ac495dSmrg #define trunc(x) __TGMATH_REAL(x, trunc) 11836ac495dSmrg 11936ac495dSmrg /* Functions defined in <complex.h> only (7.22p6) */ 12036ac495dSmrg #define carg(z) __TGMATH_CPLX_ONLY(z, carg) 12136ac495dSmrg #define cimag(z) __TGMATH_CPLX_ONLY(z, cimag) 12236ac495dSmrg #define conj(z) __TGMATH_CPLX_ONLY(z, conj) 12336ac495dSmrg #define cproj(z) __TGMATH_CPLX_ONLY(z, cproj) 12436ac495dSmrg #define creal(z) __TGMATH_CPLX_ONLY(z, creal) 12536ac495dSmrg 12636ac495dSmrg #endif /* __cplusplus */ 12736ac495dSmrg #endif /* _TGMATH_H */ 128