1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
2010-10-13 Chung-Lin Tang <cltang@codesourcery.com>
Issue #8615
Backport from mainline:
2010-10-12 Chung-Lin Tang <cltang@codesourcery.com>
gcc/
* config/arm/arm.h (ARM_EXPAND_ALIGNMENT): Rename from
DATA_ALIGNMENT and add COND parameter. Update comments above.
(DATA_ALIGNMENT): Use ARM_EXPAND_ALIGNMENT, with !optimize_size.
(LOCAL_ALIGNMENT): Use ARM_EXPAND_ALIGNMENT, with
!flag_conserve_stack.
=== modified file 'gcc/config/arm/arm.h'
Index: gcc-4.5/gcc/config/arm/arm.h
===================================================================
--- gcc-4.5.orig/gcc/config/arm/arm.h
+++ gcc-4.5/gcc/config/arm/arm.h
@@ -596,15 +596,21 @@ extern int low_irq_latency;
/* Align definitions of arrays, unions and structures so that
initializations and copies can be made more efficient. This is not
ABI-changing, so it only affects places where we can see the
- definition. */
-#define DATA_ALIGNMENT(EXP, ALIGN) \
- ((((ALIGN) < BITS_PER_WORD) \
+ definition. Increasing the alignment tends to introduce padding,
+ so don't do this when optimizing for size/conserving stack space. */
+#define ARM_EXPAND_ALIGNMENT(COND, EXP, ALIGN) \
+ (((COND) && ((ALIGN) < BITS_PER_WORD) \
&& (TREE_CODE (EXP) == ARRAY_TYPE \
|| TREE_CODE (EXP) == UNION_TYPE \
|| TREE_CODE (EXP) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN))
+/* Align global data. */
+#define DATA_ALIGNMENT(EXP, ALIGN) \
+ ARM_EXPAND_ALIGNMENT(!optimize_size, EXP, ALIGN)
+
/* Similarly, make sure that objects on the stack are sensibly aligned. */
-#define LOCAL_ALIGNMENT(EXP, ALIGN) DATA_ALIGNMENT(EXP, ALIGN)
+#define LOCAL_ALIGNMENT(EXP, ALIGN) \
+ ARM_EXPAND_ALIGNMENT(!flag_conserve_stack, EXP, ALIGN)
/* Setting STRUCTURE_SIZE_BOUNDARY to 32 produces more efficient code, but the
value set in previous versions of this toolchain was 8, which produces more
|