about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2016-05-26 20:55:03 +0000
committerJoseph Myers <joseph@codesourcery.com>2016-05-26 20:55:03 +0000
commitd73e7bdb3a9284eb437b6cd84923658e25f922f2 (patch)
treeb20ec5c3fed4bd7d27fc4412044b6980241fceaf
parent960be82cc2b256eded9242bd428ddd2dc4f89275 (diff)
downloadglibc-d73e7bdb3a9284eb437b6cd84923658e25f922f2.tar.gz
glibc-d73e7bdb3a9284eb437b6cd84923658e25f922f2.tar.xz
glibc-d73e7bdb3a9284eb437b6cd84923658e25f922f2.zip
Fix ldbl-128 j0l, j1l, y0l, y1l for sNaN argument (bug 20151).
The ldbl-128 implementations of j0l, j1l, y0l, y1l (also used for
ldbl-128ibm) return an sNaN argument unchanged.  This patch fixes them
to add a NaN argument to itself to quiet it before return.

Tested for mips64.

	[BZ #20151]
	* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Add NaN
	argument to itself before returning result.
	(__ieee754_y0l): Likewise.
	* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Likewise.
	(__ieee754_y1l).
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j0l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j1l.c4
3 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 289d46c7de..b597ce9643 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2016-05-26  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #20151]
+	* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Add NaN
+	argument to itself before returning result.
+	(__ieee754_y0l): Likewise.
+	* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Likewise.
+	(__ieee754_y1l).
+
 	* math/libm-test.inc (acosh_test_data): Add sNaN tests.
 	(atan_test_data): Likewise.
 	(ceil_test_data): Likewise.
diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c
index c208916a79..ddc82143dc 100644
--- a/sysdeps/ieee754/ldbl-128/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j0l.c
@@ -683,7 +683,7 @@ __ieee754_j0l (long double x)
   if (! isfinite (x))
     {
       if (x != x)
-	return x;
+	return x + x;
       else
 	return 0.0L;
     }
@@ -831,7 +831,7 @@ long double
   if (! isfinite (x))
     {
       if (x != x)
-	return x;
+	return x + x;
       else
 	return 0.0L;
     }
diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c
index f5b04c073d..32652049ab 100644
--- a/sysdeps/ieee754/ldbl-128/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j1l.c
@@ -690,7 +690,7 @@ __ieee754_j1l (long double x)
   if (! isfinite (x))
     {
       if (x != x)
-	return x;
+	return x + x;
       else
 	return 0.0L;
     }
@@ -849,7 +849,7 @@ __ieee754_y1l (long double x)
   if (! isfinite (x))
     {
       if (x != x)
-	return x;
+	return x + x;
       else
 	return 0.0L;
     }