real.c (encode_ibm_extended): Don't bother rounding low double.

* real.c (encode_ibm_extended): Don't bother rounding low double.
	* c-cppbuiltin.c (builtin_define_float_constants): Tweak MAX
	when fmt->pnan < fmt->p.

From-SVN: r78900
This commit is contained in:
Alan Modra 2004-03-04 10:23:23 +00:00 committed by Alan Modra
parent ca87076c9b
commit ddc6856430
3 changed files with 19 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2004-03-04 Alan Modra <amodra@bigpond.net.au>
* real.c (encode_ibm_extended): Don't bother rounding low double.
* c-cppbuiltin.c (builtin_define_float_constants): Tweak MAX
when fmt->pnan < fmt->p.
2004-03-04 Eric Christopher <echristo@redhat.com>
* config/mips/mips.h (FUNCTION_ARG_REGNO_P): Fix to check

View File

@ -193,6 +193,16 @@ builtin_define_float_constants (const char *name_prefix, const char *fp_suffix,
if (i < n)
*p++ = "08ce"[n - i];
sprintf (p, "p%d", fmt->emax * fmt->log2_b);
if (fmt->pnan < fmt->p)
{
/* This is an IBM extended double format made up of two IEEE
doubles. The value of the long double is the sum of the
values of the two parts. The most significant part is
required to be the value of the long double rounded to the
nearest double. Rounding means we need a slightly smaller
value for LDBL_MAX. */
buf[4 + fmt->pnan / 4] = "7bde"[fmt->pnan % 4];
}
}
sprintf (name, "__%s_MAX__", name_prefix);
builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);

View File

@ -3248,7 +3248,9 @@ encode_ibm_extended (const struct real_format *fmt, long *buf,
if (u.class == rvc_normal)
{
do_add (&v, &normr, &u, 1);
round_for_format (base_fmt, &v);
/* The low double won't need rounding, since we round to a 106 bit
mantissa before calling this function, and we've just
subtracted off the top 54 bits. (53+1 because u is rounded.) */
encode_ieee_double (base_fmt, &buf[2], &v);
}
else