1 /* Entry points to finite-math-only compiler runs.
2 Copyright (C) 2011-2015 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
20 # error "Never use <bits/math-finite.h> directly; include <math.h> instead."
24 extern double __REDIRECT_NTH (acos
, (double), __acos_finite
);
26 extern float __REDIRECT_NTH (acosf
, (float), __acosf_finite
);
27 # ifdef __MATH_DECLARE_LDOUBLE
28 # ifdef __NO_LONG_DOUBLE_MATH
29 extern long double __REDIRECT_NTH (acosl
, (long double), __acos_finite
);
31 extern long double __REDIRECT_NTH (acosl
, (long double), __acosl_finite
);
36 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
38 extern double __REDIRECT_NTH (acosh
, (double), __acosh_finite
);
41 extern float __REDIRECT_NTH (acoshf
, (float), __acoshf_finite
);
42 # ifdef __MATH_DECLARE_LDOUBLE
43 # ifdef __NO_LONG_DOUBLE_MATH
44 extern long double __REDIRECT_NTH (acoshl
, (long double), __acosh_finite
);
46 extern long double __REDIRECT_NTH (acoshl
, (long double), __acoshl_finite
);
52 extern double __REDIRECT_NTH (asin
, (double), __asin_finite
);
54 extern float __REDIRECT_NTH (asinf
, (float), __asinf_finite
);
55 # ifdef __MATH_DECLARE_LDOUBLE
56 # ifdef __NO_LONG_DOUBLE_MATH
57 extern long double __REDIRECT_NTH (asinl
, (long double), __asin_finite
);
59 extern long double __REDIRECT_NTH (asinl
, (long double), __asinl_finite
);
65 extern double __REDIRECT_NTH (atan2
, (double, double), __atan2_finite
);
67 extern float __REDIRECT_NTH (atan2f
, (float, float), __atan2f_finite
);
68 # ifdef __MATH_DECLARE_LDOUBLE
69 # ifdef __NO_LONG_DOUBLE_MATH
70 extern long double __REDIRECT_NTH (atan2l
, (long double, long double),
73 extern long double __REDIRECT_NTH (atan2l
, (long double, long double),
79 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
81 extern double __REDIRECT_NTH (atanh
, (double), __atanh_finite
);
84 extern float __REDIRECT_NTH (atanhf
, (float), __atanhf_finite
);
85 # ifdef __MATH_DECLARE_LDOUBLE
86 # ifdef __NO_LONG_DOUBLE_MATH
87 extern long double __REDIRECT_NTH (atanhl
, (long double), __atanh_finite
);
89 extern long double __REDIRECT_NTH (atanhl
, (long double), __atanhl_finite
);
95 extern double __REDIRECT_NTH (cosh
, (double), __cosh_finite
);
97 extern float __REDIRECT_NTH (coshf
, (float), __coshf_finite
);
98 # ifdef __MATH_DECLARE_LDOUBLE
99 # ifdef __NO_LONG_DOUBLE_MATH
100 extern long double __REDIRECT_NTH (coshl
, (long double), __cosh_finite
);
102 extern long double __REDIRECT_NTH (coshl
, (long double), __coshl_finite
);
108 extern double __REDIRECT_NTH (exp
, (double), __exp_finite
);
110 extern float __REDIRECT_NTH (expf
, (float), __expf_finite
);
111 # ifdef __MATH_DECLARE_LDOUBLE
112 # ifdef __NO_LONG_DOUBLE_MATH
113 extern long double __REDIRECT_NTH (expl
, (long double), __exp_finite
);
115 extern long double __REDIRECT_NTH (expl
, (long double), __expl_finite
);
122 extern double __REDIRECT_NTH (exp10
, (double), __exp10_finite
);
123 extern float __REDIRECT_NTH (exp10f
, (float), __exp10f_finite
);
124 # ifdef __MATH_DECLARE_LDOUBLE
125 # ifdef __NO_LONG_DOUBLE_MATH
126 extern long double __REDIRECT_NTH (exp10l
, (long double), __exp10_finite
);
128 extern long double __REDIRECT_NTH (exp10l
, (long double), __exp10l_finite
);
133 extern double __REDIRECT_NTH (pow10
, (double), __exp10_finite
);
134 extern float __REDIRECT_NTH (pow10f
, (float), __exp10f_finite
);
135 # ifdef __MATH_DECLARE_LDOUBLE
136 # ifdef __NO_LONG_DOUBLE_MATH
137 extern long double __REDIRECT_NTH (pow10l
, (long double), __exp10_finite
);
139 extern long double __REDIRECT_NTH (pow10l
, (long double), __exp10l_finite
);
146 extern double __REDIRECT_NTH (exp2
, (double), __exp2_finite
);
147 extern float __REDIRECT_NTH (exp2f
, (float), __exp2f_finite
);
148 # ifdef __MATH_DECLARE_LDOUBLE
149 # ifdef __NO_LONG_DOUBLE_MATH
150 extern long double __REDIRECT_NTH (exp2l
, (long double), __exp2_finite
);
152 extern long double __REDIRECT_NTH (exp2l
, (long double), __exp2l_finite
);
158 extern double __REDIRECT_NTH (fmod
, (double, double), __fmod_finite
);
160 extern float __REDIRECT_NTH (fmodf
, (float, float), __fmodf_finite
);
161 # ifdef __MATH_DECLARE_LDOUBLE
162 # ifdef __NO_LONG_DOUBLE_MATH
163 extern long double __REDIRECT_NTH (fmodl
, (long double, long double),
166 extern long double __REDIRECT_NTH (fmodl
, (long double, long double),
172 #if defined __USE_XOPEN || defined __USE_ISOC99
174 extern double __REDIRECT_NTH (hypot
, (double, double), __hypot_finite
);
177 extern float __REDIRECT_NTH (hypotf
, (float, float), __hypotf_finite
);
178 # ifdef __MATH_DECLARE_LDOUBLE
179 # ifdef __NO_LONG_DOUBLE_MATH
180 extern long double __REDIRECT_NTH (hypotl
, (long double, long double),
183 extern long double __REDIRECT_NTH (hypotl
, (long double, long double),
189 #if defined __USE_MISC || defined __USE_XOPEN
191 extern double __REDIRECT_NTH (j0
, (double), __j0_finite
);
193 #if defined __USE_MISC && defined __USE_ISOC99
194 extern float __REDIRECT_NTH (j0f
, (float), __j0f_finite
);
195 # ifdef __MATH_DECLARE_LDOUBLE
196 # ifdef __NO_LONG_DOUBLE_MATH
197 extern long double __REDIRECT_NTH (j0l
, (long double), __j0_finite
);
199 extern long double __REDIRECT_NTH (j0l
, (long double), __j0l_finite
);
204 #if defined __USE_MISC || defined __USE_XOPEN
206 extern double __REDIRECT_NTH (y0
, (double), __y0_finite
);
208 #if defined __USE_MISC && defined __USE_ISOC99
209 extern float __REDIRECT_NTH (y0f
, (float), __y0f_finite
);
210 # ifdef __MATH_DECLARE_LDOUBLE
211 # ifdef __NO_LONG_DOUBLE_MATH
212 extern long double __REDIRECT_NTH (y0l
, (long double), __y0_finite
);
214 extern long double __REDIRECT_NTH (y0l
, (long double), __y0l_finite
);
219 #if defined __USE_MISC || defined __USE_XOPEN
221 extern double __REDIRECT_NTH (j1
, (double), __j1_finite
);
223 #if defined __USE_MISC && defined __USE_ISOC99
224 extern float __REDIRECT_NTH (j1f
, (float), __j1f_finite
);
225 # ifdef __MATH_DECLARE_LDOUBLE
226 # ifdef __NO_LONG_DOUBLE_MATH
227 extern long double __REDIRECT_NTH (j1l
, (long double), __j1_finite
);
229 extern long double __REDIRECT_NTH (j1l
, (long double), __j1l_finite
);
234 #if defined __USE_MISC || defined __USE_XOPEN
236 extern double __REDIRECT_NTH (y1
, (double), __y1_finite
);
238 #if defined __USE_MISC && defined __USE_ISOC99
239 extern float __REDIRECT_NTH (y1f
, (float), __y1f_finite
);
240 # ifdef __MATH_DECLARE_LDOUBLE
241 # ifdef __NO_LONG_DOUBLE_MATH
242 extern long double __REDIRECT_NTH (y1l
, (long double), __y1_finite
);
244 extern long double __REDIRECT_NTH (y1l
, (long double), __y1l_finite
);
249 #if defined __USE_MISC || defined __USE_XOPEN
251 extern double __REDIRECT_NTH (jn
, (int, double), __jn_finite
);
253 #if defined __USE_MISC && defined __USE_ISOC99
254 extern float __REDIRECT_NTH (jnf
, (int, float), __jnf_finite
);
255 # ifdef __MATH_DECLARE_LDOUBLE
256 # ifdef __NO_LONG_DOUBLE_MATH
257 extern long double __REDIRECT_NTH (jnl
, (int, long double), __jn_finite
);
259 extern long double __REDIRECT_NTH (jnl
, (int, long double), __jnl_finite
);
264 #if defined __USE_MISC || defined __USE_XOPEN
266 extern double __REDIRECT_NTH (yn
, (int, double), __yn_finite
);
268 #if defined __USE_MISC && defined __USE_ISOC99
269 extern float __REDIRECT_NTH (ynf
, (int, float), __ynf_finite
);
270 # ifdef __MATH_DECLARE_LDOUBLE
271 # ifdef __NO_LONG_DOUBLE_MATH
272 extern long double __REDIRECT_NTH (ynl
, (int, long double), __yn_finite
);
274 extern long double __REDIRECT_NTH (ynl
, (int, long double), __ynl_finite
);
281 extern double __REDIRECT_NTH (lgamma_r
, (double, int *), __lgamma_r_finite
);
283 extern float __REDIRECT_NTH (lgammaf_r
, (float, int *), __lgammaf_r_finite
);
284 # ifdef __MATH_DECLARE_LDOUBLE
285 # ifdef __NO_LONG_DOUBLE_MATH
286 extern long double __REDIRECT_NTH (lgammal_r
, (long double, int *),
289 extern long double __REDIRECT_NTH (lgammal_r
, (long double, int *),
296 extern double __lgamma_r_finite (double, int *);
297 extern float __lgammaf_r_finite (float, int *);
298 #ifdef __NO_LONG_DOUBLE_MATH
299 extern long double __REDIRECT_NTH (__lgammal_r_finite
, (long double, int *),
302 extern long double __lgammal_r_finite (long double, int *);
305 #if ((defined __USE_XOPEN || defined __USE_ISOC99) \
306 && defined __extern_always_inline)
308 __extern_always_inline
double __NTH (lgamma (double __d
))
311 int __local_signgam
= 0;
312 return __lgamma_r_finite (__d
, &__local_signgam
);
314 return __lgamma_r_finite (__d
, &signgam
);
318 #if defined __USE_ISOC99 && defined __extern_always_inline
319 __extern_always_inline
float __NTH (lgammaf (float __d
))
322 int __local_signgam
= 0;
323 return __lgammaf_r_finite (__d
, &__local_signgam
);
325 return __lgammaf_r_finite (__d
, &signgam
);
328 # ifdef __MATH_DECLARE_LDOUBLE
329 __extern_always_inline
long double __NTH (lgammal (long double __d
))
332 int __local_signgam
= 0;
333 return __lgammal_r_finite (__d
, &__local_signgam
);
335 return __lgammal_r_finite (__d
, &signgam
);
341 #if ((defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)) \
342 && defined __extern_always_inline)
344 __extern_always_inline
double __NTH (gamma (double __d
))
347 int __local_signgam
= 0;
348 return __lgamma_r_finite (__d
, &__local_signgam
);
350 return __lgamma_r_finite (__d
, &signgam
);
354 __extern_always_inline
float __NTH (gammaf (float __d
))
357 int __local_signgam
= 0;
358 return __lgammaf_r_finite (__d
, &__local_signgam
);
360 return __lgammaf_r_finite (__d
, &signgam
);
363 # ifdef __MATH_DECLARE_LDOUBLE
364 __extern_always_inline
long double __NTH (gammal (long double __d
))
367 int __local_signgam
= 0;
368 return __lgammal_r_finite (__d
, &__local_signgam
);
370 return __lgammal_r_finite (__d
, &signgam
);
378 extern double __REDIRECT_NTH (log
, (double), __log_finite
);
380 extern float __REDIRECT_NTH (logf
, (float), __logf_finite
);
381 # ifdef __MATH_DECLARE_LDOUBLE
382 # ifdef __NO_LONG_DOUBLE_MATH
383 extern long double __REDIRECT_NTH (logl
, (long double), __log_finite
);
385 extern long double __REDIRECT_NTH (logl
, (long double), __logl_finite
);
391 extern double __REDIRECT_NTH (log10
, (double), __log10_finite
);
393 extern float __REDIRECT_NTH (log10f
, (float), __log10f_finite
);
394 # ifdef __MATH_DECLARE_LDOUBLE
395 # ifdef __NO_LONG_DOUBLE_MATH
396 extern long double __REDIRECT_NTH (log10l
, (long double), __log10_finite
);
398 extern long double __REDIRECT_NTH (log10l
, (long double), __log10l_finite
);
405 extern double __REDIRECT_NTH (log2
, (double), __log2_finite
);
406 extern float __REDIRECT_NTH (log2f
, (float), __log2f_finite
);
407 # ifdef __MATH_DECLARE_LDOUBLE
408 # ifdef __NO_LONG_DOUBLE_MATH
409 extern long double __REDIRECT_NTH (log2l
, (long double), __log2_finite
);
411 extern long double __REDIRECT_NTH (log2l
, (long double), __log2l_finite
);
417 extern double __REDIRECT_NTH (ldexp
, (double, int), scalbn
);
419 extern float __REDIRECT_NTH (ldexpf
, (float, int), scalbnf
);
420 # ifdef __MATH_DECLARE_LDOUBLE
421 extern long double __REDIRECT_NTH (ldexpl
, (long double, int), scalbnl
);
426 extern double __REDIRECT_NTH (pow
, (double, double), __pow_finite
);
428 extern float __REDIRECT_NTH (powf
, (float, float), __powf_finite
);
429 # ifdef __MATH_DECLARE_LDOUBLE
430 # ifdef __NO_LONG_DOUBLE_MATH
431 extern long double __REDIRECT_NTH (powl
, (long double, long double),
434 extern long double __REDIRECT_NTH (powl
, (long double, long double),
440 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
442 extern double __REDIRECT_NTH (remainder
, (double, double), __remainder_finite
);
445 extern float __REDIRECT_NTH (remainderf
, (float, float), __remainderf_finite
);
446 # ifdef __MATH_DECLARE_LDOUBLE
447 # ifdef __NO_LONG_DOUBLE_MATH
448 extern long double __REDIRECT_NTH (remainderl
, (long double, long double),
451 extern long double __REDIRECT_NTH (remainderl
, (long double, long double),
452 __remainderl_finite
);
457 #if (defined __USE_MISC \
458 || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))
460 extern double __REDIRECT_NTH (scalb
, (double, double), __scalb_finite
);
462 #if defined __USE_MISC && defined __USE_ISOC99
463 extern float __REDIRECT_NTH (scalbf
, (float, float), __scalbf_finite
);
464 # ifdef __MATH_DECLARE_LDOUBLE
465 # ifdef __NO_LONG_DOUBLE_MATH
466 extern long double __REDIRECT_NTH (scalbl
, (long double, long double),
469 extern long double __REDIRECT_NTH (scalbl
, (long double, long double),
476 extern double __REDIRECT_NTH (sinh
, (double), __sinh_finite
);
478 extern float __REDIRECT_NTH (sinhf
, (float), __sinhf_finite
);
479 # ifdef __MATH_DECLARE_LDOUBLE
480 # ifdef __NO_LONG_DOUBLE_MATH
481 extern long double __REDIRECT_NTH (sinhl
, (long double), __sinh_finite
);
483 extern long double __REDIRECT_NTH (sinhl
, (long double), __sinhl_finite
);
489 extern double __REDIRECT_NTH (sqrt
, (double), __sqrt_finite
);
491 extern float __REDIRECT_NTH (sqrtf
, (float), __sqrtf_finite
);
492 # ifdef __MATH_DECLARE_LDOUBLE
493 # ifdef __NO_LONG_DOUBLE_MATH
494 extern long double __REDIRECT_NTH (sqrtl
, (long double), __sqrt_finite
);
496 extern long double __REDIRECT_NTH (sqrtl
, (long double), __sqrtl_finite
);
501 #if defined __USE_ISOC99 && defined __extern_always_inline
503 extern double __gamma_r_finite (double, int *);
504 __extern_always_inline
double __NTH (tgamma (double __d
))
506 int __local_signgam
= 0;
507 double __res
= __gamma_r_finite (__d
, &__local_signgam
);
508 return __local_signgam
< 0 ? -__res
: __res
;
510 extern float __gammaf_r_finite (float, int *);
511 __extern_always_inline
float __NTH (tgammaf (float __d
))
513 int __local_signgam
= 0;
514 float __res
= __gammaf_r_finite (__d
, &__local_signgam
);
515 return __local_signgam
< 0 ? -__res
: __res
;
517 # ifdef __MATH_DECLARE_LDOUBLE
518 extern long double __gammal_r_finite (long double, int *);
519 __extern_always_inline
long double __NTH (tgammal (long double __d
))
521 int __local_signgam
= 0;
522 # ifdef __NO_LONG_DOUBLE_MATH
523 long double __res
= __gamma_r_finite (__d
, &__local_signgam
);
525 long double __res
= __gammal_r_finite (__d
, &__local_signgam
);
527 return __local_signgam
< 0 ? -__res
: __res
;