i386.c (ix86_float_exceptions_rounding_supported_p): New function.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 5 Nov 2013 13:21:36 +0000 (13:21 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Tue, 5 Nov 2013 13:21:36 +0000 (13:21 +0000)
* 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.

From-SVN: r204390

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-cppbuiltin.c
gcc/config/i386/i386.c

index 4b639e03bda00fb09e2ba999dc1c78ed6298383e..514b97e0059d563b606996a20315d3fe3d495b55 100644 (file)
@@ -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
index 9cd9e794698615c61027460edc496b01e6a7c148..2de4c39f404fd400f2e1858109268774bc88eead 100644 (file)
@@ -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.
index 09c75c4ff9b5b85157a4d865c395cb4e53016777..61a124c509c557ff48e0b1f5694ed772c37e9cc9 100644 (file)
@@ -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.  */
index 11064d8e24065c3474e32654597fd59806dcb356..771fabe6dc5898c4abb4a2a0e0d0d0e9b83893a8 100644 (file)
@@ -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;
 \f
 #include "gt-i386.h"