summaryrefslogtreecommitdiff
path: root/gcc/real.h
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-08 13:20:13 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-08 13:20:13 +0000
commit81713f9386aaa3397ac44284a7d6f90fc4b7040e (patch)
treef10f2534b770430a68f03c63d4712a183babb994 /gcc/real.h
parent39e46e4d64364c5b3381604f6158672745e19d64 (diff)
downloadgcc-81713f9386aaa3397ac44284a7d6f90fc4b7040e.tar.gz
2010-01-08 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 155725 {{also coded a bit the infix parser in gcc/melt/ etc..}} {{merged with trunk rev 155725, and minor additions}} * gcc/melt-runtime.c: removed useless trailing spaces. * gcc/melt/warmelt-infixsyntax.melt: added more, notably class_infix_parser, class_infix_delimiter some delimiters and our backtrackable getlex & peeklex functions. Still very incomplete. * gcc/melt/warmelt-outobj.melt: added the translate_macroexpanded_list function to ease factoring out the common translation between infix & lisp syntaxes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@155734 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/real.h')
-rw-r--r--gcc/real.h28
1 files changed, 27 insertions, 1 deletions
diff --git a/gcc/real.h b/gcc/real.h
index e6fa0d2d859..980bf960f5f 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -1,6 +1,7 @@
/* Definitions of floating-point access for GNU compiler.
Copyright (C) 1989, 1991, 1994, 1996, 1997, 1998, 1999,
- 2000, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+ 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -199,6 +200,31 @@ extern const struct real_format *
(FLOAT_MODE_P (MODE) \
&& FLOAT_MODE_FORMAT (MODE)->has_sign_dependent_rounding)
+/* 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 0, are not correct for NaN operands, and are normally
+ disabled for modes with NaNs. The user can ask for them to be
+ done anyway using the -funsafe-math-optimizations switch. */
+#define HONOR_NANS(MODE) \
+ (MODE_HAS_NANS (MODE) && !flag_finite_math_only)
+
+/* 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) \
+ (MODE_HAS_INFINITIES (MODE) && !flag_finite_math_only)
+
+/* Like HONOR_NANS, but true if the given mode distinguishes between
+ positive and negative zero, and the sign of zero is important. */
+#define HONOR_SIGNED_ZEROS(MODE) \
+ (MODE_HAS_SIGNED_ZEROS (MODE) && flag_signed_zeros)
+
+/* Like HONOR_NANS, but true if given mode supports sign-dependent rounding,
+ and the rounding mode is important. */
+#define HONOR_SIGN_DEPENDENT_ROUNDING(MODE) \
+ (MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) && flag_rounding_math)
/* Declare functions in real.c. */