mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
Fix x86/x86_64 scalb (qNaN, -Inf) (bug 16783).
Various x86 / x86_64 versions of scalb / scalbf / scalbl produce spurious "invalid" exceptions for (qNaN, -Inf) arguments, because this is wrongly handled like (+/-Inf, -Inf) which *should* raise such an exception. (In fact the NaN case of the code determining whether to quietly return a zero or a NaN for second argument -Inf was accidentally dead since the code had been made to return a NaN with exception.) This patch fixes the code to do the proper test for an infinity as distinct from a NaN. (Since the existing code does nothing to distinguish qNaNs and sNaNs here, this patch doesn't either. If in future we systematically implement proper sNaN semantics following TS 18661-1:2014, there will be lots of bugs to address - Thomas found lots of issues with his patch <https://sourceware.org/ml/libc-ports/2013-04/msg00008.html> to add SNaN tests (which never went in and would now require significant reworking).) Tested for x86_64 and x86. Committed. [BZ #16783] * sysdeps/i386/fpu/e_scalb.S (__ieee754_scalb): Do not handle arguments (NaN, -Inf) the same as (+/-Inf, -Inf). * sysdeps/i386/fpu/e_scalbf.S (__ieee754_scalbf): Likewise. * sysdeps/i386/fpu/e_scalbl.S (__ieee754_scalbl): Likewise. * sysdeps/x86_64/fpu/e_scalbl.S (__ieee754_scalbl): Likewise. * math/libm-test.inc (scalb_test_data): Add more tests.
This commit is contained in:
parent
6909d27675
commit
9438b237ab
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2015-02-24 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #16783]
|
||||
* sysdeps/i386/fpu/e_scalb.S (__ieee754_scalb): Do not handle
|
||||
arguments (NaN, -Inf) the same as (+/-Inf, -Inf).
|
||||
* sysdeps/i386/fpu/e_scalbf.S (__ieee754_scalbf): Likewise.
|
||||
* sysdeps/i386/fpu/e_scalbl.S (__ieee754_scalbl): Likewise.
|
||||
* sysdeps/x86_64/fpu/e_scalbl.S (__ieee754_scalbl): Likewise.
|
||||
* math/libm-test.inc (scalb_test_data): Add more tests.
|
||||
|
||||
2015-02-24 Paul Pluzhnikov <ppluzhnikov@google.com>
|
||||
|
||||
[BZ #17916]
|
||||
|
6
NEWS
6
NEWS
@ -9,9 +9,9 @@ Version 2.22
|
||||
|
||||
* The following bugs are resolved with this release:
|
||||
|
||||
4719, 14841, 13064, 14094, 15319, 15467, 15790, 16560, 17269, 17523,
|
||||
17569, 17588, 17792, 17836, 17912, 17916, 17932, 17944, 17949, 17964,
|
||||
17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998, 17999.
|
||||
4719, 14841, 13064, 14094, 15319, 15467, 15790, 16560, 16783, 17269,
|
||||
17523, 17569, 17588, 17792, 17836, 17912, 17916, 17932, 17944, 17949,
|
||||
17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998, 17999.
|
||||
|
||||
* Character encoding and ctype tables were updated to Unicode 7.0.0, using
|
||||
new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red
|
||||
|
@ -9139,6 +9139,8 @@ static const struct test_ff_f_data scalb_test_data[] =
|
||||
TEST_ff_f (scalb, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_f (scalb, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_f (scalb, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
|
||||
TEST_ff_f (scalb, max_value, max_value, plus_oflow, OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
|
||||
|
@ -65,8 +65,10 @@ ENTRY(__ieee754_scalb)
|
||||
fstp %st
|
||||
fstp %st
|
||||
andl $0x80000000, %edx
|
||||
andl $0x0228, %eax
|
||||
cmpl $0x0028, %eax
|
||||
je 4f
|
||||
andl $8, %eax
|
||||
jnz 4f
|
||||
shrl $27, %edx
|
||||
addl %edx, %eax
|
||||
fldl MOX(zero_nan, %eax, 1)
|
||||
|
@ -67,8 +67,10 @@ ENTRY(__ieee754_scalbf)
|
||||
fstp %st
|
||||
fstp %st
|
||||
andl $0x80000000, %edx
|
||||
andl $0x0228, %eax
|
||||
cmpl $0x0028, %eax
|
||||
je 4f
|
||||
andl $8, %eax
|
||||
jnz 4f
|
||||
shrl $27, %edx
|
||||
addl %edx, %eax
|
||||
fldl MOX(zero_nan, %eax, 1)
|
||||
|
@ -67,8 +67,10 @@ ENTRY(__ieee754_scalbl)
|
||||
fstp %st
|
||||
fstp %st
|
||||
andl $0x8000, %edx
|
||||
andl $0x0228, %eax
|
||||
cmpl $0x0028, %eax
|
||||
je 4f
|
||||
andl $8, %eax
|
||||
jnz 4f
|
||||
shrl $11, %edx
|
||||
addl %edx, %eax
|
||||
fldl MOX(zero_nan, %eax, 1)
|
||||
|
@ -61,8 +61,10 @@ ENTRY(__ieee754_scalbl)
|
||||
fstp %st
|
||||
fstp %st
|
||||
andl $0x8000, %edx
|
||||
andl $0x0228, %eax
|
||||
cmpl $0x0028, %eax
|
||||
je 4f
|
||||
andl $8, %eax
|
||||
jnz 4f
|
||||
shrl $11, %edx
|
||||
addl %edx, %eax
|
||||
#ifdef PIC
|
||||
|
Loading…
Reference in New Issue
Block a user