1*e5dd7070Spatrick /*===---- tgmath.h - Standard header for type generic math ----------------===*\ 2*e5dd7070Spatrick * 3*e5dd7070Spatrick * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*e5dd7070Spatrick * See https://llvm.org/LICENSE.txt for license information. 5*e5dd7070Spatrick * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*e5dd7070Spatrick * 7*e5dd7070Spatrick \*===----------------------------------------------------------------------===*/ 8*e5dd7070Spatrick 9*e5dd7070Spatrick #ifndef __CLANG_TGMATH_H 10*e5dd7070Spatrick #define __CLANG_TGMATH_H 11*e5dd7070Spatrick 12*e5dd7070Spatrick /* C99 7.22 Type-generic math <tgmath.h>. */ 13*e5dd7070Spatrick #include <math.h> 14*e5dd7070Spatrick 15*e5dd7070Spatrick /* 16*e5dd7070Spatrick * Allow additional definitions and implementation-defined values on Apple 17*e5dd7070Spatrick * platforms. This is done after #include <math.h> to avoid depcycle conflicts 18*e5dd7070Spatrick * between libcxx and darwin in C++ modules builds. 19*e5dd7070Spatrick */ 20*e5dd7070Spatrick #if defined(__APPLE__) && __STDC_HOSTED__ && __has_include_next(<tgmath.h>) 21*e5dd7070Spatrick # include_next <tgmath.h> 22*e5dd7070Spatrick #else 23*e5dd7070Spatrick 24*e5dd7070Spatrick /* C++ handles type genericity with overloading in math.h. */ 25*e5dd7070Spatrick #ifndef __cplusplus 26*e5dd7070Spatrick #include <complex.h> 27*e5dd7070Spatrick 28*e5dd7070Spatrick #define _TG_ATTRSp __attribute__((__overloadable__)) 29*e5dd7070Spatrick #define _TG_ATTRS __attribute__((__overloadable__, __always_inline__)) 30*e5dd7070Spatrick 31*e5dd7070Spatrick // promotion 32*e5dd7070Spatrick 33*e5dd7070Spatrick typedef void _Argument_type_is_not_arithmetic; 34*e5dd7070Spatrick static _Argument_type_is_not_arithmetic __tg_promote(...) 35*e5dd7070Spatrick __attribute__((__unavailable__,__overloadable__)); 36*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(int); 37*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(unsigned int); 38*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(long); 39*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(unsigned long); 40*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(long long); 41*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(unsigned long long); 42*e5dd7070Spatrick static float _TG_ATTRSp __tg_promote(float); 43*e5dd7070Spatrick static double _TG_ATTRSp __tg_promote(double); 44*e5dd7070Spatrick static long double _TG_ATTRSp __tg_promote(long double); 45*e5dd7070Spatrick static float _Complex _TG_ATTRSp __tg_promote(float _Complex); 46*e5dd7070Spatrick static double _Complex _TG_ATTRSp __tg_promote(double _Complex); 47*e5dd7070Spatrick static long double _Complex _TG_ATTRSp __tg_promote(long double _Complex); 48*e5dd7070Spatrick 49*e5dd7070Spatrick #define __tg_promote1(__x) (__typeof__(__tg_promote(__x))) 50*e5dd7070Spatrick #define __tg_promote2(__x, __y) (__typeof__(__tg_promote(__x) + \ 51*e5dd7070Spatrick __tg_promote(__y))) 52*e5dd7070Spatrick #define __tg_promote3(__x, __y, __z) (__typeof__(__tg_promote(__x) + \ 53*e5dd7070Spatrick __tg_promote(__y) + \ 54*e5dd7070Spatrick __tg_promote(__z))) 55*e5dd7070Spatrick 56*e5dd7070Spatrick // acos 57*e5dd7070Spatrick 58*e5dd7070Spatrick static float 59*e5dd7070Spatrick _TG_ATTRS __tg_acos(float __x)60*e5dd7070Spatrick __tg_acos(float __x) {return acosf(__x);} 61*e5dd7070Spatrick 62*e5dd7070Spatrick static double 63*e5dd7070Spatrick _TG_ATTRS __tg_acos(double __x)64*e5dd7070Spatrick __tg_acos(double __x) {return acos(__x);} 65*e5dd7070Spatrick 66*e5dd7070Spatrick static long double 67*e5dd7070Spatrick _TG_ATTRS __tg_acos(long double __x)68*e5dd7070Spatrick __tg_acos(long double __x) {return acosl(__x);} 69*e5dd7070Spatrick 70*e5dd7070Spatrick static float _Complex 71*e5dd7070Spatrick _TG_ATTRS __tg_acos(float _Complex __x)72*e5dd7070Spatrick __tg_acos(float _Complex __x) {return cacosf(__x);} 73*e5dd7070Spatrick 74*e5dd7070Spatrick static double _Complex 75*e5dd7070Spatrick _TG_ATTRS __tg_acos(double _Complex __x)76*e5dd7070Spatrick __tg_acos(double _Complex __x) {return cacos(__x);} 77*e5dd7070Spatrick 78*e5dd7070Spatrick static long double _Complex 79*e5dd7070Spatrick _TG_ATTRS __tg_acos(long double _Complex __x)80*e5dd7070Spatrick __tg_acos(long double _Complex __x) {return cacosl(__x);} 81*e5dd7070Spatrick 82*e5dd7070Spatrick #undef acos 83*e5dd7070Spatrick #define acos(__x) __tg_acos(__tg_promote1((__x))(__x)) 84*e5dd7070Spatrick 85*e5dd7070Spatrick // asin 86*e5dd7070Spatrick 87*e5dd7070Spatrick static float 88*e5dd7070Spatrick _TG_ATTRS __tg_asin(float __x)89*e5dd7070Spatrick __tg_asin(float __x) {return asinf(__x);} 90*e5dd7070Spatrick 91*e5dd7070Spatrick static double 92*e5dd7070Spatrick _TG_ATTRS __tg_asin(double __x)93*e5dd7070Spatrick __tg_asin(double __x) {return asin(__x);} 94*e5dd7070Spatrick 95*e5dd7070Spatrick static long double 96*e5dd7070Spatrick _TG_ATTRS __tg_asin(long double __x)97*e5dd7070Spatrick __tg_asin(long double __x) {return asinl(__x);} 98*e5dd7070Spatrick 99*e5dd7070Spatrick static float _Complex 100*e5dd7070Spatrick _TG_ATTRS __tg_asin(float _Complex __x)101*e5dd7070Spatrick __tg_asin(float _Complex __x) {return casinf(__x);} 102*e5dd7070Spatrick 103*e5dd7070Spatrick static double _Complex 104*e5dd7070Spatrick _TG_ATTRS __tg_asin(double _Complex __x)105*e5dd7070Spatrick __tg_asin(double _Complex __x) {return casin(__x);} 106*e5dd7070Spatrick 107*e5dd7070Spatrick static long double _Complex 108*e5dd7070Spatrick _TG_ATTRS __tg_asin(long double _Complex __x)109*e5dd7070Spatrick __tg_asin(long double _Complex __x) {return casinl(__x);} 110*e5dd7070Spatrick 111*e5dd7070Spatrick #undef asin 112*e5dd7070Spatrick #define asin(__x) __tg_asin(__tg_promote1((__x))(__x)) 113*e5dd7070Spatrick 114*e5dd7070Spatrick // atan 115*e5dd7070Spatrick 116*e5dd7070Spatrick static float 117*e5dd7070Spatrick _TG_ATTRS __tg_atan(float __x)118*e5dd7070Spatrick __tg_atan(float __x) {return atanf(__x);} 119*e5dd7070Spatrick 120*e5dd7070Spatrick static double 121*e5dd7070Spatrick _TG_ATTRS __tg_atan(double __x)122*e5dd7070Spatrick __tg_atan(double __x) {return atan(__x);} 123*e5dd7070Spatrick 124*e5dd7070Spatrick static long double 125*e5dd7070Spatrick _TG_ATTRS __tg_atan(long double __x)126*e5dd7070Spatrick __tg_atan(long double __x) {return atanl(__x);} 127*e5dd7070Spatrick 128*e5dd7070Spatrick static float _Complex 129*e5dd7070Spatrick _TG_ATTRS __tg_atan(float _Complex __x)130*e5dd7070Spatrick __tg_atan(float _Complex __x) {return catanf(__x);} 131*e5dd7070Spatrick 132*e5dd7070Spatrick static double _Complex 133*e5dd7070Spatrick _TG_ATTRS __tg_atan(double _Complex __x)134*e5dd7070Spatrick __tg_atan(double _Complex __x) {return catan(__x);} 135*e5dd7070Spatrick 136*e5dd7070Spatrick static long double _Complex 137*e5dd7070Spatrick _TG_ATTRS __tg_atan(long double _Complex __x)138*e5dd7070Spatrick __tg_atan(long double _Complex __x) {return catanl(__x);} 139*e5dd7070Spatrick 140*e5dd7070Spatrick #undef atan 141*e5dd7070Spatrick #define atan(__x) __tg_atan(__tg_promote1((__x))(__x)) 142*e5dd7070Spatrick 143*e5dd7070Spatrick // acosh 144*e5dd7070Spatrick 145*e5dd7070Spatrick static float 146*e5dd7070Spatrick _TG_ATTRS __tg_acosh(float __x)147*e5dd7070Spatrick __tg_acosh(float __x) {return acoshf(__x);} 148*e5dd7070Spatrick 149*e5dd7070Spatrick static double 150*e5dd7070Spatrick _TG_ATTRS __tg_acosh(double __x)151*e5dd7070Spatrick __tg_acosh(double __x) {return acosh(__x);} 152*e5dd7070Spatrick 153*e5dd7070Spatrick static long double 154*e5dd7070Spatrick _TG_ATTRS __tg_acosh(long double __x)155*e5dd7070Spatrick __tg_acosh(long double __x) {return acoshl(__x);} 156*e5dd7070Spatrick 157*e5dd7070Spatrick static float _Complex 158*e5dd7070Spatrick _TG_ATTRS __tg_acosh(float _Complex __x)159*e5dd7070Spatrick __tg_acosh(float _Complex __x) {return cacoshf(__x);} 160*e5dd7070Spatrick 161*e5dd7070Spatrick static double _Complex 162*e5dd7070Spatrick _TG_ATTRS __tg_acosh(double _Complex __x)163*e5dd7070Spatrick __tg_acosh(double _Complex __x) {return cacosh(__x);} 164*e5dd7070Spatrick 165*e5dd7070Spatrick static long double _Complex 166*e5dd7070Spatrick _TG_ATTRS __tg_acosh(long double _Complex __x)167*e5dd7070Spatrick __tg_acosh(long double _Complex __x) {return cacoshl(__x);} 168*e5dd7070Spatrick 169*e5dd7070Spatrick #undef acosh 170*e5dd7070Spatrick #define acosh(__x) __tg_acosh(__tg_promote1((__x))(__x)) 171*e5dd7070Spatrick 172*e5dd7070Spatrick // asinh 173*e5dd7070Spatrick 174*e5dd7070Spatrick static float 175*e5dd7070Spatrick _TG_ATTRS __tg_asinh(float __x)176*e5dd7070Spatrick __tg_asinh(float __x) {return asinhf(__x);} 177*e5dd7070Spatrick 178*e5dd7070Spatrick static double 179*e5dd7070Spatrick _TG_ATTRS __tg_asinh(double __x)180*e5dd7070Spatrick __tg_asinh(double __x) {return asinh(__x);} 181*e5dd7070Spatrick 182*e5dd7070Spatrick static long double 183*e5dd7070Spatrick _TG_ATTRS __tg_asinh(long double __x)184*e5dd7070Spatrick __tg_asinh(long double __x) {return asinhl(__x);} 185*e5dd7070Spatrick 186*e5dd7070Spatrick static float _Complex 187*e5dd7070Spatrick _TG_ATTRS __tg_asinh(float _Complex __x)188*e5dd7070Spatrick __tg_asinh(float _Complex __x) {return casinhf(__x);} 189*e5dd7070Spatrick 190*e5dd7070Spatrick static double _Complex 191*e5dd7070Spatrick _TG_ATTRS __tg_asinh(double _Complex __x)192*e5dd7070Spatrick __tg_asinh(double _Complex __x) {return casinh(__x);} 193*e5dd7070Spatrick 194*e5dd7070Spatrick static long double _Complex 195*e5dd7070Spatrick _TG_ATTRS __tg_asinh(long double _Complex __x)196*e5dd7070Spatrick __tg_asinh(long double _Complex __x) {return casinhl(__x);} 197*e5dd7070Spatrick 198*e5dd7070Spatrick #undef asinh 199*e5dd7070Spatrick #define asinh(__x) __tg_asinh(__tg_promote1((__x))(__x)) 200*e5dd7070Spatrick 201*e5dd7070Spatrick // atanh 202*e5dd7070Spatrick 203*e5dd7070Spatrick static float 204*e5dd7070Spatrick _TG_ATTRS __tg_atanh(float __x)205*e5dd7070Spatrick __tg_atanh(float __x) {return atanhf(__x);} 206*e5dd7070Spatrick 207*e5dd7070Spatrick static double 208*e5dd7070Spatrick _TG_ATTRS __tg_atanh(double __x)209*e5dd7070Spatrick __tg_atanh(double __x) {return atanh(__x);} 210*e5dd7070Spatrick 211*e5dd7070Spatrick static long double 212*e5dd7070Spatrick _TG_ATTRS __tg_atanh(long double __x)213*e5dd7070Spatrick __tg_atanh(long double __x) {return atanhl(__x);} 214*e5dd7070Spatrick 215*e5dd7070Spatrick static float _Complex 216*e5dd7070Spatrick _TG_ATTRS __tg_atanh(float _Complex __x)217*e5dd7070Spatrick __tg_atanh(float _Complex __x) {return catanhf(__x);} 218*e5dd7070Spatrick 219*e5dd7070Spatrick static double _Complex 220*e5dd7070Spatrick _TG_ATTRS __tg_atanh(double _Complex __x)221*e5dd7070Spatrick __tg_atanh(double _Complex __x) {return catanh(__x);} 222*e5dd7070Spatrick 223*e5dd7070Spatrick static long double _Complex 224*e5dd7070Spatrick _TG_ATTRS __tg_atanh(long double _Complex __x)225*e5dd7070Spatrick __tg_atanh(long double _Complex __x) {return catanhl(__x);} 226*e5dd7070Spatrick 227*e5dd7070Spatrick #undef atanh 228*e5dd7070Spatrick #define atanh(__x) __tg_atanh(__tg_promote1((__x))(__x)) 229*e5dd7070Spatrick 230*e5dd7070Spatrick // cos 231*e5dd7070Spatrick 232*e5dd7070Spatrick static float 233*e5dd7070Spatrick _TG_ATTRS __tg_cos(float __x)234*e5dd7070Spatrick __tg_cos(float __x) {return cosf(__x);} 235*e5dd7070Spatrick 236*e5dd7070Spatrick static double 237*e5dd7070Spatrick _TG_ATTRS __tg_cos(double __x)238*e5dd7070Spatrick __tg_cos(double __x) {return cos(__x);} 239*e5dd7070Spatrick 240*e5dd7070Spatrick static long double 241*e5dd7070Spatrick _TG_ATTRS __tg_cos(long double __x)242*e5dd7070Spatrick __tg_cos(long double __x) {return cosl(__x);} 243*e5dd7070Spatrick 244*e5dd7070Spatrick static float _Complex 245*e5dd7070Spatrick _TG_ATTRS __tg_cos(float _Complex __x)246*e5dd7070Spatrick __tg_cos(float _Complex __x) {return ccosf(__x);} 247*e5dd7070Spatrick 248*e5dd7070Spatrick static double _Complex 249*e5dd7070Spatrick _TG_ATTRS __tg_cos(double _Complex __x)250*e5dd7070Spatrick __tg_cos(double _Complex __x) {return ccos(__x);} 251*e5dd7070Spatrick 252*e5dd7070Spatrick static long double _Complex 253*e5dd7070Spatrick _TG_ATTRS __tg_cos(long double _Complex __x)254*e5dd7070Spatrick __tg_cos(long double _Complex __x) {return ccosl(__x);} 255*e5dd7070Spatrick 256*e5dd7070Spatrick #undef cos 257*e5dd7070Spatrick #define cos(__x) __tg_cos(__tg_promote1((__x))(__x)) 258*e5dd7070Spatrick 259*e5dd7070Spatrick // sin 260*e5dd7070Spatrick 261*e5dd7070Spatrick static float 262*e5dd7070Spatrick _TG_ATTRS __tg_sin(float __x)263*e5dd7070Spatrick __tg_sin(float __x) {return sinf(__x);} 264*e5dd7070Spatrick 265*e5dd7070Spatrick static double 266*e5dd7070Spatrick _TG_ATTRS __tg_sin(double __x)267*e5dd7070Spatrick __tg_sin(double __x) {return sin(__x);} 268*e5dd7070Spatrick 269*e5dd7070Spatrick static long double 270*e5dd7070Spatrick _TG_ATTRS __tg_sin(long double __x)271*e5dd7070Spatrick __tg_sin(long double __x) {return sinl(__x);} 272*e5dd7070Spatrick 273*e5dd7070Spatrick static float _Complex 274*e5dd7070Spatrick _TG_ATTRS __tg_sin(float _Complex __x)275*e5dd7070Spatrick __tg_sin(float _Complex __x) {return csinf(__x);} 276*e5dd7070Spatrick 277*e5dd7070Spatrick static double _Complex 278*e5dd7070Spatrick _TG_ATTRS __tg_sin(double _Complex __x)279*e5dd7070Spatrick __tg_sin(double _Complex __x) {return csin(__x);} 280*e5dd7070Spatrick 281*e5dd7070Spatrick static long double _Complex 282*e5dd7070Spatrick _TG_ATTRS __tg_sin(long double _Complex __x)283*e5dd7070Spatrick __tg_sin(long double _Complex __x) {return csinl(__x);} 284*e5dd7070Spatrick 285*e5dd7070Spatrick #undef sin 286*e5dd7070Spatrick #define sin(__x) __tg_sin(__tg_promote1((__x))(__x)) 287*e5dd7070Spatrick 288*e5dd7070Spatrick // tan 289*e5dd7070Spatrick 290*e5dd7070Spatrick static float 291*e5dd7070Spatrick _TG_ATTRS __tg_tan(float __x)292*e5dd7070Spatrick __tg_tan(float __x) {return tanf(__x);} 293*e5dd7070Spatrick 294*e5dd7070Spatrick static double 295*e5dd7070Spatrick _TG_ATTRS __tg_tan(double __x)296*e5dd7070Spatrick __tg_tan(double __x) {return tan(__x);} 297*e5dd7070Spatrick 298*e5dd7070Spatrick static long double 299*e5dd7070Spatrick _TG_ATTRS __tg_tan(long double __x)300*e5dd7070Spatrick __tg_tan(long double __x) {return tanl(__x);} 301*e5dd7070Spatrick 302*e5dd7070Spatrick static float _Complex 303*e5dd7070Spatrick _TG_ATTRS __tg_tan(float _Complex __x)304*e5dd7070Spatrick __tg_tan(float _Complex __x) {return ctanf(__x);} 305*e5dd7070Spatrick 306*e5dd7070Spatrick static double _Complex 307*e5dd7070Spatrick _TG_ATTRS __tg_tan(double _Complex __x)308*e5dd7070Spatrick __tg_tan(double _Complex __x) {return ctan(__x);} 309*e5dd7070Spatrick 310*e5dd7070Spatrick static long double _Complex 311*e5dd7070Spatrick _TG_ATTRS __tg_tan(long double _Complex __x)312*e5dd7070Spatrick __tg_tan(long double _Complex __x) {return ctanl(__x);} 313*e5dd7070Spatrick 314*e5dd7070Spatrick #undef tan 315*e5dd7070Spatrick #define tan(__x) __tg_tan(__tg_promote1((__x))(__x)) 316*e5dd7070Spatrick 317*e5dd7070Spatrick // cosh 318*e5dd7070Spatrick 319*e5dd7070Spatrick static float 320*e5dd7070Spatrick _TG_ATTRS __tg_cosh(float __x)321*e5dd7070Spatrick __tg_cosh(float __x) {return coshf(__x);} 322*e5dd7070Spatrick 323*e5dd7070Spatrick static double 324*e5dd7070Spatrick _TG_ATTRS __tg_cosh(double __x)325*e5dd7070Spatrick __tg_cosh(double __x) {return cosh(__x);} 326*e5dd7070Spatrick 327*e5dd7070Spatrick static long double 328*e5dd7070Spatrick _TG_ATTRS __tg_cosh(long double __x)329*e5dd7070Spatrick __tg_cosh(long double __x) {return coshl(__x);} 330*e5dd7070Spatrick 331*e5dd7070Spatrick static float _Complex 332*e5dd7070Spatrick _TG_ATTRS __tg_cosh(float _Complex __x)333*e5dd7070Spatrick __tg_cosh(float _Complex __x) {return ccoshf(__x);} 334*e5dd7070Spatrick 335*e5dd7070Spatrick static double _Complex 336*e5dd7070Spatrick _TG_ATTRS __tg_cosh(double _Complex __x)337*e5dd7070Spatrick __tg_cosh(double _Complex __x) {return ccosh(__x);} 338*e5dd7070Spatrick 339*e5dd7070Spatrick static long double _Complex 340*e5dd7070Spatrick _TG_ATTRS __tg_cosh(long double _Complex __x)341*e5dd7070Spatrick __tg_cosh(long double _Complex __x) {return ccoshl(__x);} 342*e5dd7070Spatrick 343*e5dd7070Spatrick #undef cosh 344*e5dd7070Spatrick #define cosh(__x) __tg_cosh(__tg_promote1((__x))(__x)) 345*e5dd7070Spatrick 346*e5dd7070Spatrick // sinh 347*e5dd7070Spatrick 348*e5dd7070Spatrick static float 349*e5dd7070Spatrick _TG_ATTRS __tg_sinh(float __x)350*e5dd7070Spatrick __tg_sinh(float __x) {return sinhf(__x);} 351*e5dd7070Spatrick 352*e5dd7070Spatrick static double 353*e5dd7070Spatrick _TG_ATTRS __tg_sinh(double __x)354*e5dd7070Spatrick __tg_sinh(double __x) {return sinh(__x);} 355*e5dd7070Spatrick 356*e5dd7070Spatrick static long double 357*e5dd7070Spatrick _TG_ATTRS __tg_sinh(long double __x)358*e5dd7070Spatrick __tg_sinh(long double __x) {return sinhl(__x);} 359*e5dd7070Spatrick 360*e5dd7070Spatrick static float _Complex 361*e5dd7070Spatrick _TG_ATTRS __tg_sinh(float _Complex __x)362*e5dd7070Spatrick __tg_sinh(float _Complex __x) {return csinhf(__x);} 363*e5dd7070Spatrick 364*e5dd7070Spatrick static double _Complex 365*e5dd7070Spatrick _TG_ATTRS __tg_sinh(double _Complex __x)366*e5dd7070Spatrick __tg_sinh(double _Complex __x) {return csinh(__x);} 367*e5dd7070Spatrick 368*e5dd7070Spatrick static long double _Complex 369*e5dd7070Spatrick _TG_ATTRS __tg_sinh(long double _Complex __x)370*e5dd7070Spatrick __tg_sinh(long double _Complex __x) {return csinhl(__x);} 371*e5dd7070Spatrick 372*e5dd7070Spatrick #undef sinh 373*e5dd7070Spatrick #define sinh(__x) __tg_sinh(__tg_promote1((__x))(__x)) 374*e5dd7070Spatrick 375*e5dd7070Spatrick // tanh 376*e5dd7070Spatrick 377*e5dd7070Spatrick static float 378*e5dd7070Spatrick _TG_ATTRS __tg_tanh(float __x)379*e5dd7070Spatrick __tg_tanh(float __x) {return tanhf(__x);} 380*e5dd7070Spatrick 381*e5dd7070Spatrick static double 382*e5dd7070Spatrick _TG_ATTRS __tg_tanh(double __x)383*e5dd7070Spatrick __tg_tanh(double __x) {return tanh(__x);} 384*e5dd7070Spatrick 385*e5dd7070Spatrick static long double 386*e5dd7070Spatrick _TG_ATTRS __tg_tanh(long double __x)387*e5dd7070Spatrick __tg_tanh(long double __x) {return tanhl(__x);} 388*e5dd7070Spatrick 389*e5dd7070Spatrick static float _Complex 390*e5dd7070Spatrick _TG_ATTRS __tg_tanh(float _Complex __x)391*e5dd7070Spatrick __tg_tanh(float _Complex __x) {return ctanhf(__x);} 392*e5dd7070Spatrick 393*e5dd7070Spatrick static double _Complex 394*e5dd7070Spatrick _TG_ATTRS __tg_tanh(double _Complex __x)395*e5dd7070Spatrick __tg_tanh(double _Complex __x) {return ctanh(__x);} 396*e5dd7070Spatrick 397*e5dd7070Spatrick static long double _Complex 398*e5dd7070Spatrick _TG_ATTRS __tg_tanh(long double _Complex __x)399*e5dd7070Spatrick __tg_tanh(long double _Complex __x) {return ctanhl(__x);} 400*e5dd7070Spatrick 401*e5dd7070Spatrick #undef tanh 402*e5dd7070Spatrick #define tanh(__x) __tg_tanh(__tg_promote1((__x))(__x)) 403*e5dd7070Spatrick 404*e5dd7070Spatrick // exp 405*e5dd7070Spatrick 406*e5dd7070Spatrick static float 407*e5dd7070Spatrick _TG_ATTRS __tg_exp(float __x)408*e5dd7070Spatrick __tg_exp(float __x) {return expf(__x);} 409*e5dd7070Spatrick 410*e5dd7070Spatrick static double 411*e5dd7070Spatrick _TG_ATTRS __tg_exp(double __x)412*e5dd7070Spatrick __tg_exp(double __x) {return exp(__x);} 413*e5dd7070Spatrick 414*e5dd7070Spatrick static long double 415*e5dd7070Spatrick _TG_ATTRS __tg_exp(long double __x)416*e5dd7070Spatrick __tg_exp(long double __x) {return expl(__x);} 417*e5dd7070Spatrick 418*e5dd7070Spatrick static float _Complex 419*e5dd7070Spatrick _TG_ATTRS __tg_exp(float _Complex __x)420*e5dd7070Spatrick __tg_exp(float _Complex __x) {return cexpf(__x);} 421*e5dd7070Spatrick 422*e5dd7070Spatrick static double _Complex 423*e5dd7070Spatrick _TG_ATTRS __tg_exp(double _Complex __x)424*e5dd7070Spatrick __tg_exp(double _Complex __x) {return cexp(__x);} 425*e5dd7070Spatrick 426*e5dd7070Spatrick static long double _Complex 427*e5dd7070Spatrick _TG_ATTRS __tg_exp(long double _Complex __x)428*e5dd7070Spatrick __tg_exp(long double _Complex __x) {return cexpl(__x);} 429*e5dd7070Spatrick 430*e5dd7070Spatrick #undef exp 431*e5dd7070Spatrick #define exp(__x) __tg_exp(__tg_promote1((__x))(__x)) 432*e5dd7070Spatrick 433*e5dd7070Spatrick // log 434*e5dd7070Spatrick 435*e5dd7070Spatrick static float 436*e5dd7070Spatrick _TG_ATTRS __tg_log(float __x)437*e5dd7070Spatrick __tg_log(float __x) {return logf(__x);} 438*e5dd7070Spatrick 439*e5dd7070Spatrick static double 440*e5dd7070Spatrick _TG_ATTRS __tg_log(double __x)441*e5dd7070Spatrick __tg_log(double __x) {return log(__x);} 442*e5dd7070Spatrick 443*e5dd7070Spatrick static long double 444*e5dd7070Spatrick _TG_ATTRS __tg_log(long double __x)445*e5dd7070Spatrick __tg_log(long double __x) {return logl(__x);} 446*e5dd7070Spatrick 447*e5dd7070Spatrick static float _Complex 448*e5dd7070Spatrick _TG_ATTRS __tg_log(float _Complex __x)449*e5dd7070Spatrick __tg_log(float _Complex __x) {return clogf(__x);} 450*e5dd7070Spatrick 451*e5dd7070Spatrick static double _Complex 452*e5dd7070Spatrick _TG_ATTRS __tg_log(double _Complex __x)453*e5dd7070Spatrick __tg_log(double _Complex __x) {return clog(__x);} 454*e5dd7070Spatrick 455*e5dd7070Spatrick static long double _Complex 456*e5dd7070Spatrick _TG_ATTRS __tg_log(long double _Complex __x)457*e5dd7070Spatrick __tg_log(long double _Complex __x) {return clogl(__x);} 458*e5dd7070Spatrick 459*e5dd7070Spatrick #undef log 460*e5dd7070Spatrick #define log(__x) __tg_log(__tg_promote1((__x))(__x)) 461*e5dd7070Spatrick 462*e5dd7070Spatrick // pow 463*e5dd7070Spatrick 464*e5dd7070Spatrick static float 465*e5dd7070Spatrick _TG_ATTRS __tg_pow(float __x,float __y)466*e5dd7070Spatrick __tg_pow(float __x, float __y) {return powf(__x, __y);} 467*e5dd7070Spatrick 468*e5dd7070Spatrick static double 469*e5dd7070Spatrick _TG_ATTRS __tg_pow(double __x,double __y)470*e5dd7070Spatrick __tg_pow(double __x, double __y) {return pow(__x, __y);} 471*e5dd7070Spatrick 472*e5dd7070Spatrick static long double 473*e5dd7070Spatrick _TG_ATTRS __tg_pow(long double __x,long double __y)474*e5dd7070Spatrick __tg_pow(long double __x, long double __y) {return powl(__x, __y);} 475*e5dd7070Spatrick 476*e5dd7070Spatrick static float _Complex 477*e5dd7070Spatrick _TG_ATTRS __tg_pow(float _Complex __x,float _Complex __y)478*e5dd7070Spatrick __tg_pow(float _Complex __x, float _Complex __y) {return cpowf(__x, __y);} 479*e5dd7070Spatrick 480*e5dd7070Spatrick static double _Complex 481*e5dd7070Spatrick _TG_ATTRS __tg_pow(double _Complex __x,double _Complex __y)482*e5dd7070Spatrick __tg_pow(double _Complex __x, double _Complex __y) {return cpow(__x, __y);} 483*e5dd7070Spatrick 484*e5dd7070Spatrick static long double _Complex 485*e5dd7070Spatrick _TG_ATTRS __tg_pow(long double _Complex __x,long double _Complex __y)486*e5dd7070Spatrick __tg_pow(long double _Complex __x, long double _Complex __y) 487*e5dd7070Spatrick {return cpowl(__x, __y);} 488*e5dd7070Spatrick 489*e5dd7070Spatrick #undef pow 490*e5dd7070Spatrick #define pow(__x, __y) __tg_pow(__tg_promote2((__x), (__y))(__x), \ 491*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 492*e5dd7070Spatrick 493*e5dd7070Spatrick // sqrt 494*e5dd7070Spatrick 495*e5dd7070Spatrick static float 496*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(float __x)497*e5dd7070Spatrick __tg_sqrt(float __x) {return sqrtf(__x);} 498*e5dd7070Spatrick 499*e5dd7070Spatrick static double 500*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(double __x)501*e5dd7070Spatrick __tg_sqrt(double __x) {return sqrt(__x);} 502*e5dd7070Spatrick 503*e5dd7070Spatrick static long double 504*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(long double __x)505*e5dd7070Spatrick __tg_sqrt(long double __x) {return sqrtl(__x);} 506*e5dd7070Spatrick 507*e5dd7070Spatrick static float _Complex 508*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(float _Complex __x)509*e5dd7070Spatrick __tg_sqrt(float _Complex __x) {return csqrtf(__x);} 510*e5dd7070Spatrick 511*e5dd7070Spatrick static double _Complex 512*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(double _Complex __x)513*e5dd7070Spatrick __tg_sqrt(double _Complex __x) {return csqrt(__x);} 514*e5dd7070Spatrick 515*e5dd7070Spatrick static long double _Complex 516*e5dd7070Spatrick _TG_ATTRS __tg_sqrt(long double _Complex __x)517*e5dd7070Spatrick __tg_sqrt(long double _Complex __x) {return csqrtl(__x);} 518*e5dd7070Spatrick 519*e5dd7070Spatrick #undef sqrt 520*e5dd7070Spatrick #define sqrt(__x) __tg_sqrt(__tg_promote1((__x))(__x)) 521*e5dd7070Spatrick 522*e5dd7070Spatrick // fabs 523*e5dd7070Spatrick 524*e5dd7070Spatrick static float 525*e5dd7070Spatrick _TG_ATTRS __tg_fabs(float __x)526*e5dd7070Spatrick __tg_fabs(float __x) {return fabsf(__x);} 527*e5dd7070Spatrick 528*e5dd7070Spatrick static double 529*e5dd7070Spatrick _TG_ATTRS __tg_fabs(double __x)530*e5dd7070Spatrick __tg_fabs(double __x) {return fabs(__x);} 531*e5dd7070Spatrick 532*e5dd7070Spatrick static long double 533*e5dd7070Spatrick _TG_ATTRS __tg_fabs(long double __x)534*e5dd7070Spatrick __tg_fabs(long double __x) {return fabsl(__x);} 535*e5dd7070Spatrick 536*e5dd7070Spatrick static float 537*e5dd7070Spatrick _TG_ATTRS __tg_fabs(float _Complex __x)538*e5dd7070Spatrick __tg_fabs(float _Complex __x) {return cabsf(__x);} 539*e5dd7070Spatrick 540*e5dd7070Spatrick static double 541*e5dd7070Spatrick _TG_ATTRS __tg_fabs(double _Complex __x)542*e5dd7070Spatrick __tg_fabs(double _Complex __x) {return cabs(__x);} 543*e5dd7070Spatrick 544*e5dd7070Spatrick static long double 545*e5dd7070Spatrick _TG_ATTRS __tg_fabs(long double _Complex __x)546*e5dd7070Spatrick __tg_fabs(long double _Complex __x) {return cabsl(__x);} 547*e5dd7070Spatrick 548*e5dd7070Spatrick #undef fabs 549*e5dd7070Spatrick #define fabs(__x) __tg_fabs(__tg_promote1((__x))(__x)) 550*e5dd7070Spatrick 551*e5dd7070Spatrick // atan2 552*e5dd7070Spatrick 553*e5dd7070Spatrick static float 554*e5dd7070Spatrick _TG_ATTRS __tg_atan2(float __x,float __y)555*e5dd7070Spatrick __tg_atan2(float __x, float __y) {return atan2f(__x, __y);} 556*e5dd7070Spatrick 557*e5dd7070Spatrick static double 558*e5dd7070Spatrick _TG_ATTRS __tg_atan2(double __x,double __y)559*e5dd7070Spatrick __tg_atan2(double __x, double __y) {return atan2(__x, __y);} 560*e5dd7070Spatrick 561*e5dd7070Spatrick static long double 562*e5dd7070Spatrick _TG_ATTRS __tg_atan2(long double __x,long double __y)563*e5dd7070Spatrick __tg_atan2(long double __x, long double __y) {return atan2l(__x, __y);} 564*e5dd7070Spatrick 565*e5dd7070Spatrick #undef atan2 566*e5dd7070Spatrick #define atan2(__x, __y) __tg_atan2(__tg_promote2((__x), (__y))(__x), \ 567*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 568*e5dd7070Spatrick 569*e5dd7070Spatrick // cbrt 570*e5dd7070Spatrick 571*e5dd7070Spatrick static float 572*e5dd7070Spatrick _TG_ATTRS __tg_cbrt(float __x)573*e5dd7070Spatrick __tg_cbrt(float __x) {return cbrtf(__x);} 574*e5dd7070Spatrick 575*e5dd7070Spatrick static double 576*e5dd7070Spatrick _TG_ATTRS __tg_cbrt(double __x)577*e5dd7070Spatrick __tg_cbrt(double __x) {return cbrt(__x);} 578*e5dd7070Spatrick 579*e5dd7070Spatrick static long double 580*e5dd7070Spatrick _TG_ATTRS __tg_cbrt(long double __x)581*e5dd7070Spatrick __tg_cbrt(long double __x) {return cbrtl(__x);} 582*e5dd7070Spatrick 583*e5dd7070Spatrick #undef cbrt 584*e5dd7070Spatrick #define cbrt(__x) __tg_cbrt(__tg_promote1((__x))(__x)) 585*e5dd7070Spatrick 586*e5dd7070Spatrick // ceil 587*e5dd7070Spatrick 588*e5dd7070Spatrick static float 589*e5dd7070Spatrick _TG_ATTRS __tg_ceil(float __x)590*e5dd7070Spatrick __tg_ceil(float __x) {return ceilf(__x);} 591*e5dd7070Spatrick 592*e5dd7070Spatrick static double 593*e5dd7070Spatrick _TG_ATTRS __tg_ceil(double __x)594*e5dd7070Spatrick __tg_ceil(double __x) {return ceil(__x);} 595*e5dd7070Spatrick 596*e5dd7070Spatrick static long double 597*e5dd7070Spatrick _TG_ATTRS __tg_ceil(long double __x)598*e5dd7070Spatrick __tg_ceil(long double __x) {return ceill(__x);} 599*e5dd7070Spatrick 600*e5dd7070Spatrick #undef ceil 601*e5dd7070Spatrick #define ceil(__x) __tg_ceil(__tg_promote1((__x))(__x)) 602*e5dd7070Spatrick 603*e5dd7070Spatrick // copysign 604*e5dd7070Spatrick 605*e5dd7070Spatrick static float 606*e5dd7070Spatrick _TG_ATTRS __tg_copysign(float __x,float __y)607*e5dd7070Spatrick __tg_copysign(float __x, float __y) {return copysignf(__x, __y);} 608*e5dd7070Spatrick 609*e5dd7070Spatrick static double 610*e5dd7070Spatrick _TG_ATTRS __tg_copysign(double __x,double __y)611*e5dd7070Spatrick __tg_copysign(double __x, double __y) {return copysign(__x, __y);} 612*e5dd7070Spatrick 613*e5dd7070Spatrick static long double 614*e5dd7070Spatrick _TG_ATTRS __tg_copysign(long double __x,long double __y)615*e5dd7070Spatrick __tg_copysign(long double __x, long double __y) {return copysignl(__x, __y);} 616*e5dd7070Spatrick 617*e5dd7070Spatrick #undef copysign 618*e5dd7070Spatrick #define copysign(__x, __y) __tg_copysign(__tg_promote2((__x), (__y))(__x), \ 619*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 620*e5dd7070Spatrick 621*e5dd7070Spatrick // erf 622*e5dd7070Spatrick 623*e5dd7070Spatrick static float 624*e5dd7070Spatrick _TG_ATTRS __tg_erf(float __x)625*e5dd7070Spatrick __tg_erf(float __x) {return erff(__x);} 626*e5dd7070Spatrick 627*e5dd7070Spatrick static double 628*e5dd7070Spatrick _TG_ATTRS __tg_erf(double __x)629*e5dd7070Spatrick __tg_erf(double __x) {return erf(__x);} 630*e5dd7070Spatrick 631*e5dd7070Spatrick static long double 632*e5dd7070Spatrick _TG_ATTRS __tg_erf(long double __x)633*e5dd7070Spatrick __tg_erf(long double __x) {return erfl(__x);} 634*e5dd7070Spatrick 635*e5dd7070Spatrick #undef erf 636*e5dd7070Spatrick #define erf(__x) __tg_erf(__tg_promote1((__x))(__x)) 637*e5dd7070Spatrick 638*e5dd7070Spatrick // erfc 639*e5dd7070Spatrick 640*e5dd7070Spatrick static float 641*e5dd7070Spatrick _TG_ATTRS __tg_erfc(float __x)642*e5dd7070Spatrick __tg_erfc(float __x) {return erfcf(__x);} 643*e5dd7070Spatrick 644*e5dd7070Spatrick static double 645*e5dd7070Spatrick _TG_ATTRS __tg_erfc(double __x)646*e5dd7070Spatrick __tg_erfc(double __x) {return erfc(__x);} 647*e5dd7070Spatrick 648*e5dd7070Spatrick static long double 649*e5dd7070Spatrick _TG_ATTRS __tg_erfc(long double __x)650*e5dd7070Spatrick __tg_erfc(long double __x) {return erfcl(__x);} 651*e5dd7070Spatrick 652*e5dd7070Spatrick #undef erfc 653*e5dd7070Spatrick #define erfc(__x) __tg_erfc(__tg_promote1((__x))(__x)) 654*e5dd7070Spatrick 655*e5dd7070Spatrick // exp2 656*e5dd7070Spatrick 657*e5dd7070Spatrick static float 658*e5dd7070Spatrick _TG_ATTRS __tg_exp2(float __x)659*e5dd7070Spatrick __tg_exp2(float __x) {return exp2f(__x);} 660*e5dd7070Spatrick 661*e5dd7070Spatrick static double 662*e5dd7070Spatrick _TG_ATTRS __tg_exp2(double __x)663*e5dd7070Spatrick __tg_exp2(double __x) {return exp2(__x);} 664*e5dd7070Spatrick 665*e5dd7070Spatrick static long double 666*e5dd7070Spatrick _TG_ATTRS __tg_exp2(long double __x)667*e5dd7070Spatrick __tg_exp2(long double __x) {return exp2l(__x);} 668*e5dd7070Spatrick 669*e5dd7070Spatrick #undef exp2 670*e5dd7070Spatrick #define exp2(__x) __tg_exp2(__tg_promote1((__x))(__x)) 671*e5dd7070Spatrick 672*e5dd7070Spatrick // expm1 673*e5dd7070Spatrick 674*e5dd7070Spatrick static float 675*e5dd7070Spatrick _TG_ATTRS __tg_expm1(float __x)676*e5dd7070Spatrick __tg_expm1(float __x) {return expm1f(__x);} 677*e5dd7070Spatrick 678*e5dd7070Spatrick static double 679*e5dd7070Spatrick _TG_ATTRS __tg_expm1(double __x)680*e5dd7070Spatrick __tg_expm1(double __x) {return expm1(__x);} 681*e5dd7070Spatrick 682*e5dd7070Spatrick static long double 683*e5dd7070Spatrick _TG_ATTRS __tg_expm1(long double __x)684*e5dd7070Spatrick __tg_expm1(long double __x) {return expm1l(__x);} 685*e5dd7070Spatrick 686*e5dd7070Spatrick #undef expm1 687*e5dd7070Spatrick #define expm1(__x) __tg_expm1(__tg_promote1((__x))(__x)) 688*e5dd7070Spatrick 689*e5dd7070Spatrick // fdim 690*e5dd7070Spatrick 691*e5dd7070Spatrick static float 692*e5dd7070Spatrick _TG_ATTRS __tg_fdim(float __x,float __y)693*e5dd7070Spatrick __tg_fdim(float __x, float __y) {return fdimf(__x, __y);} 694*e5dd7070Spatrick 695*e5dd7070Spatrick static double 696*e5dd7070Spatrick _TG_ATTRS __tg_fdim(double __x,double __y)697*e5dd7070Spatrick __tg_fdim(double __x, double __y) {return fdim(__x, __y);} 698*e5dd7070Spatrick 699*e5dd7070Spatrick static long double 700*e5dd7070Spatrick _TG_ATTRS __tg_fdim(long double __x,long double __y)701*e5dd7070Spatrick __tg_fdim(long double __x, long double __y) {return fdiml(__x, __y);} 702*e5dd7070Spatrick 703*e5dd7070Spatrick #undef fdim 704*e5dd7070Spatrick #define fdim(__x, __y) __tg_fdim(__tg_promote2((__x), (__y))(__x), \ 705*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 706*e5dd7070Spatrick 707*e5dd7070Spatrick // floor 708*e5dd7070Spatrick 709*e5dd7070Spatrick static float 710*e5dd7070Spatrick _TG_ATTRS __tg_floor(float __x)711*e5dd7070Spatrick __tg_floor(float __x) {return floorf(__x);} 712*e5dd7070Spatrick 713*e5dd7070Spatrick static double 714*e5dd7070Spatrick _TG_ATTRS __tg_floor(double __x)715*e5dd7070Spatrick __tg_floor(double __x) {return floor(__x);} 716*e5dd7070Spatrick 717*e5dd7070Spatrick static long double 718*e5dd7070Spatrick _TG_ATTRS __tg_floor(long double __x)719*e5dd7070Spatrick __tg_floor(long double __x) {return floorl(__x);} 720*e5dd7070Spatrick 721*e5dd7070Spatrick #undef floor 722*e5dd7070Spatrick #define floor(__x) __tg_floor(__tg_promote1((__x))(__x)) 723*e5dd7070Spatrick 724*e5dd7070Spatrick // fma 725*e5dd7070Spatrick 726*e5dd7070Spatrick static float 727*e5dd7070Spatrick _TG_ATTRS __tg_fma(float __x,float __y,float __z)728*e5dd7070Spatrick __tg_fma(float __x, float __y, float __z) 729*e5dd7070Spatrick {return fmaf(__x, __y, __z);} 730*e5dd7070Spatrick 731*e5dd7070Spatrick static double 732*e5dd7070Spatrick _TG_ATTRS __tg_fma(double __x,double __y,double __z)733*e5dd7070Spatrick __tg_fma(double __x, double __y, double __z) 734*e5dd7070Spatrick {return fma(__x, __y, __z);} 735*e5dd7070Spatrick 736*e5dd7070Spatrick static long double 737*e5dd7070Spatrick _TG_ATTRS __tg_fma(long double __x,long double __y,long double __z)738*e5dd7070Spatrick __tg_fma(long double __x,long double __y, long double __z) 739*e5dd7070Spatrick {return fmal(__x, __y, __z);} 740*e5dd7070Spatrick 741*e5dd7070Spatrick #undef fma 742*e5dd7070Spatrick #define fma(__x, __y, __z) \ 743*e5dd7070Spatrick __tg_fma(__tg_promote3((__x), (__y), (__z))(__x), \ 744*e5dd7070Spatrick __tg_promote3((__x), (__y), (__z))(__y), \ 745*e5dd7070Spatrick __tg_promote3((__x), (__y), (__z))(__z)) 746*e5dd7070Spatrick 747*e5dd7070Spatrick // fmax 748*e5dd7070Spatrick 749*e5dd7070Spatrick static float 750*e5dd7070Spatrick _TG_ATTRS __tg_fmax(float __x,float __y)751*e5dd7070Spatrick __tg_fmax(float __x, float __y) {return fmaxf(__x, __y);} 752*e5dd7070Spatrick 753*e5dd7070Spatrick static double 754*e5dd7070Spatrick _TG_ATTRS __tg_fmax(double __x,double __y)755*e5dd7070Spatrick __tg_fmax(double __x, double __y) {return fmax(__x, __y);} 756*e5dd7070Spatrick 757*e5dd7070Spatrick static long double 758*e5dd7070Spatrick _TG_ATTRS __tg_fmax(long double __x,long double __y)759*e5dd7070Spatrick __tg_fmax(long double __x, long double __y) {return fmaxl(__x, __y);} 760*e5dd7070Spatrick 761*e5dd7070Spatrick #undef fmax 762*e5dd7070Spatrick #define fmax(__x, __y) __tg_fmax(__tg_promote2((__x), (__y))(__x), \ 763*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 764*e5dd7070Spatrick 765*e5dd7070Spatrick // fmin 766*e5dd7070Spatrick 767*e5dd7070Spatrick static float 768*e5dd7070Spatrick _TG_ATTRS __tg_fmin(float __x,float __y)769*e5dd7070Spatrick __tg_fmin(float __x, float __y) {return fminf(__x, __y);} 770*e5dd7070Spatrick 771*e5dd7070Spatrick static double 772*e5dd7070Spatrick _TG_ATTRS __tg_fmin(double __x,double __y)773*e5dd7070Spatrick __tg_fmin(double __x, double __y) {return fmin(__x, __y);} 774*e5dd7070Spatrick 775*e5dd7070Spatrick static long double 776*e5dd7070Spatrick _TG_ATTRS __tg_fmin(long double __x,long double __y)777*e5dd7070Spatrick __tg_fmin(long double __x, long double __y) {return fminl(__x, __y);} 778*e5dd7070Spatrick 779*e5dd7070Spatrick #undef fmin 780*e5dd7070Spatrick #define fmin(__x, __y) __tg_fmin(__tg_promote2((__x), (__y))(__x), \ 781*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 782*e5dd7070Spatrick 783*e5dd7070Spatrick // fmod 784*e5dd7070Spatrick 785*e5dd7070Spatrick static float 786*e5dd7070Spatrick _TG_ATTRS __tg_fmod(float __x,float __y)787*e5dd7070Spatrick __tg_fmod(float __x, float __y) {return fmodf(__x, __y);} 788*e5dd7070Spatrick 789*e5dd7070Spatrick static double 790*e5dd7070Spatrick _TG_ATTRS __tg_fmod(double __x,double __y)791*e5dd7070Spatrick __tg_fmod(double __x, double __y) {return fmod(__x, __y);} 792*e5dd7070Spatrick 793*e5dd7070Spatrick static long double 794*e5dd7070Spatrick _TG_ATTRS __tg_fmod(long double __x,long double __y)795*e5dd7070Spatrick __tg_fmod(long double __x, long double __y) {return fmodl(__x, __y);} 796*e5dd7070Spatrick 797*e5dd7070Spatrick #undef fmod 798*e5dd7070Spatrick #define fmod(__x, __y) __tg_fmod(__tg_promote2((__x), (__y))(__x), \ 799*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 800*e5dd7070Spatrick 801*e5dd7070Spatrick // frexp 802*e5dd7070Spatrick 803*e5dd7070Spatrick static float 804*e5dd7070Spatrick _TG_ATTRS __tg_frexp(float __x,int * __y)805*e5dd7070Spatrick __tg_frexp(float __x, int* __y) {return frexpf(__x, __y);} 806*e5dd7070Spatrick 807*e5dd7070Spatrick static double 808*e5dd7070Spatrick _TG_ATTRS __tg_frexp(double __x,int * __y)809*e5dd7070Spatrick __tg_frexp(double __x, int* __y) {return frexp(__x, __y);} 810*e5dd7070Spatrick 811*e5dd7070Spatrick static long double 812*e5dd7070Spatrick _TG_ATTRS __tg_frexp(long double __x,int * __y)813*e5dd7070Spatrick __tg_frexp(long double __x, int* __y) {return frexpl(__x, __y);} 814*e5dd7070Spatrick 815*e5dd7070Spatrick #undef frexp 816*e5dd7070Spatrick #define frexp(__x, __y) __tg_frexp(__tg_promote1((__x))(__x), __y) 817*e5dd7070Spatrick 818*e5dd7070Spatrick // hypot 819*e5dd7070Spatrick 820*e5dd7070Spatrick static float 821*e5dd7070Spatrick _TG_ATTRS __tg_hypot(float __x,float __y)822*e5dd7070Spatrick __tg_hypot(float __x, float __y) {return hypotf(__x, __y);} 823*e5dd7070Spatrick 824*e5dd7070Spatrick static double 825*e5dd7070Spatrick _TG_ATTRS __tg_hypot(double __x,double __y)826*e5dd7070Spatrick __tg_hypot(double __x, double __y) {return hypot(__x, __y);} 827*e5dd7070Spatrick 828*e5dd7070Spatrick static long double 829*e5dd7070Spatrick _TG_ATTRS __tg_hypot(long double __x,long double __y)830*e5dd7070Spatrick __tg_hypot(long double __x, long double __y) {return hypotl(__x, __y);} 831*e5dd7070Spatrick 832*e5dd7070Spatrick #undef hypot 833*e5dd7070Spatrick #define hypot(__x, __y) __tg_hypot(__tg_promote2((__x), (__y))(__x), \ 834*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 835*e5dd7070Spatrick 836*e5dd7070Spatrick // ilogb 837*e5dd7070Spatrick 838*e5dd7070Spatrick static int 839*e5dd7070Spatrick _TG_ATTRS __tg_ilogb(float __x)840*e5dd7070Spatrick __tg_ilogb(float __x) {return ilogbf(__x);} 841*e5dd7070Spatrick 842*e5dd7070Spatrick static int 843*e5dd7070Spatrick _TG_ATTRS __tg_ilogb(double __x)844*e5dd7070Spatrick __tg_ilogb(double __x) {return ilogb(__x);} 845*e5dd7070Spatrick 846*e5dd7070Spatrick static int 847*e5dd7070Spatrick _TG_ATTRS __tg_ilogb(long double __x)848*e5dd7070Spatrick __tg_ilogb(long double __x) {return ilogbl(__x);} 849*e5dd7070Spatrick 850*e5dd7070Spatrick #undef ilogb 851*e5dd7070Spatrick #define ilogb(__x) __tg_ilogb(__tg_promote1((__x))(__x)) 852*e5dd7070Spatrick 853*e5dd7070Spatrick // ldexp 854*e5dd7070Spatrick 855*e5dd7070Spatrick static float 856*e5dd7070Spatrick _TG_ATTRS __tg_ldexp(float __x,int __y)857*e5dd7070Spatrick __tg_ldexp(float __x, int __y) {return ldexpf(__x, __y);} 858*e5dd7070Spatrick 859*e5dd7070Spatrick static double 860*e5dd7070Spatrick _TG_ATTRS __tg_ldexp(double __x,int __y)861*e5dd7070Spatrick __tg_ldexp(double __x, int __y) {return ldexp(__x, __y);} 862*e5dd7070Spatrick 863*e5dd7070Spatrick static long double 864*e5dd7070Spatrick _TG_ATTRS __tg_ldexp(long double __x,int __y)865*e5dd7070Spatrick __tg_ldexp(long double __x, int __y) {return ldexpl(__x, __y);} 866*e5dd7070Spatrick 867*e5dd7070Spatrick #undef ldexp 868*e5dd7070Spatrick #define ldexp(__x, __y) __tg_ldexp(__tg_promote1((__x))(__x), __y) 869*e5dd7070Spatrick 870*e5dd7070Spatrick // lgamma 871*e5dd7070Spatrick 872*e5dd7070Spatrick static float 873*e5dd7070Spatrick _TG_ATTRS __tg_lgamma(float __x)874*e5dd7070Spatrick __tg_lgamma(float __x) {return lgammaf(__x);} 875*e5dd7070Spatrick 876*e5dd7070Spatrick static double 877*e5dd7070Spatrick _TG_ATTRS __tg_lgamma(double __x)878*e5dd7070Spatrick __tg_lgamma(double __x) {return lgamma(__x);} 879*e5dd7070Spatrick 880*e5dd7070Spatrick static long double 881*e5dd7070Spatrick _TG_ATTRS __tg_lgamma(long double __x)882*e5dd7070Spatrick __tg_lgamma(long double __x) {return lgammal(__x);} 883*e5dd7070Spatrick 884*e5dd7070Spatrick #undef lgamma 885*e5dd7070Spatrick #define lgamma(__x) __tg_lgamma(__tg_promote1((__x))(__x)) 886*e5dd7070Spatrick 887*e5dd7070Spatrick // llrint 888*e5dd7070Spatrick 889*e5dd7070Spatrick static long long 890*e5dd7070Spatrick _TG_ATTRS __tg_llrint(float __x)891*e5dd7070Spatrick __tg_llrint(float __x) {return llrintf(__x);} 892*e5dd7070Spatrick 893*e5dd7070Spatrick static long long 894*e5dd7070Spatrick _TG_ATTRS __tg_llrint(double __x)895*e5dd7070Spatrick __tg_llrint(double __x) {return llrint(__x);} 896*e5dd7070Spatrick 897*e5dd7070Spatrick static long long 898*e5dd7070Spatrick _TG_ATTRS __tg_llrint(long double __x)899*e5dd7070Spatrick __tg_llrint(long double __x) {return llrintl(__x);} 900*e5dd7070Spatrick 901*e5dd7070Spatrick #undef llrint 902*e5dd7070Spatrick #define llrint(__x) __tg_llrint(__tg_promote1((__x))(__x)) 903*e5dd7070Spatrick 904*e5dd7070Spatrick // llround 905*e5dd7070Spatrick 906*e5dd7070Spatrick static long long 907*e5dd7070Spatrick _TG_ATTRS __tg_llround(float __x)908*e5dd7070Spatrick __tg_llround(float __x) {return llroundf(__x);} 909*e5dd7070Spatrick 910*e5dd7070Spatrick static long long 911*e5dd7070Spatrick _TG_ATTRS __tg_llround(double __x)912*e5dd7070Spatrick __tg_llround(double __x) {return llround(__x);} 913*e5dd7070Spatrick 914*e5dd7070Spatrick static long long 915*e5dd7070Spatrick _TG_ATTRS __tg_llround(long double __x)916*e5dd7070Spatrick __tg_llround(long double __x) {return llroundl(__x);} 917*e5dd7070Spatrick 918*e5dd7070Spatrick #undef llround 919*e5dd7070Spatrick #define llround(__x) __tg_llround(__tg_promote1((__x))(__x)) 920*e5dd7070Spatrick 921*e5dd7070Spatrick // log10 922*e5dd7070Spatrick 923*e5dd7070Spatrick static float 924*e5dd7070Spatrick _TG_ATTRS __tg_log10(float __x)925*e5dd7070Spatrick __tg_log10(float __x) {return log10f(__x);} 926*e5dd7070Spatrick 927*e5dd7070Spatrick static double 928*e5dd7070Spatrick _TG_ATTRS __tg_log10(double __x)929*e5dd7070Spatrick __tg_log10(double __x) {return log10(__x);} 930*e5dd7070Spatrick 931*e5dd7070Spatrick static long double 932*e5dd7070Spatrick _TG_ATTRS __tg_log10(long double __x)933*e5dd7070Spatrick __tg_log10(long double __x) {return log10l(__x);} 934*e5dd7070Spatrick 935*e5dd7070Spatrick #undef log10 936*e5dd7070Spatrick #define log10(__x) __tg_log10(__tg_promote1((__x))(__x)) 937*e5dd7070Spatrick 938*e5dd7070Spatrick // log1p 939*e5dd7070Spatrick 940*e5dd7070Spatrick static float 941*e5dd7070Spatrick _TG_ATTRS __tg_log1p(float __x)942*e5dd7070Spatrick __tg_log1p(float __x) {return log1pf(__x);} 943*e5dd7070Spatrick 944*e5dd7070Spatrick static double 945*e5dd7070Spatrick _TG_ATTRS __tg_log1p(double __x)946*e5dd7070Spatrick __tg_log1p(double __x) {return log1p(__x);} 947*e5dd7070Spatrick 948*e5dd7070Spatrick static long double 949*e5dd7070Spatrick _TG_ATTRS __tg_log1p(long double __x)950*e5dd7070Spatrick __tg_log1p(long double __x) {return log1pl(__x);} 951*e5dd7070Spatrick 952*e5dd7070Spatrick #undef log1p 953*e5dd7070Spatrick #define log1p(__x) __tg_log1p(__tg_promote1((__x))(__x)) 954*e5dd7070Spatrick 955*e5dd7070Spatrick // log2 956*e5dd7070Spatrick 957*e5dd7070Spatrick static float 958*e5dd7070Spatrick _TG_ATTRS __tg_log2(float __x)959*e5dd7070Spatrick __tg_log2(float __x) {return log2f(__x);} 960*e5dd7070Spatrick 961*e5dd7070Spatrick static double 962*e5dd7070Spatrick _TG_ATTRS __tg_log2(double __x)963*e5dd7070Spatrick __tg_log2(double __x) {return log2(__x);} 964*e5dd7070Spatrick 965*e5dd7070Spatrick static long double 966*e5dd7070Spatrick _TG_ATTRS __tg_log2(long double __x)967*e5dd7070Spatrick __tg_log2(long double __x) {return log2l(__x);} 968*e5dd7070Spatrick 969*e5dd7070Spatrick #undef log2 970*e5dd7070Spatrick #define log2(__x) __tg_log2(__tg_promote1((__x))(__x)) 971*e5dd7070Spatrick 972*e5dd7070Spatrick // logb 973*e5dd7070Spatrick 974*e5dd7070Spatrick static float 975*e5dd7070Spatrick _TG_ATTRS __tg_logb(float __x)976*e5dd7070Spatrick __tg_logb(float __x) {return logbf(__x);} 977*e5dd7070Spatrick 978*e5dd7070Spatrick static double 979*e5dd7070Spatrick _TG_ATTRS __tg_logb(double __x)980*e5dd7070Spatrick __tg_logb(double __x) {return logb(__x);} 981*e5dd7070Spatrick 982*e5dd7070Spatrick static long double 983*e5dd7070Spatrick _TG_ATTRS __tg_logb(long double __x)984*e5dd7070Spatrick __tg_logb(long double __x) {return logbl(__x);} 985*e5dd7070Spatrick 986*e5dd7070Spatrick #undef logb 987*e5dd7070Spatrick #define logb(__x) __tg_logb(__tg_promote1((__x))(__x)) 988*e5dd7070Spatrick 989*e5dd7070Spatrick // lrint 990*e5dd7070Spatrick 991*e5dd7070Spatrick static long 992*e5dd7070Spatrick _TG_ATTRS __tg_lrint(float __x)993*e5dd7070Spatrick __tg_lrint(float __x) {return lrintf(__x);} 994*e5dd7070Spatrick 995*e5dd7070Spatrick static long 996*e5dd7070Spatrick _TG_ATTRS __tg_lrint(double __x)997*e5dd7070Spatrick __tg_lrint(double __x) {return lrint(__x);} 998*e5dd7070Spatrick 999*e5dd7070Spatrick static long 1000*e5dd7070Spatrick _TG_ATTRS __tg_lrint(long double __x)1001*e5dd7070Spatrick __tg_lrint(long double __x) {return lrintl(__x);} 1002*e5dd7070Spatrick 1003*e5dd7070Spatrick #undef lrint 1004*e5dd7070Spatrick #define lrint(__x) __tg_lrint(__tg_promote1((__x))(__x)) 1005*e5dd7070Spatrick 1006*e5dd7070Spatrick // lround 1007*e5dd7070Spatrick 1008*e5dd7070Spatrick static long 1009*e5dd7070Spatrick _TG_ATTRS __tg_lround(float __x)1010*e5dd7070Spatrick __tg_lround(float __x) {return lroundf(__x);} 1011*e5dd7070Spatrick 1012*e5dd7070Spatrick static long 1013*e5dd7070Spatrick _TG_ATTRS __tg_lround(double __x)1014*e5dd7070Spatrick __tg_lround(double __x) {return lround(__x);} 1015*e5dd7070Spatrick 1016*e5dd7070Spatrick static long 1017*e5dd7070Spatrick _TG_ATTRS __tg_lround(long double __x)1018*e5dd7070Spatrick __tg_lround(long double __x) {return lroundl(__x);} 1019*e5dd7070Spatrick 1020*e5dd7070Spatrick #undef lround 1021*e5dd7070Spatrick #define lround(__x) __tg_lround(__tg_promote1((__x))(__x)) 1022*e5dd7070Spatrick 1023*e5dd7070Spatrick // nearbyint 1024*e5dd7070Spatrick 1025*e5dd7070Spatrick static float 1026*e5dd7070Spatrick _TG_ATTRS __tg_nearbyint(float __x)1027*e5dd7070Spatrick __tg_nearbyint(float __x) {return nearbyintf(__x);} 1028*e5dd7070Spatrick 1029*e5dd7070Spatrick static double 1030*e5dd7070Spatrick _TG_ATTRS __tg_nearbyint(double __x)1031*e5dd7070Spatrick __tg_nearbyint(double __x) {return nearbyint(__x);} 1032*e5dd7070Spatrick 1033*e5dd7070Spatrick static long double 1034*e5dd7070Spatrick _TG_ATTRS __tg_nearbyint(long double __x)1035*e5dd7070Spatrick __tg_nearbyint(long double __x) {return nearbyintl(__x);} 1036*e5dd7070Spatrick 1037*e5dd7070Spatrick #undef nearbyint 1038*e5dd7070Spatrick #define nearbyint(__x) __tg_nearbyint(__tg_promote1((__x))(__x)) 1039*e5dd7070Spatrick 1040*e5dd7070Spatrick // nextafter 1041*e5dd7070Spatrick 1042*e5dd7070Spatrick static float 1043*e5dd7070Spatrick _TG_ATTRS __tg_nextafter(float __x,float __y)1044*e5dd7070Spatrick __tg_nextafter(float __x, float __y) {return nextafterf(__x, __y);} 1045*e5dd7070Spatrick 1046*e5dd7070Spatrick static double 1047*e5dd7070Spatrick _TG_ATTRS __tg_nextafter(double __x,double __y)1048*e5dd7070Spatrick __tg_nextafter(double __x, double __y) {return nextafter(__x, __y);} 1049*e5dd7070Spatrick 1050*e5dd7070Spatrick static long double 1051*e5dd7070Spatrick _TG_ATTRS __tg_nextafter(long double __x,long double __y)1052*e5dd7070Spatrick __tg_nextafter(long double __x, long double __y) {return nextafterl(__x, __y);} 1053*e5dd7070Spatrick 1054*e5dd7070Spatrick #undef nextafter 1055*e5dd7070Spatrick #define nextafter(__x, __y) __tg_nextafter(__tg_promote2((__x), (__y))(__x), \ 1056*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 1057*e5dd7070Spatrick 1058*e5dd7070Spatrick // nexttoward 1059*e5dd7070Spatrick 1060*e5dd7070Spatrick static float 1061*e5dd7070Spatrick _TG_ATTRS __tg_nexttoward(float __x,long double __y)1062*e5dd7070Spatrick __tg_nexttoward(float __x, long double __y) {return nexttowardf(__x, __y);} 1063*e5dd7070Spatrick 1064*e5dd7070Spatrick static double 1065*e5dd7070Spatrick _TG_ATTRS __tg_nexttoward(double __x,long double __y)1066*e5dd7070Spatrick __tg_nexttoward(double __x, long double __y) {return nexttoward(__x, __y);} 1067*e5dd7070Spatrick 1068*e5dd7070Spatrick static long double 1069*e5dd7070Spatrick _TG_ATTRS __tg_nexttoward(long double __x,long double __y)1070*e5dd7070Spatrick __tg_nexttoward(long double __x, long double __y) {return nexttowardl(__x, __y);} 1071*e5dd7070Spatrick 1072*e5dd7070Spatrick #undef nexttoward 1073*e5dd7070Spatrick #define nexttoward(__x, __y) __tg_nexttoward(__tg_promote1((__x))(__x), (__y)) 1074*e5dd7070Spatrick 1075*e5dd7070Spatrick // remainder 1076*e5dd7070Spatrick 1077*e5dd7070Spatrick static float 1078*e5dd7070Spatrick _TG_ATTRS __tg_remainder(float __x,float __y)1079*e5dd7070Spatrick __tg_remainder(float __x, float __y) {return remainderf(__x, __y);} 1080*e5dd7070Spatrick 1081*e5dd7070Spatrick static double 1082*e5dd7070Spatrick _TG_ATTRS __tg_remainder(double __x,double __y)1083*e5dd7070Spatrick __tg_remainder(double __x, double __y) {return remainder(__x, __y);} 1084*e5dd7070Spatrick 1085*e5dd7070Spatrick static long double 1086*e5dd7070Spatrick _TG_ATTRS __tg_remainder(long double __x,long double __y)1087*e5dd7070Spatrick __tg_remainder(long double __x, long double __y) {return remainderl(__x, __y);} 1088*e5dd7070Spatrick 1089*e5dd7070Spatrick #undef remainder 1090*e5dd7070Spatrick #define remainder(__x, __y) __tg_remainder(__tg_promote2((__x), (__y))(__x), \ 1091*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y)) 1092*e5dd7070Spatrick 1093*e5dd7070Spatrick // remquo 1094*e5dd7070Spatrick 1095*e5dd7070Spatrick static float 1096*e5dd7070Spatrick _TG_ATTRS __tg_remquo(float __x,float __y,int * __z)1097*e5dd7070Spatrick __tg_remquo(float __x, float __y, int* __z) 1098*e5dd7070Spatrick {return remquof(__x, __y, __z);} 1099*e5dd7070Spatrick 1100*e5dd7070Spatrick static double 1101*e5dd7070Spatrick _TG_ATTRS __tg_remquo(double __x,double __y,int * __z)1102*e5dd7070Spatrick __tg_remquo(double __x, double __y, int* __z) 1103*e5dd7070Spatrick {return remquo(__x, __y, __z);} 1104*e5dd7070Spatrick 1105*e5dd7070Spatrick static long double 1106*e5dd7070Spatrick _TG_ATTRS __tg_remquo(long double __x,long double __y,int * __z)1107*e5dd7070Spatrick __tg_remquo(long double __x,long double __y, int* __z) 1108*e5dd7070Spatrick {return remquol(__x, __y, __z);} 1109*e5dd7070Spatrick 1110*e5dd7070Spatrick #undef remquo 1111*e5dd7070Spatrick #define remquo(__x, __y, __z) \ 1112*e5dd7070Spatrick __tg_remquo(__tg_promote2((__x), (__y))(__x), \ 1113*e5dd7070Spatrick __tg_promote2((__x), (__y))(__y), \ 1114*e5dd7070Spatrick (__z)) 1115*e5dd7070Spatrick 1116*e5dd7070Spatrick // rint 1117*e5dd7070Spatrick 1118*e5dd7070Spatrick static float 1119*e5dd7070Spatrick _TG_ATTRS __tg_rint(float __x)1120*e5dd7070Spatrick __tg_rint(float __x) {return rintf(__x);} 1121*e5dd7070Spatrick 1122*e5dd7070Spatrick static double 1123*e5dd7070Spatrick _TG_ATTRS __tg_rint(double __x)1124*e5dd7070Spatrick __tg_rint(double __x) {return rint(__x);} 1125*e5dd7070Spatrick 1126*e5dd7070Spatrick static long double 1127*e5dd7070Spatrick _TG_ATTRS __tg_rint(long double __x)1128*e5dd7070Spatrick __tg_rint(long double __x) {return rintl(__x);} 1129*e5dd7070Spatrick 1130*e5dd7070Spatrick #undef rint 1131*e5dd7070Spatrick #define rint(__x) __tg_rint(__tg_promote1((__x))(__x)) 1132*e5dd7070Spatrick 1133*e5dd7070Spatrick // round 1134*e5dd7070Spatrick 1135*e5dd7070Spatrick static float 1136*e5dd7070Spatrick _TG_ATTRS __tg_round(float __x)1137*e5dd7070Spatrick __tg_round(float __x) {return roundf(__x);} 1138*e5dd7070Spatrick 1139*e5dd7070Spatrick static double 1140*e5dd7070Spatrick _TG_ATTRS __tg_round(double __x)1141*e5dd7070Spatrick __tg_round(double __x) {return round(__x);} 1142*e5dd7070Spatrick 1143*e5dd7070Spatrick static long double 1144*e5dd7070Spatrick _TG_ATTRS __tg_round(long double __x)1145*e5dd7070Spatrick __tg_round(long double __x) {return roundl(__x);} 1146*e5dd7070Spatrick 1147*e5dd7070Spatrick #undef round 1148*e5dd7070Spatrick #define round(__x) __tg_round(__tg_promote1((__x))(__x)) 1149*e5dd7070Spatrick 1150*e5dd7070Spatrick // scalbn 1151*e5dd7070Spatrick 1152*e5dd7070Spatrick static float 1153*e5dd7070Spatrick _TG_ATTRS __tg_scalbn(float __x,int __y)1154*e5dd7070Spatrick __tg_scalbn(float __x, int __y) {return scalbnf(__x, __y);} 1155*e5dd7070Spatrick 1156*e5dd7070Spatrick static double 1157*e5dd7070Spatrick _TG_ATTRS __tg_scalbn(double __x,int __y)1158*e5dd7070Spatrick __tg_scalbn(double __x, int __y) {return scalbn(__x, __y);} 1159*e5dd7070Spatrick 1160*e5dd7070Spatrick static long double 1161*e5dd7070Spatrick _TG_ATTRS __tg_scalbn(long double __x,int __y)1162*e5dd7070Spatrick __tg_scalbn(long double __x, int __y) {return scalbnl(__x, __y);} 1163*e5dd7070Spatrick 1164*e5dd7070Spatrick #undef scalbn 1165*e5dd7070Spatrick #define scalbn(__x, __y) __tg_scalbn(__tg_promote1((__x))(__x), __y) 1166*e5dd7070Spatrick 1167*e5dd7070Spatrick // scalbln 1168*e5dd7070Spatrick 1169*e5dd7070Spatrick static float 1170*e5dd7070Spatrick _TG_ATTRS __tg_scalbln(float __x,long __y)1171*e5dd7070Spatrick __tg_scalbln(float __x, long __y) {return scalblnf(__x, __y);} 1172*e5dd7070Spatrick 1173*e5dd7070Spatrick static double 1174*e5dd7070Spatrick _TG_ATTRS __tg_scalbln(double __x,long __y)1175*e5dd7070Spatrick __tg_scalbln(double __x, long __y) {return scalbln(__x, __y);} 1176*e5dd7070Spatrick 1177*e5dd7070Spatrick static long double 1178*e5dd7070Spatrick _TG_ATTRS __tg_scalbln(long double __x,long __y)1179*e5dd7070Spatrick __tg_scalbln(long double __x, long __y) {return scalblnl(__x, __y);} 1180*e5dd7070Spatrick 1181*e5dd7070Spatrick #undef scalbln 1182*e5dd7070Spatrick #define scalbln(__x, __y) __tg_scalbln(__tg_promote1((__x))(__x), __y) 1183*e5dd7070Spatrick 1184*e5dd7070Spatrick // tgamma 1185*e5dd7070Spatrick 1186*e5dd7070Spatrick static float 1187*e5dd7070Spatrick _TG_ATTRS __tg_tgamma(float __x)1188*e5dd7070Spatrick __tg_tgamma(float __x) {return tgammaf(__x);} 1189*e5dd7070Spatrick 1190*e5dd7070Spatrick static double 1191*e5dd7070Spatrick _TG_ATTRS __tg_tgamma(double __x)1192*e5dd7070Spatrick __tg_tgamma(double __x) {return tgamma(__x);} 1193*e5dd7070Spatrick 1194*e5dd7070Spatrick static long double 1195*e5dd7070Spatrick _TG_ATTRS __tg_tgamma(long double __x)1196*e5dd7070Spatrick __tg_tgamma(long double __x) {return tgammal(__x);} 1197*e5dd7070Spatrick 1198*e5dd7070Spatrick #undef tgamma 1199*e5dd7070Spatrick #define tgamma(__x) __tg_tgamma(__tg_promote1((__x))(__x)) 1200*e5dd7070Spatrick 1201*e5dd7070Spatrick // trunc 1202*e5dd7070Spatrick 1203*e5dd7070Spatrick static float 1204*e5dd7070Spatrick _TG_ATTRS __tg_trunc(float __x)1205*e5dd7070Spatrick __tg_trunc(float __x) {return truncf(__x);} 1206*e5dd7070Spatrick 1207*e5dd7070Spatrick static double 1208*e5dd7070Spatrick _TG_ATTRS __tg_trunc(double __x)1209*e5dd7070Spatrick __tg_trunc(double __x) {return trunc(__x);} 1210*e5dd7070Spatrick 1211*e5dd7070Spatrick static long double 1212*e5dd7070Spatrick _TG_ATTRS __tg_trunc(long double __x)1213*e5dd7070Spatrick __tg_trunc(long double __x) {return truncl(__x);} 1214*e5dd7070Spatrick 1215*e5dd7070Spatrick #undef trunc 1216*e5dd7070Spatrick #define trunc(__x) __tg_trunc(__tg_promote1((__x))(__x)) 1217*e5dd7070Spatrick 1218*e5dd7070Spatrick // carg 1219*e5dd7070Spatrick 1220*e5dd7070Spatrick static float 1221*e5dd7070Spatrick _TG_ATTRS __tg_carg(float __x)1222*e5dd7070Spatrick __tg_carg(float __x) {return atan2f(0.F, __x);} 1223*e5dd7070Spatrick 1224*e5dd7070Spatrick static double 1225*e5dd7070Spatrick _TG_ATTRS __tg_carg(double __x)1226*e5dd7070Spatrick __tg_carg(double __x) {return atan2(0., __x);} 1227*e5dd7070Spatrick 1228*e5dd7070Spatrick static long double 1229*e5dd7070Spatrick _TG_ATTRS __tg_carg(long double __x)1230*e5dd7070Spatrick __tg_carg(long double __x) {return atan2l(0.L, __x);} 1231*e5dd7070Spatrick 1232*e5dd7070Spatrick static float 1233*e5dd7070Spatrick _TG_ATTRS __tg_carg(float _Complex __x)1234*e5dd7070Spatrick __tg_carg(float _Complex __x) {return cargf(__x);} 1235*e5dd7070Spatrick 1236*e5dd7070Spatrick static double 1237*e5dd7070Spatrick _TG_ATTRS __tg_carg(double _Complex __x)1238*e5dd7070Spatrick __tg_carg(double _Complex __x) {return carg(__x);} 1239*e5dd7070Spatrick 1240*e5dd7070Spatrick static long double 1241*e5dd7070Spatrick _TG_ATTRS __tg_carg(long double _Complex __x)1242*e5dd7070Spatrick __tg_carg(long double _Complex __x) {return cargl(__x);} 1243*e5dd7070Spatrick 1244*e5dd7070Spatrick #undef carg 1245*e5dd7070Spatrick #define carg(__x) __tg_carg(__tg_promote1((__x))(__x)) 1246*e5dd7070Spatrick 1247*e5dd7070Spatrick // cimag 1248*e5dd7070Spatrick 1249*e5dd7070Spatrick static float 1250*e5dd7070Spatrick _TG_ATTRS __tg_cimag(float __x)1251*e5dd7070Spatrick __tg_cimag(float __x) {return 0;} 1252*e5dd7070Spatrick 1253*e5dd7070Spatrick static double 1254*e5dd7070Spatrick _TG_ATTRS __tg_cimag(double __x)1255*e5dd7070Spatrick __tg_cimag(double __x) {return 0;} 1256*e5dd7070Spatrick 1257*e5dd7070Spatrick static long double 1258*e5dd7070Spatrick _TG_ATTRS __tg_cimag(long double __x)1259*e5dd7070Spatrick __tg_cimag(long double __x) {return 0;} 1260*e5dd7070Spatrick 1261*e5dd7070Spatrick static float 1262*e5dd7070Spatrick _TG_ATTRS __tg_cimag(float _Complex __x)1263*e5dd7070Spatrick __tg_cimag(float _Complex __x) {return cimagf(__x);} 1264*e5dd7070Spatrick 1265*e5dd7070Spatrick static double 1266*e5dd7070Spatrick _TG_ATTRS __tg_cimag(double _Complex __x)1267*e5dd7070Spatrick __tg_cimag(double _Complex __x) {return cimag(__x);} 1268*e5dd7070Spatrick 1269*e5dd7070Spatrick static long double 1270*e5dd7070Spatrick _TG_ATTRS __tg_cimag(long double _Complex __x)1271*e5dd7070Spatrick __tg_cimag(long double _Complex __x) {return cimagl(__x);} 1272*e5dd7070Spatrick 1273*e5dd7070Spatrick #undef cimag 1274*e5dd7070Spatrick #define cimag(__x) __tg_cimag(__tg_promote1((__x))(__x)) 1275*e5dd7070Spatrick 1276*e5dd7070Spatrick // conj 1277*e5dd7070Spatrick 1278*e5dd7070Spatrick static float _Complex 1279*e5dd7070Spatrick _TG_ATTRS __tg_conj(float __x)1280*e5dd7070Spatrick __tg_conj(float __x) {return __x;} 1281*e5dd7070Spatrick 1282*e5dd7070Spatrick static double _Complex 1283*e5dd7070Spatrick _TG_ATTRS __tg_conj(double __x)1284*e5dd7070Spatrick __tg_conj(double __x) {return __x;} 1285*e5dd7070Spatrick 1286*e5dd7070Spatrick static long double _Complex 1287*e5dd7070Spatrick _TG_ATTRS __tg_conj(long double __x)1288*e5dd7070Spatrick __tg_conj(long double __x) {return __x;} 1289*e5dd7070Spatrick 1290*e5dd7070Spatrick static float _Complex 1291*e5dd7070Spatrick _TG_ATTRS __tg_conj(float _Complex __x)1292*e5dd7070Spatrick __tg_conj(float _Complex __x) {return conjf(__x);} 1293*e5dd7070Spatrick 1294*e5dd7070Spatrick static double _Complex 1295*e5dd7070Spatrick _TG_ATTRS __tg_conj(double _Complex __x)1296*e5dd7070Spatrick __tg_conj(double _Complex __x) {return conj(__x);} 1297*e5dd7070Spatrick 1298*e5dd7070Spatrick static long double _Complex 1299*e5dd7070Spatrick _TG_ATTRS __tg_conj(long double _Complex __x)1300*e5dd7070Spatrick __tg_conj(long double _Complex __x) {return conjl(__x);} 1301*e5dd7070Spatrick 1302*e5dd7070Spatrick #undef conj 1303*e5dd7070Spatrick #define conj(__x) __tg_conj(__tg_promote1((__x))(__x)) 1304*e5dd7070Spatrick 1305*e5dd7070Spatrick // cproj 1306*e5dd7070Spatrick 1307*e5dd7070Spatrick static float _Complex 1308*e5dd7070Spatrick _TG_ATTRS __tg_cproj(float __x)1309*e5dd7070Spatrick __tg_cproj(float __x) {return cprojf(__x);} 1310*e5dd7070Spatrick 1311*e5dd7070Spatrick static double _Complex 1312*e5dd7070Spatrick _TG_ATTRS __tg_cproj(double __x)1313*e5dd7070Spatrick __tg_cproj(double __x) {return cproj(__x);} 1314*e5dd7070Spatrick 1315*e5dd7070Spatrick static long double _Complex 1316*e5dd7070Spatrick _TG_ATTRS __tg_cproj(long double __x)1317*e5dd7070Spatrick __tg_cproj(long double __x) {return cprojl(__x);} 1318*e5dd7070Spatrick 1319*e5dd7070Spatrick static float _Complex 1320*e5dd7070Spatrick _TG_ATTRS __tg_cproj(float _Complex __x)1321*e5dd7070Spatrick __tg_cproj(float _Complex __x) {return cprojf(__x);} 1322*e5dd7070Spatrick 1323*e5dd7070Spatrick static double _Complex 1324*e5dd7070Spatrick _TG_ATTRS __tg_cproj(double _Complex __x)1325*e5dd7070Spatrick __tg_cproj(double _Complex __x) {return cproj(__x);} 1326*e5dd7070Spatrick 1327*e5dd7070Spatrick static long double _Complex 1328*e5dd7070Spatrick _TG_ATTRS __tg_cproj(long double _Complex __x)1329*e5dd7070Spatrick __tg_cproj(long double _Complex __x) {return cprojl(__x);} 1330*e5dd7070Spatrick 1331*e5dd7070Spatrick #undef cproj 1332*e5dd7070Spatrick #define cproj(__x) __tg_cproj(__tg_promote1((__x))(__x)) 1333*e5dd7070Spatrick 1334*e5dd7070Spatrick // creal 1335*e5dd7070Spatrick 1336*e5dd7070Spatrick static float 1337*e5dd7070Spatrick _TG_ATTRS __tg_creal(float __x)1338*e5dd7070Spatrick __tg_creal(float __x) {return __x;} 1339*e5dd7070Spatrick 1340*e5dd7070Spatrick static double 1341*e5dd7070Spatrick _TG_ATTRS __tg_creal(double __x)1342*e5dd7070Spatrick __tg_creal(double __x) {return __x;} 1343*e5dd7070Spatrick 1344*e5dd7070Spatrick static long double 1345*e5dd7070Spatrick _TG_ATTRS __tg_creal(long double __x)1346*e5dd7070Spatrick __tg_creal(long double __x) {return __x;} 1347*e5dd7070Spatrick 1348*e5dd7070Spatrick static float 1349*e5dd7070Spatrick _TG_ATTRS __tg_creal(float _Complex __x)1350*e5dd7070Spatrick __tg_creal(float _Complex __x) {return crealf(__x);} 1351*e5dd7070Spatrick 1352*e5dd7070Spatrick static double 1353*e5dd7070Spatrick _TG_ATTRS __tg_creal(double _Complex __x)1354*e5dd7070Spatrick __tg_creal(double _Complex __x) {return creal(__x);} 1355*e5dd7070Spatrick 1356*e5dd7070Spatrick static long double 1357*e5dd7070Spatrick _TG_ATTRS __tg_creal(long double _Complex __x)1358*e5dd7070Spatrick __tg_creal(long double _Complex __x) {return creall(__x);} 1359*e5dd7070Spatrick 1360*e5dd7070Spatrick #undef creal 1361*e5dd7070Spatrick #define creal(__x) __tg_creal(__tg_promote1((__x))(__x)) 1362*e5dd7070Spatrick 1363*e5dd7070Spatrick #undef _TG_ATTRSp 1364*e5dd7070Spatrick #undef _TG_ATTRS 1365*e5dd7070Spatrick 1366*e5dd7070Spatrick #endif /* __cplusplus */ 1367*e5dd7070Spatrick #endif /* __has_include_next */ 1368*e5dd7070Spatrick #endif /* __CLANG_TGMATH_H */ 1369