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