Fix i386 cbrtl (sNaN) (bug 20224).

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.

	[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.
This commit is contained in:
Joseph Myers 2016-06-08 21:02:40 +00:00
parent c867597bff
commit 40720ec9f9
3 changed files with 10 additions and 0 deletions

View File

@ -1,3 +1,10 @@
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.
2016-06-08 H.J. Lu <hongjiu.lu@intel.com>
[BZ #19776]

View File

@ -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),
};

View File

@ -223,6 +223,7 @@ ENTRY(__cbrtl)
/* Return the argument. */
1: fldt 4(%esp)
fadd %st
ret
END(__cbrtl)
weak_alias (__cbrtl, cbrtl)