Fixes for floatformat_from_doublest().

This commit is contained in:
Kevin Buettner 2000-03-20 22:15:58 +00:00
parent e7ee86a99a
commit ba8966d6c3
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2000-03-20 Kevin Buettner <kevinb@redhat.com>
* utils.c (floatformat_from_doublest): Don't assume that a long
will be exactly 32 bits in length. Also... make sure space
that we're writing the float to is completely initialized to
zeroes, even when the number of bits in the float is not
evenly divisible by FLOATFORMAT_CHAR_BIT.
2000-03-20 Jim Blandy <jimb@redhat.com>
* i386-linux-nat.c: No need to #include "frame.h" any more.

View File

@ -2722,7 +2722,8 @@ floatformat_from_doublest (fmt, from, to)
unsigned char *uto = (unsigned char *) to;
memcpy (&dfrom, from, sizeof (dfrom));
memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
memset (uto, 0, (fmt->totalsize + FLOATFORMAT_CHAR_BIT - 1)
/ FLOATFORMAT_CHAR_BIT);
if (dfrom == 0)
return; /* Result is zero */
if (dfrom != dfrom) /* Result is NaN */
@ -2771,7 +2772,7 @@ floatformat_from_doublest (fmt, from, to)
mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
mant *= 4294967296.0;
mant_long = (unsigned long) mant;
mant_long = ((unsigned long) mant) & 0xffffffffL;
mant -= mant_long;
/* If the integer bit is implicit, then we need to discard it.
@ -2782,6 +2783,7 @@ floatformat_from_doublest (fmt, from, to)
&& fmt->intbit == floatformat_intbit_no)
{
mant_long <<= 1;
mant_long &= 0xffffffffL;
mant_bits -= 1;
}