about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-10-29 23:09:51 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-10-29 23:09:51 +0000
commitaf1b2fd08388a3beec3ee7eaa30646d9c002824e (patch)
treeecf8b652021682fc9054064b8ae504b93f72155d /sysdeps/ieee754/ldbl-128
parent68b7f7df0cc9f13a0f6c182208fe7e74c3387412 (diff)
downloadglibc-af1b2fd08388a3beec3ee7eaa30646d9c002824e.tar.gz
glibc-af1b2fd08388a3beec3ee7eaa30646d9c002824e.tar.xz
glibc-af1b2fd08388a3beec3ee7eaa30646d9c002824e.zip
Fix ldbl-128 log1pl (-qNaN) spurious "invalid" exception (bug 19189).
The ldbl-128 version of log1pl raises a spurious "invalid" exception
for a -qNaN argument.  This patch fixes this by making the initial
check for infinities and NaNs handle arguments of both signs in such a
way that NaNs result in a NaN being returned (quietly if the input NaN
was quiet) while +Inf results in +Inf being returned and -Inf results
in a qNaN being returned with "invalid" exception raised.

Tested for mips64.

	[BZ #19189]
	* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Make check for
	non-finite argument handle arguments with negative sign.
Diffstat (limited to 'sysdeps/ieee754/ldbl-128')
-rw-r--r--sysdeps/ieee754/ldbl-128/s_log1pl.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
index 9806ab6d63..b348f41e55 100644
--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
+++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
@@ -130,8 +130,8 @@ __log1pl (long double xm1)
   /* Test for NaN or infinity input. */
   u.value = xm1;
   hx = u.parts32.w0;
-  if (hx >= 0x7fff0000)
-    return xm1;
+  if ((hx & 0x7fffffff) >= 0x7fff0000)
+    return xm1 + fabsl (xm1);
 
   /* log1p(+- 0) = +- 0.  */
   if (((hx & 0x7fffffff) == 0)