diff options
author | Caroline Tice <cmtice@chromium.org> | 2013-06-21 12:05:49 -0700 |
---|---|---|
committer | Caroline Tice <cmtice@chromium.org> | 2013-06-21 12:05:49 -0700 |
commit | 9c1705845241cdea5cf61574218edef282901fbd (patch) | |
tree | 021da661f8a821bc7eea277521fa13f2043879a0 /libgfortran/io/write_float.def | |
parent | 9bdedf4df4166718fa0a44811c643214c6880471 (diff) | |
parent | 8a46ed36b0449c870d0a938c1010ad610ebcf4f7 (diff) | |
download | gcc-9c1705845241cdea5cf61574218edef282901fbd.tar.gz |
Merge branch 'master' into vtv
Conflicts:
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/varasm.c
libstdc++-v3/ChangeLog
Diffstat (limited to 'libgfortran/io/write_float.def')
-rw-r--r-- | libgfortran/io/write_float.def | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index a157f0b6328..b634ff54f0b 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -961,6 +961,34 @@ __qmath_(quadmath_snprintf) (buffer, size, "%+-#.*Qf", \ #endif +#if defined(GFC_REAL_16_IS_FLOAT128) +#define ISFINITE2Q(val) finiteq(val) +#endif +#define ISFINITE2(val) isfinite(val) +#define ISFINITE2L(val) isfinite(val) + +#define ISFINITE(suff,val) TOKENPASTE(ISFINITE2,suff)(val) + + +#if defined(GFC_REAL_16_IS_FLOAT128) +#define SIGNBIT2Q(val) signbitq(val) +#endif +#define SIGNBIT2(val) signbit(val) +#define SIGNBIT2L(val) signbit(val) + +#define SIGNBIT(suff,val) TOKENPASTE(SIGNBIT2,suff)(val) + + +#if defined(GFC_REAL_16_IS_FLOAT128) +#define ISNAN2Q(val) isnanq(val) +#endif +#define ISNAN2(val) isnan(val) +#define ISNAN2L(val) isnan(val) + +#define ISNAN(suff,val) TOKENPASTE(ISNAN2,suff)(val) + + + /* Generate corresponding I/O format for FMT_G and output. The rules to translate FMT_G to FMT_E or FMT_F from DEC fortran LRM (table 11-2, Chapter 11, "I/O Formatting", P11-25) is: @@ -1127,7 +1155,7 @@ OUTPUT_FLOAT_FMT_G(16,L) {\ GFC_REAL_ ## x tmp; \ tmp = * (GFC_REAL_ ## x *)source; \ - if (isfinite (tmp)) \ + if (ISFINITE (y,tmp)) \ nprinted = DTOA(y,0,tmp); \ else\ nprinted = -1;\ @@ -1194,10 +1222,10 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f, {\ GFC_REAL_ ## x tmp;\ tmp = * (GFC_REAL_ ## x *)source;\ - sign_bit = signbit (tmp);\ - if (!isfinite (tmp))\ + sign_bit = SIGNBIT (y,tmp);\ + if (!ISFINITE (y,tmp))\ { \ - write_infnan (dtp, f, isnan (tmp), sign_bit);\ + write_infnan (dtp, f, ISNAN (y,tmp), sign_bit);\ return;\ }\ tmp = sign_bit ? -tmp : tmp;\ |