Message ID | 20201215141339.2684384-4-siddhesh@sourceware.org |
---|---|
State | New |
Headers | show |
Series | x86 pseudo-normal numbers | expand |
* Siddhesh Poyarekar: > 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. > --- > sysdeps/x86/ldbl2mpn.c | 8 -------- > 1 file changed, 8 deletions(-) > > diff --git a/sysdeps/x86/ldbl2mpn.c b/sysdeps/x86/ldbl2mpn.c > index 23afedfb67..ec8464eef7 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; > } I think you should also tweak the test in sysdeps/x86/tst-ldbl-nonnormal-printf.c to expect "nan" only. Thanks, Florian
On 12/15/20 8:06 PM, Florian Weimer via Libc-alpha wrote: > I think you should also tweak the test in > sysdeps/x86/tst-ldbl-nonnormal-printf.c to expect "nan" only. Thanks for catching that. I'll fix it up. Siddhesh
diff --git a/sysdeps/x86/ldbl2mpn.c b/sysdeps/x86/ldbl2mpn.c index 23afedfb67..ec8464eef7 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; }