make -momit-leaf-frame-pointer the default for x86

Richard Henderson rth@redhat.com
Wed May 29 17:58:00 GMT 2002


Tiny functions spend a good fraction of their runtime setting up and
tearing down the unused stack frame.  I think it's high time we made
this the default.

Existing backtrace(3)-like functions should continue to work, since
__builtin_frame_address should still know how to unwind back to the
caller, at which point we have a frame pointer as before.

This is worth about 4k off the size of cc1.


r~


        * config/i386/biarch64.h (TARGET_64BIT_DEFAULT): Define with value.
        (TARGET_BI_ARCH): Likewise.
        * config/i386/i386.h: Test TARGET_64BIT_DEFAULT by value.
        (TARGET_SWITCHES): Combine target defaults here not in TARGET_DEFAULT.
        (TARGET_64BIT_DEFAULT): Default to 0.
        (TARGET_DEFAULT): Default to MASK_OMIT_LEAF_FRAME_POINTER.

Index: biarch64.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/biarch64.h,v
retrieving revision 1.1
diff -c -p -d -u -r1.1 biarch64.h
--- biarch64.h	2 Oct 2001 10:59:38 -0000	1.1
+++ biarch64.h	30 May 2002 00:35:37 -0000
@@ -21,5 +21,5 @@ along with GNU CC; see the file COPYING.
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#define TARGET_64BIT_DEFAULT
-#define TARGET_BI_ARCH
+#define TARGET_64BIT_DEFAULT MASK_64BIT
+#define TARGET_BI_ARCH 1
Index: i386.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.h,v
retrieving revision 1.265
diff -c -p -d -u -r1.265 i386.h
--- i386.h	29 May 2002 20:53:59 -0000	1.265
+++ i386.h	30 May 2002 00:35:37 -0000
@@ -192,7 +192,7 @@ extern int target_flags;
 #ifdef TARGET_BI_ARCH
 #define TARGET_64BIT (target_flags & MASK_64BIT)
 #else
-#ifdef TARGET_64BIT_DEFAULT
+#if TARGET_64BIT_DEFAULT
 #define TARGET_64BIT 1
 #else
 #define TARGET_64BIT 0
@@ -384,14 +384,15 @@ extern int x86_prefetch_sse;
   { "no-red-zone",		MASK_NO_RED_ZONE,			      \
     N_("Do not use red-zone in the x86-64 code") },			      \
   SUBTARGET_SWITCHES							      \
-  { "", TARGET_DEFAULT, 0 }}
+  { "", TARGET_DEFAULT | TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_DEFAULT, 0 }}
 
-#ifdef TARGET_64BIT_DEFAULT
-#define TARGET_DEFAULT (MASK_64BIT | TARGET_SUBTARGET_DEFAULT)
-#else
-#define TARGET_DEFAULT TARGET_SUBTARGET_DEFAULT
+#ifndef TARGET_64BIT_DEFAULT
+#define TARGET_64BIT_DEFAULT 0
 #endif
 
+#define TARGET_DEFAULT MASK_OMIT_LEAF_FRAME_POINTER
+
+
 /* This macro is similar to `TARGET_SWITCHES' but defines names of
    command options that have values.  Its definition is an
    initializer with a subgrouping for each command option.
@@ -590,13 +591,13 @@ extern int x86_prefetch_sse;
 
 #ifndef CPP_CPU_SPEC
 #ifdef TARGET_BI_ARCH
-#ifdef TARGET_64BIT_DEFAULT
+#if TARGET_64BIT_DEFAULT
 #define CPP_CPU_SPEC "%{m32:%(cpp_cpu32)}%{!m32:%(cpp_cpu64)} %(cpp_cpucommon)"
 #else
 #define CPP_CPU_SPEC "%{m64:%(cpp_cpu64)}%{!m64:%(cpp_cpu32)} %(cpp_cpucommon)"
 #endif
 #else
-#ifdef TARGET_64BIT_DEFAULT
+#if TARGET_64BIT_DEFAULT
 #define CPP_CPU_SPEC "%(cpp_cpu64) %(cpp_cpucommon)"
 #else
 #define CPP_CPU_SPEC "%(cpp_cpu32) %(cpp_cpucommon)"
@@ -657,7 +658,7 @@ extern int x86_prefetch_sse;
 #define DOUBLE_TYPE_SIZE 64
 #define LONG_LONG_TYPE_SIZE 64
 
-#if defined (TARGET_BI_ARCH) || defined (TARGET_64BIT_DEFAULT)
+#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
 #define MAX_BITS_PER_WORD 64
 #define MAX_LONG_TYPE_SIZE 64
 #else



More information about the Gcc-patches mailing list