ldbl-128: Fix y0 and y1 for -Inf input [BZ #21130]

The Bessel functions of the second type (Yn) are not defined for
negative input and should return NAN with the "invalid" exception
raised, in these cases.  However, current code checks for infinity and
return zero, regardless of the sign.  This error is exposed for long
double when linking with -lieee.  Without this flag, the error is not
exposed, because the wrappers for these functions, which use
__kernel_standard functionality, return the correct value.

Tested for powerpc64le.

	[BZ #21130]
	* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_y0l): Return NAN
	with the "invalid" exception raised when x is -Inf.
	* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_y1l): Likewise.
This commit is contained in:
Gabriel F. T. Gomes 2017-01-06 13:05:30 -02:00
parent 40b7fbf273
commit b987917e6a
3 changed files with 9 additions and 12 deletions

View File

@ -1,3 +1,10 @@
2017-02-12 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
[BZ #21130]
* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_y0l): Return NAN
with the "invalid" exception raised when x is -Inf.
* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_y1l): Likewise.
2017-02-10 Wilco Dijkstra <wdijkstr@arm.com> 2017-02-10 Wilco Dijkstra <wdijkstr@arm.com>
* string/bits/string2.h (strchr): Remove define. * string/bits/string2.h (strchr): Remove define.

View File

@ -829,12 +829,7 @@ _Float128
_Float128 xx, xinv, z, p, q, c, s, cc, ss; _Float128 xx, xinv, z, p, q, c, s, cc, ss;
if (! isfinite (x)) if (! isfinite (x))
{ return 1 / (x + x * x);
if (x != x)
return x + x;
else
return 0;
}
if (x <= 0) if (x <= 0)
{ {
if (x < 0) if (x < 0)

View File

@ -847,12 +847,7 @@ __ieee754_y1l (_Float128 x)
_Float128 xx, xinv, z, p, q, c, s, cc, ss; _Float128 xx, xinv, z, p, q, c, s, cc, ss;
if (! isfinite (x)) if (! isfinite (x))
{ return 1 / (x + x * x);
if (x != x)
return x + x;
else
return 0;
}
if (x <= 0) if (x <= 0)
{ {
if (x < 0) if (x < 0)