summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-05 13:21:36 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-05 13:21:36 +0000
commit08c5f4d5555bfa773ae3ab95d6b35b5b79f43b76 (patch)
treeeffb5cf317fbada14a48899a247e85e16f7325b2
parentd1603825ee5cc715034e176baac31c945a8f01bd (diff)
downloadppe42-gcc-08c5f4d5555bfa773ae3ab95d6b35b5b79f43b76.tar.gz
ppe42-gcc-08c5f4d5555bfa773ae3ab95d6b35b5b79f43b76.zip
* config/i386/i386.c (ix86_float_exceptions_rounding_supported_p):
New function. (TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P): Define. c-family: * c-cppbuiltin.c (cpp_iec_559_value): Test flag_excess_precision_cmdline not flag_excess_precision. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204390 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-cppbuiltin.c2
-rw-r--r--gcc/config/i386/i386.c16
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b639e03bda..514b97e0059 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ * config/i386/i386.c (ix86_float_exceptions_rounding_supported_p):
+ New function.
+ (TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P): Define.
+
2013-11-05 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/58958
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 9cd9e794698..2de4c39f404 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ * c-cppbuiltin.c (cpp_iec_559_value): Test
+ flag_excess_precision_cmdline not flag_excess_precision.
+
2013-11-05 Tobias Burnus <burnus@net-b.de>
* c.opt (fopenmp-simd): New option.
diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c
index 09c75c4ff9b..61a124c509c 100644
--- a/gcc/c-family/c-cppbuiltin.c
+++ b/gcc/c-family/c-cppbuiltin.c
@@ -734,7 +734,7 @@ cpp_iec_559_value (void)
if (flag_iso
&& !c_dialect_cxx ()
&& TARGET_FLT_EVAL_METHOD != 0
- && flag_excess_precision != EXCESS_PRECISION_STANDARD)
+ && flag_excess_precision_cmdline != EXCESS_PRECISION_STANDARD)
ret = 0;
/* Various options are contrary to IEEE 754 semantics. */
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 11064d8e240..771fabe6dc5 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -43519,6 +43519,18 @@ ix86_memmodel_check (unsigned HOST_WIDE_INT val)
return val;
}
+/* Implement TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P. */
+
+static bool
+ix86_float_exceptions_rounding_supported_p (void)
+{
+ /* For x87 floating point with standard excess precision handling,
+ there is no adddf3 pattern (since x87 floating point only has
+ XFmode operations) so the default hook implementation gets this
+ wrong. */
+ return TARGET_80387 || TARGET_SSE_MATH;
+}
+
/* Initialize the GCC target structure. */
#undef TARGET_RETURN_IN_MEMORY
#define TARGET_RETURN_IN_MEMORY ix86_return_in_memory
@@ -43895,6 +43907,10 @@ ix86_memmodel_check (unsigned HOST_WIDE_INT val)
#undef TARGET_SPILL_CLASS
#define TARGET_SPILL_CLASS ix86_spill_class
+#undef TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P
+#define TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P \
+ ix86_float_exceptions_rounding_supported_p
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-i386.h"
OpenPOWER on IntegriCloud