aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2007-08-21 17:22:46 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2007-08-21 17:22:46 +0000
commit21d818ff361c99286d2749a10392a32c1dd77187 (patch)
treed531bf25a112d1b71ba7a4f06b5da98307951c73 /gcc
parentd6b3c79757281c980f71f24d62d5b68a0b933d09 (diff)
downloadgcc-21d818ff361c99286d2749a10392a32c1dd77187.zip
gcc-21d818ff361c99286d2749a10392a32c1dd77187.tar.gz
gcc-21d818ff361c99286d2749a10392a32c1dd77187.tar.bz2
rs6000.c (expand_block_clear): Add TARGET_SPE cases to set eight bytes at a time.
gcc/ * config/rs6000/rs6000.c (expand_block_clear): Add TARGET_SPE cases to set eight bytes at a time. (expand_block_move): Likewise. gcc/testsuite/ * gcc.target/powerpc/spe-vector-memset.c: New testcase. * gcc.target/powerpc/spe-vector-memcpy.c: New testcase. From-SVN: r127670
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c19
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/spe-vector-memcpy.c10
-rw-r--r--gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c13
5 files changed, 50 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 82b7685..6cbda5f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-08-21 Nathan Froyd <froydnj@codesourcery.com>
+
+ * config/rs6000/rs6000.c (expand_block_clear): Add TARGET_SPE
+ cases to set eight bytes at a time.
+ (expand_block_move): Likewise.
+
2007-08-21 Jakub Jelinek <jakub@redhat.com>
PR debug/32610
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 5354e52..44e4928 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -9852,6 +9852,8 @@ expand_block_clear (rtx operands[])
clear_step = 16;
else if (TARGET_POWERPC64 && align >= 32)
clear_step = 8;
+ else if (TARGET_SPE && align >= 64)
+ clear_step = 8;
else
clear_step = 4;
@@ -9870,10 +9872,15 @@ expand_block_clear (rtx operands[])
clear_bytes = 16;
mode = V4SImode;
}
+ else if (bytes >= 8 && TARGET_SPE && align >= 64)
+ {
+ clear_bytes = 8;
+ mode = V2SImode;
+ }
else if (bytes >= 8 && TARGET_POWERPC64
- /* 64-bit loads and stores require word-aligned
- displacements. */
- && (align >= 64 || (!STRICT_ALIGNMENT && align >= 32)))
+ /* 64-bit loads and stores require word-aligned
+ displacements. */
+ && (align >= 64 || (!STRICT_ALIGNMENT && align >= 32)))
{
clear_bytes = 8;
mode = DImode;
@@ -9963,6 +9970,12 @@ expand_block_move (rtx operands[])
mode = V4SImode;
gen_func.mov = gen_movv4si;
}
+ else if (TARGET_SPE && bytes >= 8 && align >= 64)
+ {
+ move_bytes = 8;
+ mode = V2SImode;
+ gen_func.mov = gen_movv2si;
+ }
else if (TARGET_STRING
&& bytes > 24 /* move up to 32 bytes at a time */
&& ! fixed_regs[5]
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 002f824..9800a7f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-21 Nathan Froyd <froydnj@codesourcery.com>
+
+ * gcc.target/powerpc/spe-vector-memset.c: New testcase.
+ * gcc.target/powerpc/spe-vector-memcpy.c: New testcase.
+
2007-08-21 Jakub Jelinek <jakub@redhat.com>
PR debug/32610
diff --git a/gcc/testsuite/gcc.target/powerpc/spe-vector-memcpy.c b/gcc/testsuite/gcc.target/powerpc/spe-vector-memcpy.c
new file mode 100644
index 0000000..d12f669
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/spe-vector-memcpy.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-require-effective-target powerpc_spe } */
+/* { dg-options "-O -mspe=yes" } */
+/* { dg-final { scan-assembler "evstdd" } } */
+
+void foo(void)
+{
+ int x[8] __attribute__((aligned(64))) = { 1, 1, 1, 1, 1, 1, 1, 1 };
+ bar (x);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c b/gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c
new file mode 100644
index 0000000..7ecaf10
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c
@@ -0,0 +1,13 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-require-effective-target powerpc_spe } */
+/* { dg-options "-O -mspe=yes" } */
+/* { dg-final { scan-assembler "evstdd" } } */
+
+#include <string.h>
+
+void foo(void)
+{
+ int x[8] __attribute__((aligned(64)));
+ memset (x, 0, sizeof (x));
+ bar (x);
+}