This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Committed 2/3] S/390: Move movstr-2.c into vector subdir.
- From: Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 23 Feb 2016 11:20:12 +0100
- Subject: [Committed 2/3] S/390: Move movstr-2.c into vector subdir.
- Authentication-results: sourceware.org; auth=none
- References: <1456222813-20865-1-git-send-email-krebbel at linux dot vnet dot ibm dot com>
gcc/testsuite/ChangeLog:
* gcc.target/s390/md/movstr-2.c: Move and rename to ...
* gcc.target/s390/vector/stpcpy-1.c: ... this one.
---
gcc/testsuite/gcc.target/s390/md/movstr-2.c | 98 -----------------------
gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c | 100 ++++++++++++++++++++++++
2 files changed, 100 insertions(+), 98 deletions(-)
delete mode 100644 gcc/testsuite/gcc.target/s390/md/movstr-2.c
create mode 100644 gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
diff --git a/gcc/testsuite/gcc.target/s390/md/movstr-2.c b/gcc/testsuite/gcc.target/s390/md/movstr-2.c
deleted file mode 100644
index 1b977a2..0000000
--- a/gcc/testsuite/gcc.target/s390/md/movstr-2.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* The z13 stpcpy implementation plays some alignment tricks for good
- performance. This test tries to make sure it works correctly and
- does not access bytes beyond the source and destination
- strings. */
-
-/* { dg-do run } */
-
-#include <stdio.h>
-#include <sys/mman.h>
-
-#define PAGE_SIZE 4096
-
-struct {
- char unused[PAGE_SIZE - 32];
- char m32[15]; /* page bndry - 32 */
- char m17[1];
- char m16[1];
- char m15[14];
- char m1[1];
- char next_page[PAGE_SIZE];
-} s, d __attribute__((aligned(PAGE_SIZE)));
-
-char *__attribute__((noinline))
-my_stpcpy(char *dest, const char *src)
-{
- return __builtin_stpcpy (dest, src);
-}
-
-void __attribute__ ((noinline))
-check (char *dest, char *src, size_t len)
-{
- char *result;
-
- result = my_stpcpy (dest, src);
- if (result != dest + len)
- __builtin_abort ();
- if (__builtin_memcmp (src, dest, len) != 0)
- __builtin_abort ();
-}
-
-int
-main ()
-{
- char *src[5] = { s.m32, s.m17, s.m16, s.m15, s.m1 };
- char *dst[5] = { d.m32, d.m17, d.m16, d.m15, d.m1 };
- int len[8] = { 33, 32, 31, 17, 16, 15, 1, 0 };
- int i, j, k;
- char backup;
-
- for (i = 0; i < sizeof (s); i++)
- ((char*)&s)[i] = i % 26 + 97;
-
- for (i = 0; i < 5; i++)
- for (j = 0; j < 5; j++)
- for (k = 0; k < 8; k++)
- {
- backup = src[j][len[k]];
- src[j][len[k]] = 0;
- __builtin_memset (&d, 0, sizeof (d));
- check (dst[i], src[j], len[k]);
- src[j][len[k]] = backup;
- }
-
- /* Make all source strings end before the page boundary. */
- backup = s.m1[0];
- s.m1[0] = 0;
-
- if (mprotect (&s.next_page, PAGE_SIZE, PROT_NONE) == -1)
- perror ("mprotect src");
-
- for (i = 0; i < 5; i++)
- for (j = 0; j < 5; j++)
- check (dst[i], src[j],
- PAGE_SIZE - ((unsigned long)src[j] & ((1UL << 12) - 1)) - 1);
-
- if (mprotect (&s.next_page, PAGE_SIZE, PROT_READ | PROT_WRITE) == -1)
- perror ("mprotect src");
-
- s.m1[0] = backup;
-
- if (mprotect (&d.next_page, PAGE_SIZE, PROT_NONE) == -1)
- perror ("mprotect dst");
-
- for (i = 0; i < 5; i++)
- for (j = 0; j < 5; j++)
- {
- int len = PAGE_SIZE - ((unsigned long)dst[i] & ((1UL << 12) - 1)) - 1;
- char backup = src[j][len];
-
- src[j][len] = 0;
- __builtin_memset (&d, 0,
- (unsigned long)&d.next_page - (unsigned long)&d);
- check (dst[i], src[j], len);
- src[j][len] = backup;
- }
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c b/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
new file mode 100644
index 0000000..91c1f7c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
@@ -0,0 +1,100 @@
+/* The z13 stpcpy implementation plays some alignment tricks for good
+ performance. This test tries to make sure it works correctly and
+ does not access bytes beyond the source and destination
+ strings. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target vector } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
+
+#include <stdio.h>
+#include <sys/mman.h>
+
+#define PAGE_SIZE 4096
+
+struct {
+ char unused[PAGE_SIZE - 32];
+ char m32[15]; /* page bndry - 32 */
+ char m17[1];
+ char m16[1];
+ char m15[14];
+ char m1[1];
+ char next_page[PAGE_SIZE];
+} s, d __attribute__((aligned(PAGE_SIZE)));
+
+char *__attribute__((noinline))
+my_stpcpy(char *dest, const char *src)
+{
+ return __builtin_stpcpy (dest, src);
+}
+
+void __attribute__ ((noinline))
+check (char *dest, char *src, size_t len)
+{
+ char *result;
+
+ result = my_stpcpy (dest, src);
+ if (result != dest + len)
+ __builtin_abort ();
+ if (__builtin_memcmp (src, dest, len) != 0)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ char *src[5] = { s.m32, s.m17, s.m16, s.m15, s.m1 };
+ char *dst[5] = { d.m32, d.m17, d.m16, d.m15, d.m1 };
+ int len[8] = { 33, 32, 31, 17, 16, 15, 1, 0 };
+ int i, j, k;
+ char backup;
+
+ for (i = 0; i < sizeof (s); i++)
+ ((char*)&s)[i] = i % 26 + 97;
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ for (k = 0; k < 8; k++)
+ {
+ backup = src[j][len[k]];
+ src[j][len[k]] = 0;
+ __builtin_memset (&d, 0, sizeof (d));
+ check (dst[i], src[j], len[k]);
+ src[j][len[k]] = backup;
+ }
+
+ /* Make all source strings end before the page boundary. */
+ backup = s.m1[0];
+ s.m1[0] = 0;
+
+ if (mprotect (&s.next_page, PAGE_SIZE, PROT_NONE) == -1)
+ perror ("mprotect src");
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ check (dst[i], src[j],
+ PAGE_SIZE - ((unsigned long)src[j] & ((1UL << 12) - 1)) - 1);
+
+ if (mprotect (&s.next_page, PAGE_SIZE, PROT_READ | PROT_WRITE) == -1)
+ perror ("mprotect src");
+
+ s.m1[0] = backup;
+
+ if (mprotect (&d.next_page, PAGE_SIZE, PROT_NONE) == -1)
+ perror ("mprotect dst");
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ {
+ int len = PAGE_SIZE - ((unsigned long)dst[i] & ((1UL << 12) - 1)) - 1;
+ char backup = src[j][len];
+
+ src[j][len] = 0;
+ __builtin_memset (&d, 0,
+ (unsigned long)&d.next_page - (unsigned long)&d);
+ check (dst[i], src[j], len);
+ src[j][len] = backup;
+ }
+
+ return 0;
+}
--
1.9.1