Bug in 64-bit printf on PPC
Franz Sirl
Franz.Sirl-kernel@lauterbach.com
Thu Apr 1 00:00:00 GMT 1999
Yes, this patch fixes it.
Thanks,
Franz.
At 11:07 15.02.99 , Geoff Keating wrote:
>> From: Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
>> Date: Sun, 14 Feb 1999 19:17:55 +0100
>
>> this little program:
>...
>> results on PPC in:
>> ffff00000000208b
>> 18359476226655002763
>...
>
>I think this patch may help. I haven't tested it yet.
>
>The bug affects printing using %llu on 32-bit machines where
>UDIV_TIME > 2 * UMUL_TIME, and only when the value printed is at least
>2^32*10^9.
>
>--
>Geoffrey Keating <geoffk@ozemail.com.au>
>
>===File ~/patches/glibc-47.diff=============================
>1999-02-15 Geoff Keating <geoffk@ozemail.com.au>
>
> * stdio-common/_itoa.c (_itoa): Correct parameters to
> udiv_qrnnd_preinv.
>
>--- glibc-2.0.111/stdio-common/_itoa.c~ Tue Nov 17 14:08:14 1998
>+++ glibc-2.0.111/stdio-common/_itoa.c Mon Feb 15 19:44:36 1999
>@@ -285,7 +285,7 @@ _itoa (value, buflim, base, upper_case)
>
> xl = ((mp_limb_t) value) << big_normalization_steps;
> udiv_qrnnd_preinv (x1lo, x, r, xl, big_base_norm,
>- big_normalization_steps);
>+ brec->big.base_ninv);
> t[2] = x >> big_normalization_steps;
>
> if (big_normalization_steps == 0)
>@@ -295,7 +295,7 @@ _itoa (value, buflim, base, upper_case)
> | (x1lo >> (32 - big_normalization_steps)));
> xl = x1lo << big_normalization_steps;
> udiv_qrnnd_preinv (t[0], x, xh, xl, big_base_norm,
>- big_normalization_steps);
>+ brec->big.base_ninv);
> t[1] = x >> big_normalization_steps;
> #elif UDIV_NEEDS_NORMALIZATION
> mp_limb_t x, xh, xl;
>============================================================
More information about the Libc-alpha
mailing list