This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix i386 cbrtl (sNaN) (bug 20224) [committed]


The i386 version of cbrtl returns sNaN (without raising any
exceptions) for sNaN input.  This patch fixes it to add non-finite
arguments to themselves (the code path in question is also reached for
zero arguments, for which adding them to themselves is also harmless),
so that "invalid" is raised and qNaN returned.

Tested for x86_64 and x86.  Committed.

2016-06-08  Joseph Myers  <joseph@codesourcery.com>

	[BZ #20224]
	* sysdeps/i386/fpu/s_cbrtl.S (__cbrtl): Add non-finite or zero
	argument to itself.
	* math/libm-test.inc (cbrt_test_data): Add sNaN tests.

diff --git a/math/libm-test.inc b/math/libm-test.inc
index 7913f44..520f141 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -5875,6 +5875,8 @@ static const struct test_f_f_data cbrt_test_data[] =
     TEST_f_f (cbrt, minus_infty, minus_infty, ERRNO_UNCHANGED),
     TEST_f_f (cbrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
     TEST_f_f (cbrt, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_f (cbrt, snan_value, qnan_value, INVALID_EXCEPTION),
+    TEST_f_f (cbrt, -snan_value, qnan_value, INVALID_EXCEPTION),
 
     AUTO_TESTS_f_f (cbrt),
   };
diff --git a/sysdeps/i386/fpu/s_cbrtl.S b/sysdeps/i386/fpu/s_cbrtl.S
index 3bf1700..6a64313 100644
--- a/sysdeps/i386/fpu/s_cbrtl.S
+++ b/sysdeps/i386/fpu/s_cbrtl.S
@@ -223,6 +223,7 @@ ENTRY(__cbrtl)
 
 	/* Return the argument.  */
 1:	fldt	4(%esp)
+	fadd	%st
 	ret
 END(__cbrtl)
 weak_alias (__cbrtl, cbrtl)

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]