1*c9945492SAndroid Build Coastguard Worker #ifndef _TGMATH_H 2*c9945492SAndroid Build Coastguard Worker #define _TGMATH_H 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker /* 5*c9945492SAndroid Build Coastguard Worker the return types are only correct with gcc (__GNUC__) 6*c9945492SAndroid Build Coastguard Worker otherwise they are long double or long double complex 7*c9945492SAndroid Build Coastguard Worker 8*c9945492SAndroid Build Coastguard Worker the long double version of a function is never chosen when 9*c9945492SAndroid Build Coastguard Worker sizeof(double) == sizeof(long double) 10*c9945492SAndroid Build Coastguard Worker (but the return type is set correctly with gcc) 11*c9945492SAndroid Build Coastguard Worker */ 12*c9945492SAndroid Build Coastguard Worker 13*c9945492SAndroid Build Coastguard Worker #include <math.h> 14*c9945492SAndroid Build Coastguard Worker #include <complex.h> 15*c9945492SAndroid Build Coastguard Worker 16*c9945492SAndroid Build Coastguard Worker #define __IS_FP(x) (sizeof((x)+1ULL) == sizeof((x)+1.0f)) 17*c9945492SAndroid Build Coastguard Worker #define __IS_CX(x) (__IS_FP(x) && sizeof(x) == sizeof((x)+I)) 18*c9945492SAndroid Build Coastguard Worker #define __IS_REAL(x) (__IS_FP(x) && 2*sizeof(x) == sizeof((x)+I)) 19*c9945492SAndroid Build Coastguard Worker 20*c9945492SAndroid Build Coastguard Worker #define __FLT(x) (__IS_REAL(x) && sizeof(x) == sizeof(float)) 21*c9945492SAndroid Build Coastguard Worker #define __LDBL(x) (__IS_REAL(x) && sizeof(x) == sizeof(long double) && sizeof(long double) != sizeof(double)) 22*c9945492SAndroid Build Coastguard Worker 23*c9945492SAndroid Build Coastguard Worker #define __FLTCX(x) (__IS_CX(x) && sizeof(x) == sizeof(float complex)) 24*c9945492SAndroid Build Coastguard Worker #define __DBLCX(x) (__IS_CX(x) && sizeof(x) == sizeof(double complex)) 25*c9945492SAndroid Build Coastguard Worker #define __LDBLCX(x) (__IS_CX(x) && sizeof(x) == sizeof(long double complex) && sizeof(long double) != sizeof(double)) 26*c9945492SAndroid Build Coastguard Worker 27*c9945492SAndroid Build Coastguard Worker /* return type */ 28*c9945492SAndroid Build Coastguard Worker 29*c9945492SAndroid Build Coastguard Worker #ifdef __GNUC__ 30*c9945492SAndroid Build Coastguard Worker /* 31*c9945492SAndroid Build Coastguard Worker the result must be casted to the right type 32*c9945492SAndroid Build Coastguard Worker (otherwise the result type is determined by the conversion 33*c9945492SAndroid Build Coastguard Worker rules applied to all the function return types so it is long 34*c9945492SAndroid Build Coastguard Worker double or long double complex except for integral functions) 35*c9945492SAndroid Build Coastguard Worker 36*c9945492SAndroid Build Coastguard Worker this cannot be done in c99, so the typeof gcc extension is 37*c9945492SAndroid Build Coastguard Worker used and that the type of ?: depends on wether an operand is 38*c9945492SAndroid Build Coastguard Worker a null pointer constant or not 39*c9945492SAndroid Build Coastguard Worker (in c11 _Generic can be used) 40*c9945492SAndroid Build Coastguard Worker 41*c9945492SAndroid Build Coastguard Worker the c arguments below must be integer constant expressions 42*c9945492SAndroid Build Coastguard Worker so they can be in null pointer constants 43*c9945492SAndroid Build Coastguard Worker (__IS_FP above was carefully chosen this way) 44*c9945492SAndroid Build Coastguard Worker */ 45*c9945492SAndroid Build Coastguard Worker /* if c then t else void */ 46*c9945492SAndroid Build Coastguard Worker #define __type1(c,t) __typeof__(*(0?(t*)0:(void*)!(c))) 47*c9945492SAndroid Build Coastguard Worker /* if c then t1 else t2 */ 48*c9945492SAndroid Build Coastguard Worker #define __type2(c,t1,t2) __typeof__(*(0?(__type1(c,t1)*)0:(__type1(!(c),t2)*)0)) 49*c9945492SAndroid Build Coastguard Worker /* cast to double when x is integral, otherwise use typeof(x) */ 50*c9945492SAndroid Build Coastguard Worker #define __RETCAST(x) ( \ 51*c9945492SAndroid Build Coastguard Worker __type2(__IS_FP(x), __typeof__(x), double)) 52*c9945492SAndroid Build Coastguard Worker /* 2 args case, should work for complex types (cpow) */ 53*c9945492SAndroid Build Coastguard Worker #define __RETCAST_2(x, y) ( \ 54*c9945492SAndroid Build Coastguard Worker __type2(__IS_FP(x) && __IS_FP(y), \ 55*c9945492SAndroid Build Coastguard Worker __typeof__((x)+(y)), \ 56*c9945492SAndroid Build Coastguard Worker __typeof__((x)+(y)+1.0))) 57*c9945492SAndroid Build Coastguard Worker /* 3 args case (fma only) */ 58*c9945492SAndroid Build Coastguard Worker #define __RETCAST_3(x, y, z) ( \ 59*c9945492SAndroid Build Coastguard Worker __type2(__IS_FP(x) && __IS_FP(y) && __IS_FP(z), \ 60*c9945492SAndroid Build Coastguard Worker __typeof__((x)+(y)+(z)), \ 61*c9945492SAndroid Build Coastguard Worker __typeof__((x)+(y)+(z)+1.0))) 62*c9945492SAndroid Build Coastguard Worker /* drop complex from the type of x */ 63*c9945492SAndroid Build Coastguard Worker /* TODO: wrong when sizeof(long double)==sizeof(double) */ 64*c9945492SAndroid Build Coastguard Worker #define __RETCAST_REAL(x) ( \ 65*c9945492SAndroid Build Coastguard Worker __type2(__IS_FP(x) && sizeof((x)+I) == sizeof(float complex), float, \ 66*c9945492SAndroid Build Coastguard Worker __type2(sizeof((x)+1.0+I) == sizeof(double complex), double, \ 67*c9945492SAndroid Build Coastguard Worker long double))) 68*c9945492SAndroid Build Coastguard Worker /* add complex to the type of x */ 69*c9945492SAndroid Build Coastguard Worker #define __RETCAST_CX(x) (__typeof__(__RETCAST(x)0+I)) 70*c9945492SAndroid Build Coastguard Worker #else 71*c9945492SAndroid Build Coastguard Worker #define __RETCAST(x) 72*c9945492SAndroid Build Coastguard Worker #define __RETCAST_2(x, y) 73*c9945492SAndroid Build Coastguard Worker #define __RETCAST_3(x, y, z) 74*c9945492SAndroid Build Coastguard Worker #define __RETCAST_REAL(x) 75*c9945492SAndroid Build Coastguard Worker #define __RETCAST_CX(x) 76*c9945492SAndroid Build Coastguard Worker #endif 77*c9945492SAndroid Build Coastguard Worker 78*c9945492SAndroid Build Coastguard Worker /* function selection */ 79*c9945492SAndroid Build Coastguard Worker 80*c9945492SAndroid Build Coastguard Worker #define __tg_real_nocast(fun, x) ( \ 81*c9945492SAndroid Build Coastguard Worker __FLT(x) ? fun ## f (x) : \ 82*c9945492SAndroid Build Coastguard Worker __LDBL(x) ? fun ## l (x) : \ 83*c9945492SAndroid Build Coastguard Worker fun(x) ) 84*c9945492SAndroid Build Coastguard Worker 85*c9945492SAndroid Build Coastguard Worker #define __tg_real(fun, x) (__RETCAST(x)__tg_real_nocast(fun, x)) 86*c9945492SAndroid Build Coastguard Worker 87*c9945492SAndroid Build Coastguard Worker #define __tg_real_2_1(fun, x, y) (__RETCAST(x)( \ 88*c9945492SAndroid Build Coastguard Worker __FLT(x) ? fun ## f (x, y) : \ 89*c9945492SAndroid Build Coastguard Worker __LDBL(x) ? fun ## l (x, y) : \ 90*c9945492SAndroid Build Coastguard Worker fun(x, y) )) 91*c9945492SAndroid Build Coastguard Worker 92*c9945492SAndroid Build Coastguard Worker #define __tg_real_2(fun, x, y) (__RETCAST_2(x, y)( \ 93*c9945492SAndroid Build Coastguard Worker __FLT(x) && __FLT(y) ? fun ## f (x, y) : \ 94*c9945492SAndroid Build Coastguard Worker __LDBL((x)+(y)) ? fun ## l (x, y) : \ 95*c9945492SAndroid Build Coastguard Worker fun(x, y) )) 96*c9945492SAndroid Build Coastguard Worker 97*c9945492SAndroid Build Coastguard Worker #define __tg_complex(fun, x) (__RETCAST_CX(x)( \ 98*c9945492SAndroid Build Coastguard Worker __FLTCX((x)+I) && __IS_FP(x) ? fun ## f (x) : \ 99*c9945492SAndroid Build Coastguard Worker __LDBLCX((x)+I) ? fun ## l (x) : \ 100*c9945492SAndroid Build Coastguard Worker fun(x) )) 101*c9945492SAndroid Build Coastguard Worker 102*c9945492SAndroid Build Coastguard Worker #define __tg_complex_retreal(fun, x) (__RETCAST_REAL(x)( \ 103*c9945492SAndroid Build Coastguard Worker __FLTCX((x)+I) && __IS_FP(x) ? fun ## f (x) : \ 104*c9945492SAndroid Build Coastguard Worker __LDBLCX((x)+I) ? fun ## l (x) : \ 105*c9945492SAndroid Build Coastguard Worker fun(x) )) 106*c9945492SAndroid Build Coastguard Worker 107*c9945492SAndroid Build Coastguard Worker #define __tg_real_complex(fun, x) (__RETCAST(x)( \ 108*c9945492SAndroid Build Coastguard Worker __FLTCX(x) ? c ## fun ## f (x) : \ 109*c9945492SAndroid Build Coastguard Worker __DBLCX(x) ? c ## fun (x) : \ 110*c9945492SAndroid Build Coastguard Worker __LDBLCX(x) ? c ## fun ## l (x) : \ 111*c9945492SAndroid Build Coastguard Worker __FLT(x) ? fun ## f (x) : \ 112*c9945492SAndroid Build Coastguard Worker __LDBL(x) ? fun ## l (x) : \ 113*c9945492SAndroid Build Coastguard Worker fun(x) )) 114*c9945492SAndroid Build Coastguard Worker 115*c9945492SAndroid Build Coastguard Worker /* special cases */ 116*c9945492SAndroid Build Coastguard Worker 117*c9945492SAndroid Build Coastguard Worker #define __tg_real_remquo(x, y, z) (__RETCAST_2(x, y)( \ 118*c9945492SAndroid Build Coastguard Worker __FLT(x) && __FLT(y) ? remquof(x, y, z) : \ 119*c9945492SAndroid Build Coastguard Worker __LDBL((x)+(y)) ? remquol(x, y, z) : \ 120*c9945492SAndroid Build Coastguard Worker remquo(x, y, z) )) 121*c9945492SAndroid Build Coastguard Worker 122*c9945492SAndroid Build Coastguard Worker #define __tg_real_fma(x, y, z) (__RETCAST_3(x, y, z)( \ 123*c9945492SAndroid Build Coastguard Worker __FLT(x) && __FLT(y) && __FLT(z) ? fmaf(x, y, z) : \ 124*c9945492SAndroid Build Coastguard Worker __LDBL((x)+(y)+(z)) ? fmal(x, y, z) : \ 125*c9945492SAndroid Build Coastguard Worker fma(x, y, z) )) 126*c9945492SAndroid Build Coastguard Worker 127*c9945492SAndroid Build Coastguard Worker #define __tg_real_complex_pow(x, y) (__RETCAST_2(x, y)( \ 128*c9945492SAndroid Build Coastguard Worker __FLTCX((x)+(y)) && __IS_FP(x) && __IS_FP(y) ? cpowf(x, y) : \ 129*c9945492SAndroid Build Coastguard Worker __FLTCX((x)+(y)) ? cpow(x, y) : \ 130*c9945492SAndroid Build Coastguard Worker __DBLCX((x)+(y)) ? cpow(x, y) : \ 131*c9945492SAndroid Build Coastguard Worker __LDBLCX((x)+(y)) ? cpowl(x, y) : \ 132*c9945492SAndroid Build Coastguard Worker __FLT(x) && __FLT(y) ? powf(x, y) : \ 133*c9945492SAndroid Build Coastguard Worker __LDBL((x)+(y)) ? powl(x, y) : \ 134*c9945492SAndroid Build Coastguard Worker pow(x, y) )) 135*c9945492SAndroid Build Coastguard Worker 136*c9945492SAndroid Build Coastguard Worker #define __tg_real_complex_fabs(x) (__RETCAST_REAL(x)( \ 137*c9945492SAndroid Build Coastguard Worker __FLTCX(x) ? cabsf(x) : \ 138*c9945492SAndroid Build Coastguard Worker __DBLCX(x) ? cabs(x) : \ 139*c9945492SAndroid Build Coastguard Worker __LDBLCX(x) ? cabsl(x) : \ 140*c9945492SAndroid Build Coastguard Worker __FLT(x) ? fabsf(x) : \ 141*c9945492SAndroid Build Coastguard Worker __LDBL(x) ? fabsl(x) : \ 142*c9945492SAndroid Build Coastguard Worker fabs(x) )) 143*c9945492SAndroid Build Coastguard Worker 144*c9945492SAndroid Build Coastguard Worker /* suppress any macros in math.h or complex.h */ 145*c9945492SAndroid Build Coastguard Worker 146*c9945492SAndroid Build Coastguard Worker #undef acos 147*c9945492SAndroid Build Coastguard Worker #undef acosh 148*c9945492SAndroid Build Coastguard Worker #undef asin 149*c9945492SAndroid Build Coastguard Worker #undef asinh 150*c9945492SAndroid Build Coastguard Worker #undef atan 151*c9945492SAndroid Build Coastguard Worker #undef atan2 152*c9945492SAndroid Build Coastguard Worker #undef atanh 153*c9945492SAndroid Build Coastguard Worker #undef carg 154*c9945492SAndroid Build Coastguard Worker #undef cbrt 155*c9945492SAndroid Build Coastguard Worker #undef ceil 156*c9945492SAndroid Build Coastguard Worker #undef cimag 157*c9945492SAndroid Build Coastguard Worker #undef conj 158*c9945492SAndroid Build Coastguard Worker #undef copysign 159*c9945492SAndroid Build Coastguard Worker #undef cos 160*c9945492SAndroid Build Coastguard Worker #undef cosh 161*c9945492SAndroid Build Coastguard Worker #undef cproj 162*c9945492SAndroid Build Coastguard Worker #undef creal 163*c9945492SAndroid Build Coastguard Worker #undef erf 164*c9945492SAndroid Build Coastguard Worker #undef erfc 165*c9945492SAndroid Build Coastguard Worker #undef exp 166*c9945492SAndroid Build Coastguard Worker #undef exp2 167*c9945492SAndroid Build Coastguard Worker #undef expm1 168*c9945492SAndroid Build Coastguard Worker #undef fabs 169*c9945492SAndroid Build Coastguard Worker #undef fdim 170*c9945492SAndroid Build Coastguard Worker #undef floor 171*c9945492SAndroid Build Coastguard Worker #undef fma 172*c9945492SAndroid Build Coastguard Worker #undef fmax 173*c9945492SAndroid Build Coastguard Worker #undef fmin 174*c9945492SAndroid Build Coastguard Worker #undef fmod 175*c9945492SAndroid Build Coastguard Worker #undef frexp 176*c9945492SAndroid Build Coastguard Worker #undef hypot 177*c9945492SAndroid Build Coastguard Worker #undef ilogb 178*c9945492SAndroid Build Coastguard Worker #undef ldexp 179*c9945492SAndroid Build Coastguard Worker #undef lgamma 180*c9945492SAndroid Build Coastguard Worker #undef llrint 181*c9945492SAndroid Build Coastguard Worker #undef llround 182*c9945492SAndroid Build Coastguard Worker #undef log 183*c9945492SAndroid Build Coastguard Worker #undef log10 184*c9945492SAndroid Build Coastguard Worker #undef log1p 185*c9945492SAndroid Build Coastguard Worker #undef log2 186*c9945492SAndroid Build Coastguard Worker #undef logb 187*c9945492SAndroid Build Coastguard Worker #undef lrint 188*c9945492SAndroid Build Coastguard Worker #undef lround 189*c9945492SAndroid Build Coastguard Worker #undef nearbyint 190*c9945492SAndroid Build Coastguard Worker #undef nextafter 191*c9945492SAndroid Build Coastguard Worker #undef nexttoward 192*c9945492SAndroid Build Coastguard Worker #undef pow 193*c9945492SAndroid Build Coastguard Worker #undef remainder 194*c9945492SAndroid Build Coastguard Worker #undef remquo 195*c9945492SAndroid Build Coastguard Worker #undef rint 196*c9945492SAndroid Build Coastguard Worker #undef round 197*c9945492SAndroid Build Coastguard Worker #undef scalbln 198*c9945492SAndroid Build Coastguard Worker #undef scalbn 199*c9945492SAndroid Build Coastguard Worker #undef sin 200*c9945492SAndroid Build Coastguard Worker #undef sinh 201*c9945492SAndroid Build Coastguard Worker #undef sqrt 202*c9945492SAndroid Build Coastguard Worker #undef tan 203*c9945492SAndroid Build Coastguard Worker #undef tanh 204*c9945492SAndroid Build Coastguard Worker #undef tgamma 205*c9945492SAndroid Build Coastguard Worker #undef trunc 206*c9945492SAndroid Build Coastguard Worker 207*c9945492SAndroid Build Coastguard Worker /* tg functions */ 208*c9945492SAndroid Build Coastguard Worker 209*c9945492SAndroid Build Coastguard Worker #define acos(x) __tg_real_complex(acos, (x)) 210*c9945492SAndroid Build Coastguard Worker #define acosh(x) __tg_real_complex(acosh, (x)) 211*c9945492SAndroid Build Coastguard Worker #define asin(x) __tg_real_complex(asin, (x)) 212*c9945492SAndroid Build Coastguard Worker #define asinh(x) __tg_real_complex(asinh, (x)) 213*c9945492SAndroid Build Coastguard Worker #define atan(x) __tg_real_complex(atan, (x)) 214*c9945492SAndroid Build Coastguard Worker #define atan2(x,y) __tg_real_2(atan2, (x), (y)) 215*c9945492SAndroid Build Coastguard Worker #define atanh(x) __tg_real_complex(atanh, (x)) 216*c9945492SAndroid Build Coastguard Worker #define carg(x) __tg_complex_retreal(carg, (x)) 217*c9945492SAndroid Build Coastguard Worker #define cbrt(x) __tg_real(cbrt, (x)) 218*c9945492SAndroid Build Coastguard Worker #define ceil(x) __tg_real(ceil, (x)) 219*c9945492SAndroid Build Coastguard Worker #define cimag(x) __tg_complex_retreal(cimag, (x)) 220*c9945492SAndroid Build Coastguard Worker #define conj(x) __tg_complex(conj, (x)) 221*c9945492SAndroid Build Coastguard Worker #define copysign(x,y) __tg_real_2(copysign, (x), (y)) 222*c9945492SAndroid Build Coastguard Worker #define cos(x) __tg_real_complex(cos, (x)) 223*c9945492SAndroid Build Coastguard Worker #define cosh(x) __tg_real_complex(cosh, (x)) 224*c9945492SAndroid Build Coastguard Worker #define cproj(x) __tg_complex(cproj, (x)) 225*c9945492SAndroid Build Coastguard Worker #define creal(x) __tg_complex_retreal(creal, (x)) 226*c9945492SAndroid Build Coastguard Worker #define erf(x) __tg_real(erf, (x)) 227*c9945492SAndroid Build Coastguard Worker #define erfc(x) __tg_real(erfc, (x)) 228*c9945492SAndroid Build Coastguard Worker #define exp(x) __tg_real_complex(exp, (x)) 229*c9945492SAndroid Build Coastguard Worker #define exp2(x) __tg_real(exp2, (x)) 230*c9945492SAndroid Build Coastguard Worker #define expm1(x) __tg_real(expm1, (x)) 231*c9945492SAndroid Build Coastguard Worker #define fabs(x) __tg_real_complex_fabs(x) 232*c9945492SAndroid Build Coastguard Worker #define fdim(x,y) __tg_real_2(fdim, (x), (y)) 233*c9945492SAndroid Build Coastguard Worker #define floor(x) __tg_real(floor, (x)) 234*c9945492SAndroid Build Coastguard Worker #define fma(x,y,z) __tg_real_fma((x), (y), (z)) 235*c9945492SAndroid Build Coastguard Worker #define fmax(x,y) __tg_real_2(fmax, (x), (y)) 236*c9945492SAndroid Build Coastguard Worker #define fmin(x,y) __tg_real_2(fmin, (x), (y)) 237*c9945492SAndroid Build Coastguard Worker #define fmod(x,y) __tg_real_2(fmod, (x), (y)) 238*c9945492SAndroid Build Coastguard Worker #define frexp(x,y) __tg_real_2_1(frexp, (x), (y)) 239*c9945492SAndroid Build Coastguard Worker #define hypot(x,y) __tg_real_2(hypot, (x), (y)) 240*c9945492SAndroid Build Coastguard Worker #define ilogb(x) __tg_real_nocast(ilogb, (x)) 241*c9945492SAndroid Build Coastguard Worker #define ldexp(x,y) __tg_real_2_1(ldexp, (x), (y)) 242*c9945492SAndroid Build Coastguard Worker #define lgamma(x) __tg_real(lgamma, (x)) 243*c9945492SAndroid Build Coastguard Worker #define llrint(x) __tg_real_nocast(llrint, (x)) 244*c9945492SAndroid Build Coastguard Worker #define llround(x) __tg_real_nocast(llround, (x)) 245*c9945492SAndroid Build Coastguard Worker #define log(x) __tg_real_complex(log, (x)) 246*c9945492SAndroid Build Coastguard Worker #define log10(x) __tg_real(log10, (x)) 247*c9945492SAndroid Build Coastguard Worker #define log1p(x) __tg_real(log1p, (x)) 248*c9945492SAndroid Build Coastguard Worker #define log2(x) __tg_real(log2, (x)) 249*c9945492SAndroid Build Coastguard Worker #define logb(x) __tg_real(logb, (x)) 250*c9945492SAndroid Build Coastguard Worker #define lrint(x) __tg_real_nocast(lrint, (x)) 251*c9945492SAndroid Build Coastguard Worker #define lround(x) __tg_real_nocast(lround, (x)) 252*c9945492SAndroid Build Coastguard Worker #define nearbyint(x) __tg_real(nearbyint, (x)) 253*c9945492SAndroid Build Coastguard Worker #define nextafter(x,y) __tg_real_2(nextafter, (x), (y)) 254*c9945492SAndroid Build Coastguard Worker #define nexttoward(x,y) __tg_real_2(nexttoward, (x), (y)) 255*c9945492SAndroid Build Coastguard Worker #define pow(x,y) __tg_real_complex_pow((x), (y)) 256*c9945492SAndroid Build Coastguard Worker #define remainder(x,y) __tg_real_2(remainder, (x), (y)) 257*c9945492SAndroid Build Coastguard Worker #define remquo(x,y,z) __tg_real_remquo((x), (y), (z)) 258*c9945492SAndroid Build Coastguard Worker #define rint(x) __tg_real(rint, (x)) 259*c9945492SAndroid Build Coastguard Worker #define round(x) __tg_real(round, (x)) 260*c9945492SAndroid Build Coastguard Worker #define scalbln(x,y) __tg_real_2_1(scalbln, (x), (y)) 261*c9945492SAndroid Build Coastguard Worker #define scalbn(x,y) __tg_real_2_1(scalbn, (x), (y)) 262*c9945492SAndroid Build Coastguard Worker #define sin(x) __tg_real_complex(sin, (x)) 263*c9945492SAndroid Build Coastguard Worker #define sinh(x) __tg_real_complex(sinh, (x)) 264*c9945492SAndroid Build Coastguard Worker #define sqrt(x) __tg_real_complex(sqrt, (x)) 265*c9945492SAndroid Build Coastguard Worker #define tan(x) __tg_real_complex(tan, (x)) 266*c9945492SAndroid Build Coastguard Worker #define tanh(x) __tg_real_complex(tanh, (x)) 267*c9945492SAndroid Build Coastguard Worker #define tgamma(x) __tg_real(tgamma, (x)) 268*c9945492SAndroid Build Coastguard Worker #define trunc(x) __tg_real(trunc, (x)) 269*c9945492SAndroid Build Coastguard Worker 270*c9945492SAndroid Build Coastguard Worker #endif 271