diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-11 11:13:45 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-11 11:13:45 +0000 |
commit | 68d65858f49d338f6985a33ca1ae23d01c7797b3 (patch) | |
tree | b35783a3200c2c8aa44adc916c24401dfe49041e /gcc/defaults.h | |
parent | 7d3bbd11b28cbc892023fcf10699b9551a503136 (diff) | |
download | gcc-68d65858f49d338f6985a33ca1ae23d01c7797b3.tar.gz |
* defaults.h (LARGEST_EXPONENT_IS_NORMAL, ROUND_TOWARDS_ZERO): New.
(MODE_HAS_NANS, MODE_HAS_INFINITIES): Evaluate to false if
LARGEST_EXPONENT_IS_NORMAL for the given mode.
(MODE_HAS_SIGN_DEPENDENT_ROUNDING): False when ROUND_TOWARDS_ZERO.
* real.c (eadd1): Make rounding dependent on !ROUND_TOWARDS_ZERO.
(ediv, emul, eldexp, esqrt): Likewise.
(etoe113, etoe64, etoe53, etoe24, etodec, etoibm, etoc4x): Likewise.
(e24toe): Only check NaNs & infinities if !LARGEST_EXPONENT_IS_NORMAL.
(saturate): New function.
(toe53, toe24): Saturate on overflow if LARGEST_EXPONENT_IS_NORMAL.
(make_nan): Use a saturation value instead of a NaN if
LARGEST_EXPONENT_IS_NORMAL. Warn when this happens.
* fp-bit.c (pack_d): Saturate on NaN, infinite or overflowing
inputs if LARGEST_EXPONENT_IS_NORMAL. Represent subnormals as
zero if NO_DENORMALS. Only round to nearest if !ROUND_TOWARDS_ZERO.
(unpack_d): No NaNs or infinities if LARGEST_EXPONENT_IS_NORMAL.
(_fpmul_parts, _fpdiv_parts): Only round to nearest if
!ROUND_TOWARDS_ZERO.
* doc/tm.texi (LARGEST_EXPONENT_IS_NORMAL): Document.
(ROUND_TOWARDS_ZERO): Document.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50569 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/defaults.h')
-rw-r--r-- | gcc/defaults.h | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/gcc/defaults.h b/gcc/defaults.h index 5142ee7b471..ffec32c6266 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -465,14 +465,26 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE! #define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS #endif +#ifndef LARGEST_EXPONENT_IS_NORMAL +#define LARGEST_EXPONENT_IS_NORMAL(SIZE) 0 +#endif + +#ifndef ROUND_TOWARDS_ZERO +#define ROUND_TOWARDS_ZERO 0 +#endif + #ifndef MODE_HAS_NANS -#define MODE_HAS_NANS(MODE) \ - (FLOAT_MODE_P (MODE) && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT) +#define MODE_HAS_NANS(MODE) \ + (FLOAT_MODE_P (MODE) \ + && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ + && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE))) #endif #ifndef MODE_HAS_INFINITIES -#define MODE_HAS_INFINITIES(MODE) \ - (FLOAT_MODE_P (MODE) && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT) +#define MODE_HAS_INFINITIES(MODE) \ + (FLOAT_MODE_P (MODE) \ + && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ + && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE))) #endif #ifndef MODE_HAS_SIGNED_ZEROS @@ -481,8 +493,10 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE! #endif #ifndef MODE_HAS_SIGN_DEPENDENT_ROUNDING -#define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE) \ - (FLOAT_MODE_P (MODE) && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT) +#define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE) \ + (FLOAT_MODE_P (MODE) \ + && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ + && !ROUND_TOWARDS_ZERO) #endif #endif /* ! GCC_DEFAULTS_H */ |