This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Enable SSE math on i386 with -Ofast


Hi,
this patch makes -Ofast to also imply -mfpmath=sse.  It is important win on
SPECfP (2000 and 2006). Even though for exmaple the following
float a(float b)
{
   return b+10;
}

results in somewhat ridiculous
a:
.LFB0:  
        .cfi_startproc
        subl    $4, %esp
        .cfi_def_cfa_offset 8
        movss   .LC0, %xmm0
        addss   8(%esp), %xmm0
        movss   %xmm0, (%esp)
        flds    (%esp)
        addl    $4, %esp
        .cfi_def_cfa_offset 4
        ret

I wonder if we can get rid at least of the redundant stack alignment on ESP...

Bootstrapped/regtested x86_64-linux, will commit it on weekend if there are no
complains.  I wonder if -ffast-math should do the same - it is documented as enabling
explicit set of options, bu that can be changed I guess.

	* invoke.texi (Ofast): Update documentation.
	* i386.h (TARGET_FPMATH_DEFAULT): Enable SSE math with -Ofast.
Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi     (revision 203161)
+++ doc/invoke.texi     (working copy)
@@ -6796,6 +6796,7 @@ Disregard strict standards compliance.
 valid for all standard-compliant programs.
 It turns on @option{-ffast-math} and the Fortran-specific
 @option{-fno-protect-parens} and @option{-fstack-arrays}.
+On i386 target it also enable @option{-mfpmath=sse}.
 
 @item -Og
 @opindex Og
Index: config/i386/i386.h
===================================================================
--- config/i386/i386.h	(revision 203161)
+++ config/i386/i386.h	(working copy)
@@ -209,7 +209,8 @@ extern const struct processor_costs ix86
 
 #ifndef TARGET_FPMATH_DEFAULT
 #define TARGET_FPMATH_DEFAULT \
-  (TARGET_64BIT && TARGET_SSE ? FPMATH_SSE : FPMATH_387)
+  ((TARGET_64BIT && TARGET_SSE) \
+   || (TARGET_SSE && optimize_fast) ? FPMATH_SSE : FPMATH_387)
 #endif
 
 #define TARGET_FLOAT_RETURNS_IN_80387 TARGET_FLOAT_RETURNS


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]