Update.
* stdio-common/_itoa.c (_itoa): Fix special 32bit platform case with specific bases and only few bits set in second word.
This commit is contained in:
parent
bc9ffe71f9
commit
4f8dbcb126
|
@ -1,5 +1,8 @@
|
|||
1999-05-05 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* stdio-common/_itoa.c (_itoa): Fix special 32bit platform case
|
||||
with specific bases and only few bits set in second word.
|
||||
|
||||
* timezone/Makefile (install-others): Create target directory
|
||||
before creating tzfiles.
|
||||
|
||||
|
|
|
@ -226,7 +226,7 @@ value for the actions are normally what you want, and only need to be
|
|||
changed in exceptional cases.
|
||||
|
||||
If the optional @code{!} is placed before the @var{status} this means
|
||||
the following action is used for all statii but @var{status} itself.
|
||||
the following action is used for all statuses but @var{status} itself.
|
||||
I.e., @code{!} is negation as in the C language (and others).
|
||||
|
||||
Before we explain the exception which makes this action item necessary
|
||||
|
|
|
@ -175,46 +175,49 @@ _itoa (value, buflim, base, upper_case)
|
|||
|
||||
switch (base)
|
||||
{
|
||||
#define RUN_2N(BITS) \
|
||||
do \
|
||||
{ \
|
||||
/* `unsigned long long int' always has 64 bits. */ \
|
||||
mp_limb_t work_hi = value >> (64 - BITS_PER_MP_LIMB); \
|
||||
\
|
||||
if (BITS_PER_MP_LIMB == 32) \
|
||||
{ \
|
||||
if (work_hi != 0) \
|
||||
{ \
|
||||
mp_limb_t work_lo; \
|
||||
int cnt; \
|
||||
\
|
||||
work_lo = value & 0xfffffffful; \
|
||||
for (cnt = BITS_PER_MP_LIMB / BITS; cnt > 0; --cnt) \
|
||||
{ \
|
||||
*--bp = digits[work_lo & ((1ul << BITS) - 1)]; \
|
||||
work_lo >>= BITS; \
|
||||
} \
|
||||
if (BITS_PER_MP_LIMB % BITS != 0) \
|
||||
{ \
|
||||
work_lo \
|
||||
|= ((work_hi \
|
||||
& ((1 << (BITS - BITS_PER_MP_LIMB%BITS)) \
|
||||
- 1)) \
|
||||
<< BITS_PER_MP_LIMB % BITS); \
|
||||
*--bp = digits[work_lo]; \
|
||||
work_hi >>= BITS - BITS_PER_MP_LIMB % BITS; \
|
||||
} \
|
||||
} \
|
||||
else \
|
||||
work_hi = value & 0xfffffffful; \
|
||||
} \
|
||||
do \
|
||||
{ \
|
||||
*--bp = digits[work_hi & ((1 << BITS) - 1)]; \
|
||||
work_hi >>= BITS; \
|
||||
} \
|
||||
while (work_hi != 0); \
|
||||
} \
|
||||
#define RUN_2N(BITS) \
|
||||
do \
|
||||
{ \
|
||||
/* `unsigned long long int' always has 64 bits. */ \
|
||||
mp_limb_t work_hi = value >> (64 - BITS_PER_MP_LIMB); \
|
||||
\
|
||||
if (BITS_PER_MP_LIMB == 32) \
|
||||
{ \
|
||||
if (work_hi != 0) \
|
||||
{ \
|
||||
mp_limb_t work_lo; \
|
||||
int cnt; \
|
||||
\
|
||||
work_lo = value & 0xfffffffful; \
|
||||
for (cnt = BITS_PER_MP_LIMB / BITS; cnt > 0; --cnt) \
|
||||
{ \
|
||||
*--bp = digits[work_lo & ((1ul << BITS) - 1)]; \
|
||||
work_lo >>= BITS; \
|
||||
} \
|
||||
if (BITS_PER_MP_LIMB % BITS != 0) \
|
||||
{ \
|
||||
work_lo \
|
||||
|= ((work_hi \
|
||||
& ((1 << (BITS - BITS_PER_MP_LIMB%BITS)) \
|
||||
- 1)) \
|
||||
<< BITS_PER_MP_LIMB % BITS); \
|
||||
work_hi >>= BITS - BITS_PER_MP_LIMB % BITS; \
|
||||
if (work_hi == 0) \
|
||||
work_hi = work_lo; \
|
||||
else \
|
||||
*--bp = digits[work_lo]; \
|
||||
} \
|
||||
} \
|
||||
else \
|
||||
work_hi = value & 0xfffffffful; \
|
||||
} \
|
||||
do \
|
||||
{ \
|
||||
*--bp = digits[work_hi & ((1 << BITS) - 1)]; \
|
||||
work_hi >>= BITS; \
|
||||
} \
|
||||
while (work_hi != 0); \
|
||||
} \
|
||||
while (0)
|
||||
case 8:
|
||||
RUN_2N (3);
|
||||
|
|
Loading…
Reference in a new issue