summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-12-10 04:41:46 +0000
committerUlrich Drepper <drepper@redhat.com>2004-12-10 04:41:46 +0000
commit66ebe46c7d7bdc586f0f74ebcbb1e60864634364 (patch)
treead0339c1fb9eae8aae03028f5283e3219b263f8b
parent5cf1ec52565b19d68c3c0fbd853c0b5de26b27b2 (diff)
2004-11-29 Jakub Jelinek <jakub@redhat.com> * stdlib/strtod_l.c (INTERNAL (__STRTOF)): If densize > 2 and numsize < densize, always shift num up by empty + 1 limbs.
-rw-r--r--ChangeLog5
-rw-r--r--stdlib/strtod_l.c16
2 files changed, 10 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 6841abec3b..b89cecfc68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-29 Jakub Jelinek <jakub@redhat.com>
+
+ * stdlib/strtod_l.c (INTERNAL (__STRTOF)): If densize > 2
+ and numsize < densize, always shift num up by empty + 1 limbs.
+
2004-12-07 Paolo Bonzini <bonzini@gnu.org>
* posix/regexec.c (proceed_next_node): Simplify treatment of epsilon
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index dce65cb83c..a656789f4c 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -1442,15 +1442,10 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
if (numsize < densize)
{
mp_size_t empty = densize - numsize;
+ register int i;
if (bits <= 0)
- {
- register int i;
- for (i = numsize; i > 0; --i)
- num[i + empty] = num[i - 1];
- MPN_ZERO (num, empty + 1);
- exponent -= empty * BITS_PER_MP_LIMB;
- }
+ exponent -= empty * BITS_PER_MP_LIMB;
else
{
if (bits + empty * BITS_PER_MP_LIMB <= MANT_DIG)
@@ -1459,7 +1454,6 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
cannot optimize the `else' case that good and
this reflects all currently used FLOAT types
and GMP implementations. */
- register int i;
#if RETURN_LIMB_SIZE <= 2
assert (empty == 1);
__mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
@@ -1470,9 +1464,6 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
while (i >= 0)
retval[i--] = 0;
#endif
- for (i = numsize; i > 0; --i)
- num[i + empty] = num[i - 1];
- MPN_ZERO (num, empty + 1);
}
else
{
@@ -1492,6 +1483,9 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
}
bits += empty * BITS_PER_MP_LIMB;
}
+ for (i = numsize; i > 0; --i)
+ num[i + empty] = num[i - 1];
+ MPN_ZERO (num, empty + 1);
}
else
{