mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-04-02 02:49:12 +00:00
This needs further investigation, but for now we can get the tested sources into the poky gcc harness Signed-off-by: Koen Kooi <k-kooi@ti.com>
96 lines
2.7 KiB
Diff
96 lines
2.7 KiB
Diff
gcc/
|
|
* config/arm/arm.c (arm_override_options): Override alignments if
|
|
tuning for Cortex-A8.
|
|
(create_fix_barrier, arm_reorg): If aligning to jumps or loops,
|
|
make labels have a size.
|
|
* config/arm/arm.md (VUNSPEC_ALIGN16, VUNSPEC_ALIGN32): New constants.
|
|
(align_16, align_32): New patterns.
|
|
|
|
2010-07-26 Julian Brown <julian@codesourcery.com>
|
|
|
|
Merge from Sourcery G++ 4.4:
|
|
|
|
Mark Shinwell <shinwell@codesourcery.com>
|
|
|
|
|
|
=== modified file 'gcc/config/arm/arm.c'
|
|
--- old/gcc/config/arm/arm.c 2010-08-10 14:03:02 +0000
|
|
+++ new/gcc/config/arm/arm.c 2010-08-12 11:33:54 +0000
|
|
@@ -1449,6 +1449,16 @@
|
|
chosen. */
|
|
gcc_assert (arm_tune != arm_none);
|
|
|
|
+ if (arm_tune == cortexa8 && optimize >= 3)
|
|
+ {
|
|
+ /* These alignments were experimentally determined to improve SPECint
|
|
+ performance on SPECCPU 2000. */
|
|
+ if (align_functions <= 0)
|
|
+ align_functions = 16;
|
|
+ if (align_jumps <= 0)
|
|
+ align_jumps = 16;
|
|
+ }
|
|
+
|
|
tune_flags = all_cores[(int)arm_tune].flags;
|
|
|
|
if (target_fp16_format_name)
|
|
@@ -11263,7 +11273,10 @@
|
|
gcc_assert (GET_CODE (from) != BARRIER);
|
|
|
|
/* Count the length of this insn. */
|
|
- count += get_attr_length (from);
|
|
+ if (LABEL_P (from) && (align_jumps > 0 || align_loops > 0))
|
|
+ count += MAX (align_jumps, align_loops);
|
|
+ else
|
|
+ count += get_attr_length (from);
|
|
|
|
/* If there is a jump table, add its length. */
|
|
tmp = is_jump_table (from);
|
|
@@ -11603,6 +11616,8 @@
|
|
insn = table;
|
|
}
|
|
}
|
|
+ else if (LABEL_P (insn) && (align_jumps > 0 || align_loops > 0))
|
|
+ address += MAX (align_jumps, align_loops);
|
|
}
|
|
|
|
fix = minipool_fix_head;
|
|
|
|
=== modified file 'gcc/config/arm/arm.md'
|
|
--- old/gcc/config/arm/arm.md 2010-08-12 11:29:02 +0000
|
|
+++ new/gcc/config/arm/arm.md 2010-08-12 11:33:54 +0000
|
|
@@ -135,6 +135,8 @@
|
|
(VUNSPEC_WCMP_EQ 12) ; Used by the iWMMXt WCMPEQ instructions
|
|
(VUNSPEC_WCMP_GTU 13) ; Used by the iWMMXt WCMPGTU instructions
|
|
(VUNSPEC_WCMP_GT 14) ; Used by the iwMMXT WCMPGT instructions
|
|
+ (VUNSPEC_ALIGN16 15) ; Used to force 16-byte alignment.
|
|
+ (VUNSPEC_ALIGN32 16) ; Used to force 32-byte alignment.
|
|
(VUNSPEC_EH_RETURN 20); Use to override the return address for exception
|
|
; handling.
|
|
]
|
|
@@ -11042,6 +11044,24 @@
|
|
"
|
|
)
|
|
|
|
+(define_insn "align_16"
|
|
+ [(unspec_volatile [(const_int 0)] VUNSPEC_ALIGN16)]
|
|
+ "TARGET_EITHER"
|
|
+ "*
|
|
+ assemble_align (128);
|
|
+ return \"\";
|
|
+ "
|
|
+)
|
|
+
|
|
+(define_insn "align_32"
|
|
+ [(unspec_volatile [(const_int 0)] VUNSPEC_ALIGN32)]
|
|
+ "TARGET_EITHER"
|
|
+ "*
|
|
+ assemble_align (256);
|
|
+ return \"\";
|
|
+ "
|
|
+)
|
|
+
|
|
(define_insn "consttable_end"
|
|
[(unspec_volatile [(const_int 0)] VUNSPEC_POOL_END)]
|
|
"TARGET_EITHER"
|
|
|