1 /* Copyright (C) 2011-2016 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
4 
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.
9 
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.
14 
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/>.  */
18 
19 #include <math.h>
20 #include "math_private.h"
21 #if defined(__UCLIBC_HAS_FENV__)
22 #include <fenv.h>
23 #endif
24 
25 /* wrapper j1 */
26 double
j1(double x)27 j1 (double x)
28 {
29 #if defined(__UCLIBC_HAS_FENV__)
30   if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
31       && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
32     /* j1(|x|>X_TLOSS) */
33     return __kernel_standard (x, x, 36);
34 #endif /* __UCLIBC_HAS_FENV__ */
35   return __ieee754_j1 (x);
36 }
37 
38 /* wrapper y1 */
39 double
y1(double x)40 y1 (double x)
41 {
42 #if defined(__UCLIBC_HAS_FENV__)
43   if (__builtin_expect (islessequal (x, 0.0) || isgreater (x, X_TLOSS), 0)
44       && _LIB_VERSION != _IEEE_)
45     {
46       if (x < 0.0)
47 	{
48 	  /* d = zero/(x-x) */
49 	  feraiseexcept (FE_INVALID);
50 	  return __kernel_standard (x, x, 11);
51 	}
52       else if (x == 0.0)
53 	{
54 	  /* d = -one/(x-x) */
55 	  feraiseexcept (FE_DIVBYZERO);
56 	  return __kernel_standard (x, x, 10);
57 	}
58       else if (_LIB_VERSION != _POSIX_)
59 	/* y1(x>X_TLOSS) */
60 	return __kernel_standard (x, x, 37);
61     }
62 #endif /* __UCLIBC_HAS_FENV__ */
63   return __ieee754_y1 (x);
64 }
65