From: Richard Henderson Date: Wed, 2 Oct 2002 02:38:02 +0000 (-0700) Subject: real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=69bd00e68103821a2729b05613509bfb04231693;p=gcc.git real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0. * real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0. (real_to_hexadecimal): Likewise. * print-rtl.c (print_rtx): If we are linked with real.c, don't dump the XWINT fields of a floating point CONST_DOUBLE. From-SVN: r57719 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55764a2ebb7..b50421956ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-10-01 Richard Henderson + + * real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0. + (real_to_hexadecimal): Likewise. + * print-rtl.c (print_rtx): If we are linked with real.c, don't + dump the XWINT fields of a floating point CONST_DOUBLE. + 2002-10-01 Jason Thorpe * config/vax/elf.h (FUNCTION_PROFILER): Fix __mcount call. diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index 1364e9498dd..ebebf858672 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -195,6 +195,11 @@ print_rtx (in_rtx) } } +#ifndef GENERATOR_FILE + if (GET_CODE (in_rtx) == CONST_DOUBLE && FLOAT_MODE_P (GET_MODE (in_rtx))) + i = 5; +#endif + /* Get the format string and skip the first elements if we have handled them already. */ format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i; @@ -517,11 +522,12 @@ print_rtx (in_rtx) case CONST_DOUBLE: if (FLOAT_MODE_P (GET_MODE (in_rtx))) { - REAL_VALUE_TYPE val; char s[30]; - REAL_VALUE_FROM_CONST_DOUBLE (val, in_rtx); - REAL_VALUE_TO_DECIMAL (val, s, -1); + real_to_decimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx), -1); + fprintf (outfile, " %s", s); + + real_to_hexadecimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx), -1); fprintf (outfile, " [%s]", s); } break; diff --git a/gcc/real.c b/gcc/real.c index 891be811d03..4ce60d9ad16 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -1388,9 +1388,9 @@ real_to_integer2 (plow, phigh, r) *phigh = high; } -/* Render R as a decimal floating point constant. Emit DIGITS - significant digits in the result. If DIGITS <= 0, choose the - maximum for the representation. */ +/* Render R as a decimal floating point constant. Emit DIGITS significant + digits in the result. If DIGITS <= 0, choose the maximum for the + representation. If DIGITS < 0, strip trailing zeros. */ #define M_LOG10_2 0.30102999566398119521 @@ -1405,6 +1405,7 @@ real_to_decimal (str, r_orig, digits) int dec_exp, max_digits, d, cmp_half; char *p, *first, *last; bool sign; + bool crop_trailing_zeros; r = *r_orig; switch (r.class) @@ -1426,6 +1427,7 @@ real_to_decimal (str, r_orig, digits) } max_digits = SIGNIFICAND_BITS * M_LOG10_2; + crop_trailing_zeros = digits < 0; if (digits <= 0 || digits > max_digits) digits = max_digits; @@ -1514,12 +1516,16 @@ real_to_decimal (str, r_orig, digits) first[0] = first[1]; first[1] = '.'; + if (crop_trailing_zeros) + while (last > first + 3 && last[-1] == '0') + last--; + sprintf (last, "e%+d", dec_exp); } /* Render R as a hexadecimal floating point constant. Emit DIGITS significant digits in the result. If DIGITS <= 0, choose the maximum - for the representation. */ + for the representation. If DIGITS < 0, strip trailing zeros. */ void real_to_hexadecimal (str, r, digits) @@ -1528,7 +1534,8 @@ real_to_hexadecimal (str, r, digits) int digits; { int i, j, exp = r->exp; - char *p; + char *p, *first; + bool crop_trailing_zeros; switch (r->class) { @@ -1548,6 +1555,7 @@ real_to_hexadecimal (str, r, digits) abort (); } + crop_trailing_zeros = digits < 0; if (digits <= 0) digits = SIGNIFICAND_BITS / 4; @@ -1558,6 +1566,7 @@ real_to_hexadecimal (str, r, digits) *p++ = 'x'; *p++ = '0'; *p++ = '.'; + first = p; for (i = SIGSZ - 1; i >= 0; --i) for (j = HOST_BITS_PER_LONG - 4; j >= 0; j -= 4) @@ -1566,7 +1575,12 @@ real_to_hexadecimal (str, r, digits) if (--digits == 0) goto out; } + out: + if (crop_trailing_zeros) + while (p > first + 2 && p[-1] == '0') + p--; + sprintf (p, "p%+d", exp); }