diff mbox

[AArch64] Implement section anchors

Message ID 1346941892-6630-1-git-send-email-james.greenhalgh@arm.com
State New
Headers show

Commit Message

James Greenhalgh Sept. 6, 2012, 2:31 p.m. UTC
Hi,

This patch implements section anchors for the AArch64 port.

OK for aarch64-branch?

Regards,
James Greenhalgh

--
2012-09-06  James Greenhalgh  <james.greenhalgh@arm.com>
	    Richard Earnshaw  <rearnsha@arm.com>

	* common/config/aarch64/aarch64-common.c
	(aarch_option_optimization_table): New.
	(TARGET_OPTION_OPTIMIZATION_TABLE): Define.
	* gcc/config.gcc ([aarch64] target_has_targetm_common): Set to yes.
	* gcc/config/aarch64/aarch64-elf.h (ASM_OUTPUT_DEF): New definition.
	* gcc/config/aarch64/aarch64.c (TARGET_MIN_ANCHOR_OFFSET): Define.
	(TARGET_MAX_ANCHOR_OFFSET): Likewise.

Comments

Richard Earnshaw Sept. 6, 2012, 2:38 p.m. UTC | #1
On 06/09/12 15:31, James Greenhalgh wrote:
> 
> Hi,
> 
> This patch implements section anchors for the AArch64 port.
> 
> OK for aarch64-branch?
> 
> Regards,
> James Greenhalgh
> 
> --
> 2012-09-06  James Greenhalgh  <james.greenhalgh@arm.com>
> 	    Richard Earnshaw  <rearnsha@arm.com>
> 
> 	* common/config/aarch64/aarch64-common.c
> 	(aarch_option_optimization_table): New.
> 	(TARGET_OPTION_OPTIMIZATION_TABLE): Define.
> 	* gcc/config.gcc ([aarch64] target_has_targetm_common): Set to yes.
> 	* gcc/config/aarch64/aarch64-elf.h (ASM_OUTPUT_DEF): New definition.
> 	* gcc/config/aarch64/aarch64.c (TARGET_MIN_ANCHOR_OFFSET): Define.
> 	(TARGET_MAX_ANCHOR_OFFSET): Likewise.
> 
> 

OK.

R.
Marcus Shawcroft Sept. 10, 2012, 7:45 a.m. UTC | #2
James, I've committed your patch.

/Marcus

On 6 September 2012 15:38, Richard Earnshaw <rearnsha@arm.com> wrote:
> On 06/09/12 15:31, James Greenhalgh wrote:
>>
>> Hi,
>>
>> This patch implements section anchors for the AArch64 port.
>>
>> OK for aarch64-branch?
>>
>> Regards,
>> James Greenhalgh
>>
>> --
>> 2012-09-06  James Greenhalgh  <james.greenhalgh@arm.com>
>>           Richard Earnshaw  <rearnsha@arm.com>
>>
>>       * common/config/aarch64/aarch64-common.c
>>       (aarch_option_optimization_table): New.
>>       (TARGET_OPTION_OPTIMIZATION_TABLE): Define.
>>       * gcc/config.gcc ([aarch64] target_has_targetm_common): Set to yes.
>>       * gcc/config/aarch64/aarch64-elf.h (ASM_OUTPUT_DEF): New definition.
>>       * gcc/config/aarch64/aarch64.c (TARGET_MIN_ANCHOR_OFFSET): Define.
>>       (TARGET_MAX_ANCHOR_OFFSET): Likewise.
>>
>>
>
> OK.
>
> R.
>
diff mbox

Patch

diff --git gcc/common/config/aarch64/aarch64-common.c gcc/common/config/aarch64/aarch64-common.c
index df72406..bd249e1 100644
--- gcc/common/config/aarch64/aarch64-common.c
+++ gcc/common/config/aarch64/aarch64-common.c
@@ -36,6 +36,17 @@ 
 #undef  TARGET_HANDLE_OPTION
 #define TARGET_HANDLE_OPTION aarch64_handle_option
 
+#undef	TARGET_OPTION_OPTIMIZATION_TABLE
+#define TARGET_OPTION_OPTIMIZATION_TABLE aarch_option_optimization_table
+
+/* Set default optimization options.  */
+static const struct default_options aarch_option_optimization_table[] =
+  {
+    /* Enable section anchors by default at -O1 or higher.  */
+    { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 },
+    { OPT_LEVELS_NONE, 0, NULL, 0 }
+  };
+
 /* Implement TARGET_HANDLE_OPTION.
    This function handles the target specific options for CPU/target selection.
 
diff --git gcc/config.gcc gcc/config.gcc
index 72ef1ca..27a93b5 100644
--- gcc/config.gcc
+++ gcc/config.gcc
@@ -314,6 +314,7 @@  aarch64*-*-*)
 	need_64bit_hwint=yes
 	extra_headers="arm_neon.h"
 	extra_objs="aarch64-builtins.o"
+	target_has_targetm_common=yes
 	;;
 alpha*-*-*)
 	cpu_type=alpha
diff --git gcc/config/aarch64/aarch64-elf.h gcc/config/aarch64/aarch64-elf.h
index 6d8b933..1c021d0 100644
--- gcc/config/aarch64/aarch64-elf.h
+++ gcc/config/aarch64/aarch64-elf.h
@@ -25,6 +25,15 @@ 
 #define ASM_OUTPUT_LABELREF(FILE, NAME) \
   aarch64_asm_output_labelref (FILE, NAME)
 
+#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2)	\
+  do						\
+    {						\
+      assemble_name (FILE, NAME1);		\
+      fputs (" = ", FILE);			\
+      assemble_name (FILE, NAME2);		\
+      fputc ('\n', FILE);			\
+    } while (0)
+
 #define TEXT_SECTION_ASM_OP	"\t.text"
 #define DATA_SECTION_ASM_OP	"\t.data"
 #define BSS_SECTION_ASM_OP	"\t.bss"
diff --git gcc/config/aarch64/aarch64.c gcc/config/aarch64/aarch64.c
index 310c1a0..98f43e1 100644
--- gcc/config/aarch64/aarch64.c
+++ gcc/config/aarch64/aarch64.c
@@ -6799,6 +6799,17 @@  aarch64_c_mode_for_suffix (char suffix)
 #undef TARGET_VECTORIZE_PREFERRED_SIMD_MODE
 #define TARGET_VECTORIZE_PREFERRED_SIMD_MODE aarch64_preferred_simd_mode
 
+/* Section anchor support.  */
+
+#undef TARGET_MIN_ANCHOR_OFFSET
+#define TARGET_MIN_ANCHOR_OFFSET -256
+
+/* Limit the maximum anchor offset to 4k-1, since that's the limit for a
+   byte offset; we can do much more for larger data types, but have no way
+   to determine the size of the access.  We assume accesses are aligned.  */
+#undef TARGET_MAX_ANCHOR_OFFSET
+#define TARGET_MAX_ANCHOR_OFFSET 4095
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-aarch64.h"