diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2011-04-20 04:18:25 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2011-04-20 04:18:25 +0000 |
commit | b48de48389275f9e7af3912fb4a14da5b18b2fca (patch) | |
tree | 55c3d82aab4d8b0b766221097f191e427c637aa1 /libgfortran/io | |
parent | 1a3118e962531f1a76397596f5448cc8e0b34b5f (diff) | |
download | gcc-b48de48389275f9e7af3912fb4a14da5b18b2fca.zip gcc-b48de48389275f9e7af3912fb4a14da5b18b2fca.tar.gz gcc-b48de48389275f9e7af3912fb4a14da5b18b2fca.tar.bz2 |
re PR libfortran/48602 (Invalid F conversion of G descriptor for values close to powers of 10)
2011-04-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/48602
* io/write_float.def (output_float_FMT_G): Fix reversal in conditional.
Use asm volatile to mark temp variable, avoiding optimization errors.
From-SVN: r172753
Diffstat (limited to 'libgfortran/io')
-rw-r--r-- | libgfortran/io/write_float.def | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index 9e90d80..2bced6f 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -805,7 +805,8 @@ CALCULATE_EXP(16) notes: for Gw.d , n' ' means 4 blanks for Gw.dEe, n' ' means e+2 blanks - for rounding modes adjustment, r, See Fortran F2008 10.7.5.2.2 */ + for rounding modes adjustment, r, See Fortran F2008 10.7.5.2.2 + the asm volatile is required for 32-bit x86 platforms. */ #define OUTPUT_FLOAT_FMT_G(x) \ static void \ @@ -830,7 +831,7 @@ output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \ switch (dtp->u.p.current_unit->round_status)\ {\ case ROUND_ZERO:\ - r = sign_bit ? 0.0 : 1.0;\ + r = sign_bit ? 1.0 : 0.0;\ break;\ case ROUND_UP:\ r = 1.0;\ @@ -867,6 +868,7 @@ output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \ mid = (low + high) / 2;\ \ temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\ + asm volatile ("" : "+m" (temp));\ \ if (m < temp)\ { \ |