fix regression from a745c4bfc8a9b5db4e48387170da0dc1d39e3abe
[uclibc-ng.git] / libm / ldouble_wrappers.c
blobf60fab539b1c80864759bded71d31f5978719756
1 /*
2 * Wrapper functions implementing all the long double math functions
3 * defined by SuSv3 by actually calling the double version of
4 * each function and then casting the result back to a long double
5 * to return to the user.
7 * Copyright (C) 2005 by Erik Andersen <andersen@uclibc.org>
9 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
12 #include <features.h>
13 /* Prevent math.h from defining colliding inlines */
14 #undef __USE_EXTERN_INLINES
15 #include "math.h"
16 #include <complex.h>
18 #if !defined __NO_LONG_DOUBLE_MATH
19 # define WRAPPER1(func) \
20 long double func##l(long double x) \
21 { \
22 return (long double) func((double) x); \
24 # define WRAPPER2(func) \
25 long double func##l(long double x, long double y) \
26 { \
27 return (long double) func((double) x, (double) y); \
29 # define int_WRAPPER1(func) \
30 int func##l(long double x) \
31 { \
32 return func((double) x); \
34 # define long_WRAPPER1(func) \
35 long func##l(long double x) \
36 { \
37 return func((double) x); \
39 # define long_long_WRAPPER1(func) \
40 long long func##l(long double x) \
41 { \
42 return func((double) x); \
45 /* Implement the following, as defined by SuSv3 */
46 #if 0
47 long double asinhl(long double);
48 long double atanl(long double);
49 long double cargl(long double complex);
50 long double cbrtl(long double);
51 long double ceill(long double);
52 long double copysignl(long double, long double);
53 long double cosl(long double);
54 long double erfcl(long double);
55 long double erfl(long double);
56 long double expm1l(long double);
57 long double fabsl(long double);
58 long double fdiml(long double, long double);
59 long double floorl(long double);
60 long double fmal(long double, long double, long double);
61 long double fmaxl(long double, long double);
62 long double fminl(long double, long double);
63 long double frexpl(long double value, int *);
64 int ilogbl(long double);
65 long double ldexpl(long double, int);
66 long long llrintl(long double);
67 long long llroundl(long double);
68 long double log1pl(long double);
69 long double logbl(long double);
70 long lrintl(long double);
71 long lroundl(long double);
72 long double modfl(long double, long double *);
73 long double nearbyintl(long double);
74 long double nextafterl(long double, long double);
75 long double nexttowardl(long double, long double);
76 long double remquol(long double, long double, int *);
77 long double rintl(long double);
78 long double roundl(long double);
79 long double scalblnl(long double, long);
80 long double scalbnl(long double, int);
81 long double sinl(long double);
82 long double tanhl(long double);
83 long double tanl(long double);
84 long double truncl(long double);
85 #endif
87 /* The following functions implemented as wrappers
88 * in separate files (w_funcl.c)
90 #if 0
91 long double acosl(long double);
92 long double acoshl(long double);
93 long double asinl(long double);
94 long double atan2l(long double, long double);
95 long double atanhl(long double);
96 long double coshl(long double);
97 long double exp2l(long double);
98 long double expl(long double);
99 long double fmodl(long double, long double);
100 long double hypotl(long double, long double);
101 long double lgammal(long double);
102 long double log10l(long double);
103 long double log2l(long double);
104 long double logl(long double);
105 long double powl(long double, long double);
106 long double remainderl(long double, long double);
107 long double sinhl(long double);
108 long double sqrtl(long double);
109 long double j0l(long double x);
110 long double j1l(long double x);
111 long double jnl(int n, long double x);
112 long double y0l(long double x);
113 long double y1l(long double x);
114 long double ynl(int n, long double x);
115 long double tgammal(long double x);
116 long double scalbl(long double x, long double fn);
117 long double gammal(long double x);
118 long double scalbl(long double x, long double fn);
120 #endif
122 #ifdef L_asinhl
123 WRAPPER1(asinh)
124 #endif
126 #ifdef L_atanl
127 WRAPPER1(atan)
128 #endif
130 #ifdef L_cargl
131 long double cargl (long double complex x)
133 return (long double) carg( (double complex)x );
135 #endif
137 #ifdef L_cbrtl
138 WRAPPER1(cbrt)
139 #endif
141 #ifdef L_ceill
142 WRAPPER1(ceil)
143 #endif
145 #ifdef L_copysignl
146 WRAPPER2(copysign)
147 #endif
149 #ifdef L_cosl
150 WRAPPER1(cos)
151 libm_hidden_def(cosl)
152 #endif
154 #ifdef L_erfcl
155 WRAPPER1(erfc)
156 #endif
158 #ifdef L_erfl
159 WRAPPER1(erf)
160 #endif
162 #ifdef L_expm1l
163 WRAPPER1(expm1)
164 #endif
166 #ifdef L_fabsl
167 WRAPPER1(fabs)
168 #endif
170 #ifdef L_fdiml
171 WRAPPER2(fdim)
172 #endif
174 #ifdef L_floorl
175 WRAPPER1(floor)
176 #endif
178 #ifdef L_fmal
179 long double fmal (long double x, long double y, long double z)
181 return (long double) fma( (double)x, (double)y, (double)z );
183 #endif
185 #ifdef L_fmaxl
186 WRAPPER2(fmax)
187 #endif
189 #ifdef L_fminl
190 WRAPPER2(fmin)
191 #endif
193 #ifdef L_frexpl
194 long double frexpl (long double x, int *ex)
196 return (long double) frexp( (double)x, ex );
198 #endif
200 #ifdef L_ilogbl
201 int_WRAPPER1(ilogb)
202 #endif
204 #ifdef L_ldexpl
205 long double ldexpl (long double x, int ex)
207 return (long double) ldexp( (double)x, ex );
209 #endif
211 #ifdef L_llrintl
212 long_long_WRAPPER1(llrint)
213 #endif
215 #ifdef L_llroundl
216 long_long_WRAPPER1(llround)
217 #endif
219 #ifdef L_log1pl
220 WRAPPER1(log1p)
221 #endif
223 #ifdef L_logbl
224 WRAPPER1(logb)
225 #endif
227 #ifdef L_lrintl
228 long_WRAPPER1(lrint)
229 #endif
231 #ifdef L_lroundl
232 long_WRAPPER1(lround)
233 #endif
235 #ifdef L_modfl
236 long double modfl (long double x, long double *iptr)
238 double y, result;
239 result = modf ( x, &y );
240 *iptr = (long double)y;
241 return (long double) result;
243 #endif
245 #ifdef L_nearbyintl
246 WRAPPER1(nearbyint)
247 #endif
249 #ifdef L_nextafterl
250 WRAPPER2(nextafter)
251 libm_hidden_def(nextafterl)
252 #endif
254 #ifdef L_nexttowardl
255 # if 0 /* TODO */
256 strong_alias(nextafterl, nexttowardl)
257 # else
258 long double nexttowardl(long double x, long double y)
260 return nextafterl(x, y);
262 #endif
263 #endif
265 #ifdef L_remquol
266 long double remquol (long double x, long double y, int *quo)
268 return (long double) remquo( (double)x, (double)y, quo );
270 #endif
272 #ifdef L_rintl
273 WRAPPER1(rint)
274 #endif
276 #ifdef L_roundl
277 WRAPPER1(round)
278 #endif
280 #ifdef L_scalblnl
281 long double scalblnl (long double x, long ex)
283 return (long double) scalbln( (double)x, ex );
285 #endif
287 #ifdef L_scalbnl
288 long double scalbnl (long double x, int ex)
290 return (long double) scalbn( (double)x, ex );
292 #endif
294 #ifdef L_sinl
295 WRAPPER1(sin)
296 libm_hidden_def(sinl)
297 #endif
299 #ifdef L_tanhl
300 WRAPPER1(tanh)
301 #endif
303 #ifdef L_tanl
304 WRAPPER1(tan)
305 #endif
307 #ifdef L_truncl
308 WRAPPER1(trunc)
309 #endif
311 #ifdef L_significandl
312 WRAPPER1(significand)
313 #endif
316 #if defined __DO_C99_MATH__ && !defined __NO_LONG_DOUBLE_MATH
318 # ifdef L___fpclassifyl
319 int_WRAPPER1(__fpclassify)
320 libm_hidden_def(__fpclassifyl)
321 # endif
323 # ifdef L___finitel
324 int_WRAPPER1(__finite)
325 libm_hidden_def(__finitel)
326 # endif
328 # ifdef L___signbitl
329 int_WRAPPER1(__signbit)
330 libm_hidden_def(__signbitl)
331 # endif
333 # ifdef L___isnanl
334 int_WRAPPER1(__isnan)
335 libm_hidden_def(__isnanl)
336 # endif
338 # ifdef L___isinfl
339 int_WRAPPER1(__isinf)
340 libm_hidden_def(__isinfl)
341 # endif
343 #endif /* __DO_C99_MATH__ */
345 #endif /* __NO_LONG_DOUBLE_MATH */