OSDN Git Service

Split 32-byte AVX unaligned load/store.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / avx256-unaligned-load-7.c
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx } */
3 /* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */
4
5 #include "avx-check.h"
6
7 #define N 128
8
9 char **ep;
10 char **fp;
11 char **mp;
12 char **lp;
13
14 __attribute__ ((noinline))
15 void
16 foo (void)
17 {
18   mp = (char **) malloc (N);
19   lp = (char **) malloc (N);
20   ep = (char **) malloc (N);
21   fp = (char **) malloc (N);
22 }
23
24 void
25 avx_test (void)
26 {
27   int i;
28   char **ap, **bp, **cp, **dp;
29   char *str = "STR";
30
31   foo ();
32
33   cp = mp;
34   dp = lp;
35
36   for (i = N; i >= 0; i--)
37     {
38       *cp++ = str;
39       *dp++ = str;
40     }
41
42   ap = ep;
43   bp = fp;
44   cp = mp;
45   dp = lp;
46
47   for (i = N; i >= 0; i--)
48     {
49       *ap++ = *cp++;
50       *bp++ = *dp++;
51     }
52
53   for (i = N; i >= 0; i--)
54     {
55       if (strcmp (*--ap, "STR") != 0)
56         abort ();
57       if (strcmp (*--bp, "STR") != 0)
58         abort ();
59     }
60 }