From: Peter Bergner Date: Fri, 2 Mar 2012 22:42:07 +0000 (-0600) Subject: backport: vsx.md (vsx_set_): Reorder operands. X-Git-Tag: releases/gcc-4.5.4~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bc102983d01964578dcc6b873580576fabb909a;p=thirdparty%2Fgcc.git backport: vsx.md (vsx_set_): Reorder operands. Backport from mainline 2012-03-02 Peter Bergner gcc/ * config/rs6000/vsx.md (vsx_set_): Reorder operands. gcc/testsuite/ * gcc.target/powerpc/pr52457.c: New test. From-SVN: r184838 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 230c266a8b52..7a198a13925f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-03-02 Peter Bergner + + Backport from mainline + 2012-03-02 Peter Bergner + + * config/rs6000/vsx.md (vsx_set_): Reorder operands. + 2012-02-23 Uros Bizjak PR c/52290 diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 827f0343bcb5..5b2353dcdde2 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -1161,9 +1161,9 @@ "VECTOR_MEM_VSX_P (mode)" { if (INTVAL (operands[3]) == 0) - return \"xxpermdi %x0,%x1,%x2,1\"; + return \"xxpermdi %x0,%x2,%x1,1\"; else if (INTVAL (operands[3]) == 1) - return \"xxpermdi %x0,%x2,%x1,0\"; + return \"xxpermdi %x0,%x1,%x2,0\"; else gcc_unreachable (); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d032ebf19082..cac49cd375ec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2012-03-02 Peter Bergner + + Backport from mainline + 2012-03-02 Peter Bergner + + * gcc.target/powerpc/pr52457.c: New test. + 2012-02-23 Tobias Burnus PR fortran/52335 diff --git a/gcc/testsuite/gcc.target/powerpc/pr52457.c b/gcc/testsuite/gcc.target/powerpc/pr52457.c new file mode 100644 index 000000000000..4470e55023fe --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr52457.c @@ -0,0 +1,34 @@ +/* { dg-do run { target { powerpc*-*-linux* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ +/* { dg-require-effective-target vsx_hw } */ +/* { dg-options "-O1 -mcpu=power7" } */ + +extern void abort (void); + +typedef long long T; +typedef T vl_t __attribute__((vector_size(2 * sizeof (T)))); + +vl_t +buggy_func (T x) +{ + vl_t w; + T *p = (T *)&w; + p[0] = p[1] = x; + return w; +} + +int +main(void) +{ + vl_t rval; + T *pl; + + pl = (T *) &rval; + rval = buggy_func (2); + + if (pl[0] != 2 || pl[1] != 2) + abort (); + + return 0; +}