Index: gcc/gcc/real.h |
diff --git a/gcc/gcc/real.h b/gcc/gcc/real.h |
index 5a686536608c24d283cdd55d5f497c5268410524..980bf960f5feda8450233dc3115952d61b1e80de 100644 |
--- a/gcc/gcc/real.h |
+++ b/gcc/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. |
@@ -24,6 +25,8 @@ |
#ifndef GENERATOR_FILE |
#include <gmp.h> |
#include <mpfr.h> |
+#include <mpc.h> |
+extern tree do_mpc_arg2 (tree, tree, tree, int, int (*)(mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t)); |
#endif |
#include "machmode.h" |
@@ -43,8 +46,7 @@ enum real_value_class { |
#define SIGSZ (SIGNIFICAND_BITS / HOST_BITS_PER_LONG) |
#define SIG_MSB ((unsigned long)1 << (HOST_BITS_PER_LONG - 1)) |
-struct real_value GTY(()) |
-{ |
+struct GTY(()) real_value { |
/* Use the same underlying type for all bit-fields, so as to make |
sure they're packed together, otherwise REAL_VALUE_TYPE_SIZE will |
be miscomputed. */ |
@@ -198,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. */ |
@@ -304,6 +331,8 @@ extern const struct real_format real_internal_format; |
extern const struct real_format decimal_single_format; |
extern const struct real_format decimal_double_format; |
extern const struct real_format decimal_quad_format; |
+extern const struct real_format ieee_half_format; |
+extern const struct real_format arm_half_format; |
/* ====================================================================== */ |