diff options
author | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-28 02:11:05 +0000 |
---|---|---|
committer | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-28 02:11:05 +0000 |
commit | 0a8176f36ec372a4571f006c8262b5aa8a29b65c (patch) | |
tree | 811f8a9808cc8a4ff4fa003afa503d9d758bdcc8 /gcc/flags.h | |
parent | 525ef9f93fe5003b747daddb0962d8847332123c (diff) | |
download | gcc-0a8176f36ec372a4571f006c8262b5aa8a29b65c.tar.gz |
* Makefile.in: rtlanal.o now depends upon real.h.
* flags.h [flag_signaling_nans]: New flag.
[HONOR_SNANS]: New macro.
* toplev.c [flag_signaling_nans]: Initialize to false.
(f_options): Add processing for "-fsignaling-nans".
(set_fast_math_flags): Clear flag_signaling_nans with -ffast-math.
(process_options): flag_signaling_nans implies flag_trapping_math.
* c-common.c (cb_register_builtins): Define __SUPPORT_SNAN__
when -fsignaling-nans. First step to implementing WG14's N965.
* fold-const.c (fold) [MULT_EXPR]: Conditionalize transforming
1.0 * x into x, and -1.0 * x into -x on !HONOR_SNANS.
[RDIV_EXPR]: Conditionalize x/1.0 into x on !HONOR_SNANS.
* simplify-rtx.c (simplify_relational_operation): Conditionalize
transforming abs(x) < 0.0 into false on !HONOR_SNANS.
* rtlanal.c: #include real.c for TARGET_FLOAT_FORMAT definitions
required by HONOR_SNANS. (may_trap_p): Floating point DIV, MOD,
UDIV, UMOD, GE, GT, LE, LT and COMPARE may always trap with
-fsignaling_nans. EQ and NE only trap for flag_signaling_nans
not flag_trapping_math (i.e. HONOR_SNANS but not HONOR_NANS).
* doc/invoke.texi: Document new -fsignaling-nans compiler option.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55804 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flags.h')
-rw-r--r-- | gcc/flags.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/flags.h b/gcc/flags.h index 012b63c8d45..06ebd20a59d 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -663,6 +663,9 @@ extern int flag_non_call_exceptions; /* Nonzero means put zero initialized data in the bss section. */ extern int flag_zero_initialized_in_bss; +/* Nonzero means disable transformations observable by signaling NaNs. */ +extern int flag_signaling_nans; + /* True if the given mode has a NaN representation and the treatment of NaN operands is important. Certain optimizations, such as folding x * 0 into x, are not correct for NaN operands, and are normally @@ -671,6 +674,9 @@ extern int flag_zero_initialized_in_bss; #define HONOR_NANS(MODE) \ (MODE_HAS_NANS (MODE) && !flag_unsafe_math_optimizations) +/* Like HONOR_NANs, but true if we honor signaling NaNs (or sNaNs). */ +#define HONOR_SNANS(MODE) (flag_signaling_nans && HONOR_NANS (MODE)) + /* As for HONOR_NANS, but true if the mode can represent infinity and the treatment of infinite values is important. */ #define HONOR_INFINITIES(MODE) \ |