From 88283451b26de29d08ba33148cf2f8cb2680f6f0 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Mon, 13 Jun 2016 17:27:19 +0000 Subject: Fix frexp (NaN) (bug 20250). Various implementations of frexp functions return sNaN for sNaN input. This patch fixes them to add such arguments to themselves so that qNaN is returned. Tested for x86_64, x86, mips64 and powerpc. [BZ #20250] * sysdeps/i386/fpu/s_frexpl.S (__frexpl): Add non-finite input to itself. * sysdeps/ieee754/dbl-64/s_frexp.c (__frexp): Add non-finite or zero input to itself. * sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c (__frexp): Likewise. * sysdeps/ieee754/flt-32/s_frexpf.c (__frexpf): Likewise. * sysdeps/ieee754/ldbl-128/s_frexpl.c (__frexpl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Likewise. * sysdeps/ieee754/ldbl-96/s_frexpl.c (__frexpl): Likewise. * math/libm-test.inc (frexp_test_data): Add sNaN tests. --- sysdeps/i386/fpu/s_frexpl.S | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'sysdeps/i386') diff --git a/sysdeps/i386/fpu/s_frexpl.S b/sysdeps/i386/fpu/s_frexpl.S index f687ab3c2e..b33a8a8573 100644 --- a/sysdeps/i386/fpu/s_frexpl.S +++ b/sysdeps/i386/fpu/s_frexpl.S @@ -50,7 +50,7 @@ ENTRY (__frexpl) jz 1f xorl %ecx, %ecx cmpl $0x7fff, %eax - je 1f + je 3f cmpl $0, %eax jne 2f @@ -81,5 +81,12 @@ ENTRY (__frexpl) movl %ecx, (%eax) ret + + /* Infinity or NaN; ensure signaling NaNs are quieted. */ +3: movl EXPP(%esp), %eax + fldt VAL0(%esp) + fadd %st + movl %ecx, (%eax) + ret END (__frexpl) weak_alias (__frexpl, frexpl) -- cgit v1.2.3