* config/bfin/bfin.h (LOCAL_ALIGNMENT): Define.
* config/bfin/bfin.c (bfin_local_alignment): New function.
* config/bfin/bfin-protos.h (bfin_local_alignment): Declare it.
From-SVN: r124570
+2007-05-08 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin.h (LOCAL_ALIGNMENT): Define.
+ * config/bfin/bfin.c (bfin_local_alignment): New function.
+ * config/bfin/bfin-protos.h (bfin_local_alignment): Declare it.
+
2007-05-08 Chao-ying Fu <fu@mips.com>
* doc/md.texi (msub@var{m}@var{n}4, usub@var{m}@var{n}4): Document.
extern void asm_conditional_branch (rtx, rtx *, int, int);
extern rtx bfin_gen_compare (rtx, Mmode);
+extern int bfin_local_alignment (tree, int);
extern int bfin_return_in_memory (tree);
extern void initialize_trampoline (rtx, rtx, rtx);
extern bool bfin_legitimate_address_p (Mmode, rtx, int);
return false;
}
\f
+/* Compute the alignment for a local variable.
+ TYPE is the data type, and ALIGN is the alignment that
+ the object would ordinarily have. The value of this macro is used
+ instead of that alignment to align the object. */
+
+int
+bfin_local_alignment (tree type, int align)
+{
+ /* Increasing alignment for (relatively) big types allows the builtin
+ memcpy can use 32 bit loads/stores. */
+ if (TYPE_SIZE (type)
+ && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+ && (TREE_INT_CST_LOW (TYPE_SIZE (type)) > 8
+ || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 32)
+ return 32;
+ return align;
+}
+\f
/* Implement TARGET_SCHED_ISSUE_RATE. */
static int
/*#define DATA_ALIGNMENT(TYPE, BASIC-ALIGN) for arrays.. */
+/* If defined, a C expression to compute the alignment for a local
+ variable. TYPE is the data type, and ALIGN is the alignment that
+ the object would ordinarily have. The value of this macro is used
+ instead of that alignment to align the object.
+
+ If this macro is not defined, then ALIGN is used.
+
+ One use of this macro is to increase alignment of medium-size
+ data to make it all fit in fewer cache lines. */
+
+#define LOCAL_ALIGNMENT(TYPE, ALIGN) bfin_local_alignment ((TYPE), (ALIGN))
+
/* Make strings word-aligned so strcpy from constants will be faster. */
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
(TREE_CODE (EXP) == STRING_CST \