diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-09 15:21:54 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-09 15:21:54 +0000 |
commit | 27e0321aadb8c2c656af795612836cf896f0557d (patch) | |
tree | 7624fc2d71c047c04fe2c3c927b645f19760fdee /libgfortran/io | |
parent | cf4848768d6fbbbaec367eb8107504f1803091e2 (diff) | |
download | gcc-27e0321aadb8c2c656af795612836cf896f0557d.tar.gz |
2009-10-09 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 152583 after the LTO merge
inside trunk.
[during merge with trunk 152583 the version information from GCC
is used, not the checksum of the executable!]
* gcc/melt-runtime.h (melt_gccversionstr): added extern declaration.
* gcc/melt-runtime.c: Moved the #include before everything else.
Updated comment NOTE about gengtype - which is now compatible
with the trunk's.
(melt_gccversionstr): added declaration.
(load_checked_dynamic_module_index): use a gcc version string in
modules, not a checksum of the executable.
(melt_really_initialize): get a second argument for the gcc
version string. Initialize melt_gccversionstr with it.
(plugin_init): Build the gccversionstr out of gcc_version
structure.
(melt_initialize): calls melt_really_initialize with
version_string.
(melt_output_cfile_decl_impl): generates a genversionstr_melt
instead of a genchecksum_melt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@152591 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/io')
-rw-r--r-- | libgfortran/io/write_float.def | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index e6880027a86..eca0e56a5e9 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -141,6 +141,13 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, switch (ft) { case FMT_F: + if (d == 0 && e <= 0 && dtp->u.p.scale_factor == 0) + { + memmove (digits + 1, digits, ndigits - 1); + digits[0] = '0'; + e++; + } + nbefore = e + dtp->u.p.scale_factor; if (nbefore < 0) { @@ -255,7 +262,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, case ROUND_NEAREST: /* Round compatible unless there is a tie. A tie is a 5 with all trailing zero's. */ - i = nafter + 1; + i = nafter + nbefore; if (digits[i] == '5') { for(i++ ; i < ndigits; i++) @@ -264,7 +271,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, goto do_rnd; } /* It is a tie so round to even. */ - switch (digits[nafter]) + switch (digits[nafter + nbefore - 1]) { case '1': case '3': @@ -818,14 +825,6 @@ sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ return;\ }\ tmp = sign_bit ? -tmp : tmp;\ - if (f->u.real.d == 0 && f->format == FMT_F\ - && dtp->u.p.scale_factor == 0)\ - {\ - if (tmp < 0.5)\ - tmp = 0.0;\ - else if (tmp < 1.0)\ - tmp = 1.0;\ - }\ zero_flag = (tmp == 0.0);\ \ DTOA ## y\ |