Commit 7c476bde by Richard Sandiford Committed by Richard Sandiford

real.c (encode_ibm_extended): Normalize the input value before converting it to a double.

	* real.c (encode_ibm_extended): Normalize the input value before
	converting it to a double.  Handle the case where a normal value
	rounds to infinity.

From-SVN: r77498
parent 56ae04af
2004-02-08 Richard Sandiford <rsandifo@redhat.com>
* real.c (encode_ibm_extended): Normalize the input value before
converting it to a double. Handle the case where a normal value
rounds to infinity.
2004-02-08 Kazu Hirata <kazu@cs.umass.edu>
* c-objc-common.c (): Fix a typo in a warning.
......
......@@ -3230,19 +3230,24 @@ static void
encode_ibm_extended (const struct real_format *fmt, long *buf,
const REAL_VALUE_TYPE *r)
{
REAL_VALUE_TYPE u, v;
REAL_VALUE_TYPE u, normr, v;
const struct real_format *base_fmt;
base_fmt = fmt->qnan_msb_set ? &ieee_double_format : &mips_double_format;
/* Renormlize R before doing any arithmetic on it. */
normr = *r;
if (normr.class == rvc_normal)
normalize (&normr);
/* u = IEEE double precision portion of significand. */
u = *r;
u = normr;
round_for_format (base_fmt, &u);
encode_ieee_double (base_fmt, &buf[0], &u);
if (r->class == rvc_normal)
if (u.class == rvc_normal)
{
do_add (&v, r, &u, 1);
do_add (&v, &normr, &u, 1);
round_for_format (base_fmt, &v);
encode_ieee_double (base_fmt, &buf[2], &v);
}
......
2004-02-08 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/execute/20040208-[12].c: New tests.
2004-02-08 Eric Botcazou <ebotcazou@libertysurf.fr>
* g++.dg/eh/simd-2.C: Adjust line numbers for SPARC.
......
int main ()
{
long double x;
x = 0x1.0p-500L;
x *= 0x1.0p-522L;
if (x != 0x1.0p-1022L)
abort ();
exit (0);
}
int main ()
{
long double x, y;
x = 0x1.fffffffffffff8p1022L;
x *= 2;
y = 0x1.fffffffffffff8p1023L;
if (memcmp (&x, &y, sizeof (x)) != 0)
abort ();
exit (0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment