diff options
Diffstat (limited to 'gcc/real.c')
-rw-r--r-- | gcc/real.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/real.c b/gcc/real.c index 5180aec382a..827ac9dd449 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -2,7 +2,7 @@ Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. Contributed by Stephen L. Moshier (moshier@world.std.com). - Re-written by Richard Henderson <rth@redhat.com> + Re-written by Richard Henderson <rth@redhat.com> This file is part of GCC. @@ -31,7 +31,7 @@ #include "tm_p.h" /* The floating point model used internally is not exactly IEEE 754 - compliant, and close to the description in the ISO C standard, + compliant, and close to the description in the ISO C99 standard, section 5.2.4.2.2 Characteristics of floating types. Specifically @@ -49,21 +49,21 @@ significand is fractional. Normalized significands are in the range [0.5, 1.0). - A requirement of the model is that P be larger than than the - largest supported target floating-point type by at least 2 bits. - This gives us proper rounding when we truncate to the target type. - In addition, E must be large enough to hold the smallest supported - denormal number in a normalized form. + A requirement of the model is that P be larger than the largest + supported target floating-point type by at least 2 bits. This gives + us proper rounding when we truncate to the target type. In addition, + E must be large enough to hold the smallest supported denormal number + in a normalized form. Both of these requirements are easily satisfied. The largest target significand is 113 bits; we store at least 160. The smallest denormal number fits in 17 exponent bits; we store 29. Note that the decimal string conversion routines are sensitive to - rounding error. Since the raw arithmetic routines do not themselves + rounding errors. Since the raw arithmetic routines do not themselves have guard digits or rounding, the computation of 10**exp can accumulate more than a few digits of error. The previous incarnation - of real.c successfully used a 144 bit fraction; given the current + of real.c successfully used a 144-bit fraction; given the current layout of REAL_VALUE_TYPE we're forced to expand to at least 160 bits. Target floating point models that use base 16 instead of base 2 @@ -763,8 +763,8 @@ do_multiply (REAL_VALUE_TYPE *r, const REAL_VALUE_TYPE *a, continue; } + memset (&u, 0, sizeof (u)); u.class = rvc_normal; - u.sign = 0; u.exp = exp; for (k = j; k < SIGSZ * 2; k += 2) @@ -3623,7 +3623,7 @@ const struct real_format mips_quad_format = /* Descriptions of VAX floating point formats can be found beginning at - http://www.openvms.compaq.com:8000/73final/4515/4515pro_013.html#f_floating_point_format + http://h71000.www7.hp.com/doc/73FINAL/4515/4515pro_013.html#f_floating_point_format The thing to remember is that they're almost IEEE, except for word order, exponent bias, and the lack of infinities, nans, and denormals. @@ -3768,7 +3768,7 @@ decode_vax_d (const struct real_format *fmt ATTRIBUTE_UNUSED, image0 &= 0xffffffff; image1 &= 0xffffffff; - exp = (image0 >> 7) & 0x7f; + exp = (image0 >> 7) & 0xff; memset (r, 0, sizeof (*r)); |