Hi,

the alpha/vms ABI uses a per-function TOC/GOT, not unlike AIX.  As a 
consequence, -fsection-anchors really reduce the size of the TOC and even of 
the code.

This patch adds support of -fsection-anchors on alpha, and enable by default on 
Alpha/VMA (although it is still off at -O0).  This is a port of a similar patch 
we had for gcc 4.5

Tested on trunk by building alpha64-dec-vms and alpha-linux.

Richard, as it impacts all alpha targets, do you have any objection ?

Tristan.

2011-11-04  Tristan Gingold  <ging...@adacore.com>

        * common/config/alpha/alpha-common.c (alpha_option_init_struct):
        New function.
        (TARGET_OPTION_INIT_STRUCT): Define.
        * config/alpha/alpha.c (TARGET_MIN_ANCHOR_OFFSET)
        (TARGET_MAX_ANCHOR_OFFSET)
        (TARGET_USE_BLOCKS_FOR_CONSTANT_P): Redefine.

index fcf5369..8a366b6 100644
--- a/gcc/common/config/alpha/alpha-common.c
+++ b/gcc/common/config/alpha/alpha-common.c
@@ -36,6 +36,17 @@ static const struct default_options 
alpha_option_optimization_table[] =
     { OPT_LEVELS_NONE, 0, NULL, 0 }
   };
 
+/* Implement TARGET_OPTION_INIT_STRUCT.  */
+
+static void
+alpha_option_init_struct (struct gcc_options *opts ATTRIBUTE_UNUSED)
+{
+#if TARGET_ABI_OPEN_VMS
+  /* Enable section anchors by default.  */
+  opts->x_flag_section_anchors = 1;
+#endif
+}
+
 /* Implement TARGET_HANDLE_OPTION.  */
 
 static bool
@@ -75,6 +86,9 @@ alpha_handle_option (struct gcc_options *opts,
 #undef TARGET_HANDLE_OPTION
 #define TARGET_HANDLE_OPTION alpha_handle_option
 
+#undef TARGET_OPTION_INIT_STRUCT
+#define TARGET_OPTION_INIT_STRUCT alpha_option_init_struct
+
 #undef TARGET_OPTION_OPTIMIZATION_TABLE
 #define TARGET_OPTION_OPTIMIZATION_TABLE alpha_option_optimization_table
 
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 682e5be..9a43f80 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -9643,6 +9643,14 @@ alpha_conditional_register_usage (void)
 #define TARGET_STDARG_OPTIMIZE_HOOK alpha_stdarg_optimize_hook
 #endif
 
+/* Use 16-bits anchor.  */
+#undef TARGET_MIN_ANCHOR_OFFSET
+#define TARGET_MIN_ANCHOR_OFFSET -0x7fff - 1
+#undef TARGET_MAX_ANCHOR_OFFSET
+#define TARGET_MAX_ANCHOR_OFFSET 0x7fff
+#undef TARGET_USE_BLOCKS_FOR_CONSTANT_P
+#define TARGET_USE_BLOCKS_FOR_CONSTANT_P hook_bool_mode_const_rtx_true
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS alpha_rtx_costs
 #undef TARGET_ADDRESS_COST

Reply via email to