From: Joseph Myers Date: Wed, 8 Jun 2016 21:02:40 +0000 (+0000) Subject: Fix i386 cbrtl (sNaN) (bug 20224). X-Git-Tag: glibc-2.24~142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40720ec9f98d57214d73d6fa98019e684f2eb45a;p=thirdparty%2Fglibc.git 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. --- diff --git a/ChangeLog b/ChangeLog index 20e21393d09..201516873b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-06-08 Joseph Myers + + [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 [BZ #19776] diff --git a/math/libm-test.inc b/math/libm-test.inc index 7913f447523..520f141446f 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 3bf170075b3..6a643131650 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)