summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2009-02-16 20:37:49 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2009-02-16 20:37:49 +0000
commit0fb2a9980fb514705fca77f06309793b76c7e917 (patch)
tree5714dffe97f911ae5c3baa320d1c4804984b80b2
parentc05ac95698656fc7584d08104e5719c26f4bb7ce (diff)
downloadgcc-0fb2a9980fb514705fca77f06309793b76c7e917.tar.gz
gcc/
2009-02-16 H.J. Lu <hongjiu.lu@intel.com> PR target/37049 * config/i386/i386.c (ix86_expand_push): Set memory alignment to function argument boundary. gcc/testsuite/ 2009-02-16 H.J. Lu <hongjiu.lu@intel.com> PR target/37049 * gcc.target/i386/push-1.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144209 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/push-1.c15
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a881d27fa49..981f150f3b1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/37049
+ * config/i386/i386.c (ix86_expand_push): Set memory alignment
+ to function argument boundary.
+
2009-02-16 Hariharan Sandanagobalane <hariharan@picochip.com>
* config/picochip/picochip.md (lea_add): Allow any nonimmediate
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 9c758a223ee..582a9dc4a69 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12594,6 +12594,12 @@ ix86_expand_push (enum machine_mode mode, rtx x)
emit_move_insn (stack_pointer_rtx, tmp);
tmp = gen_rtx_MEM (mode, stack_pointer_rtx);
+
+ /* When we push an operand onto stack, it has to be aligned at least
+ at the function argument boundary. */
+ set_mem_align (tmp,
+ ix86_function_arg_boundary (mode, NULL_TREE));
+
emit_move_insn (tmp, x);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f7d499cf296..73f0bc58a6e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-02-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/37049
+ * gcc.target/i386/push-1.c: New.
+
2009-02-15 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/struct/w_prof_single_str_global.c: Mask return value.
diff --git a/gcc/testsuite/gcc.target/i386/push-1.c b/gcc/testsuite/gcc.target/i386/push-1.c
new file mode 100644
index 00000000000..cf5a1041364
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/push-1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-options "-w -msse2 -Os" } */
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+
+extern void foo (__m128 x, __m128 y ,__m128 z ,__m128 a, int size);
+
+void
+bar (void)
+{
+ __m128 x = { 1.0 };
+ foo (x, x, x, x, 5);
+}
+
+/* { dg-final { scan-assembler-not "movups" } } */