xref: /openbsd-src/gnu/llvm/clang/lib/Headers/tgmath.h (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
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