aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2020-12-15 16:06:48 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2020-12-24 06:05:46 +0530
commit41290b6e842a2adfbda77a49abfacb0db2d63bfb (patch)
tree512b1a4fcb9e1c2fd47591008d076ba62c3311e9 /sysdeps
parent94547d9209db483c17285599a0c22085067361f0 (diff)
downloadglibc-41290b6e842a2adfbda77a49abfacb0db2d63bfb.zip
glibc-41290b6e842a2adfbda77a49abfacb0db2d63bfb.tar.gz
glibc-41290b6e842a2adfbda77a49abfacb0db2d63bfb.tar.bz2
Partially revert 681900d29683722b1cb0a8e565a0585846ec5a61
Do not attempt to fix the significand top bit in long double input received in printf. The code should never reach here because isnan should now detect unnormals as NaN. This is already a NOP for glibc since it uses the gcc __builtin_isnan, which detects unnormals as NaN. Reviewed-by: Florian Weimer <fweimer@redhat.com>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/x86/ldbl2mpn.c8
-rw-r--r--sysdeps/x86/tst-ldbl-nonnormal-printf.c5
2 files changed, 1 insertions, 12 deletions
diff --git a/sysdeps/x86/ldbl2mpn.c b/sysdeps/x86/ldbl2mpn.c
index 23afedf..ec8464e 100644
--- a/sysdeps/x86/ldbl2mpn.c
+++ b/sysdeps/x86/ldbl2mpn.c
@@ -115,14 +115,6 @@ __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size,
&& res_ptr[N - 1] == 0)
/* Pseudo zero. */
*expt = 0;
- else
- /* Unlike other floating point formats, the most significant bit
- is explicit and expected to be set for normal numbers. Set it
- in case it is cleared in the input. Otherwise, callers will
- not be able to produce the expected multi-precision integer
- layout by shifting. */
- res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1
- - ((N - 1) * BITS_PER_MP_LIMB));
return N;
}
diff --git a/sysdeps/x86/tst-ldbl-nonnormal-printf.c b/sysdeps/x86/tst-ldbl-nonnormal-printf.c
index 54381ec..2b51396 100644
--- a/sysdeps/x86/tst-ldbl-nonnormal-printf.c
+++ b/sysdeps/x86/tst-ldbl-nonnormal-printf.c
@@ -42,10 +42,7 @@ do_test (void)
char buf[30];
int ret = snprintf (buf, sizeof (buf), "%Lg", value);
TEST_COMPARE (ret, strlen (buf));
- if (strcmp (buf, "nan") != 0)
- /* If snprintf does not recognize the non-normal number as a NaN,
- it has added the missing explicit MSB. */
- TEST_COMPARE_STRING (buf, "3.02201e-4624");
+ TEST_COMPARE_STRING (buf, "nan");
return 0;
}