Fix ldbl-128ibm log1pl (-qNaN) spurious "invalid" exception (bug 22693) [committed]

Message ID alpine.DEB.2.20.1801101759280.17618@digraph.polyomino.org.uk
State New
Headers show
Series
  • Fix ldbl-128ibm log1pl (-qNaN) spurious "invalid" exception (bug 22693) [committed]
Related show

Commit Message

Joseph Myers Jan. 10, 2018, 5:59 p.m.
The ldbl-128ibm implementation of log1pl does ordered comparisons on a
negative qNaN argument, so resulting in spurious "invalid" exceptions
(for soft-float powerpc; hard-float only avoids this because of GCC
bug 58684 meaning ordered comparison instructions never get
generated).  This patch fixes this by arranging for the test for NaN
or infinity arguments to handle negative arguments as well.

Tested for powerpc (soft float).  Committed.

2018-01-10  Joseph Myers  <joseph@codesourcery.com>

	[BZ #22693]
	* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Handle
	negative arguments in test for NaN or infinity argument.

Patch

diff --git a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
index 5457892..e499c9f 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
@@ -131,8 +131,8 @@  __log1pl (long double xm1)
   /* Test for NaN or infinity input. */
   xhi = ldbl_high (xm1);
   EXTRACT_WORDS (hx, lx, xhi);
-  if (hx >= 0x7ff00000)
-    return xm1 + xm1;
+  if ((hx & 0x7fffffff) >= 0x7ff00000)
+    return xm1 + xm1 * xm1;
 
   /* log1p(+- 0) = +- 0.  */
   if (((hx & 0x7fffffff) | lx) == 0)