OSDN Git Service

* arm.h (DATA_ALIGNMENT): Align structures, unions and arrays to
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Jan 2009 11:17:53 +0000 (11:17 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Jan 2009 11:17:53 +0000 (11:17 +0000)
a word boundary.
(LOCAL_ALIGNMENT): Similarly.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143566 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/arm.h

index e503435..e8855f3 100644 (file)
@@ -1,3 +1,9 @@
+2009-01-22  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.h (DATA_ALIGNMENT): Align structures, unions and arrays to
+       a word boundary.
+       (LOCAL_ALIGNMENT): Similarly.
+
 2009-01-22  Mark Shinwell  <shinwell@codesourcery.com>
             Joseph Myers  <joseph@codesourcery.com>
 
index f83aaba..fb636f3 100644 (file)
@@ -564,6 +564,19 @@ extern int arm_arch_hwdiv;
      && (ALIGN) < BITS_PER_WORD * CONSTANT_ALIGNMENT_FACTOR)   \
     ? BITS_PER_WORD * CONSTANT_ALIGNMENT_FACTOR : (ALIGN))
 
+/* 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)                                           \
+    && (TREE_CODE (EXP) == ARRAY_TYPE                                  \
+       || TREE_CODE (EXP) == UNION_TYPE                                \
+       || TREE_CODE (EXP) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN))
+
+/* Similarly, make sure that objects on the stack are sensibly aligned.  */
+#define LOCAL_ALIGNMENT(EXP, ALIGN) DATA_ALIGNMENT(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
    compact structures.  The command line option -mstructure_size_boundary=<n>