OSDN Git Service

Fix vect-shuffle-* test cases.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / vect-shuffle-2.c
1 #if __SIZEOF_SHORT__ == 2
2 typedef unsigned short V __attribute__((vector_size(16), may_alias));
3
4 struct S
5 {
6   V in, mask, out;
7 };
8
9 struct S tests[] = {
10   {
11     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
12     { 0, 1, 2, 3, 4, 5, 6, 7 },
13     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
14   },
15   {
16     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
17     { 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87 },
18     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
19   },
20   {
21     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
22     { 7, 6, 5, 4, 3, 2, 1, 0 },
23     { 0x8888, 0x7777, 0x6666, 0x5555, 0x4444, 0x3333, 0x2222, 0x1111 },
24   },
25   {
26     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
27     { 7, 0, 5, 3, 2, 4, 1, 6 },
28     { 0x8888, 0x1111, 0x6666, 0x4444, 0x3333, 0x5555, 0x2222, 0x7777 },
29   },
30   {
31     { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 },
32     { 0, 2, 1, 3, 4, 6, 5, 7 },
33     { 0x1111, 0x3333, 0x2222, 0x4444, 0x5555, 0x7777, 0x6666, 0x8888 },
34   },
35   {
36     { 0x1122, 0x3344, 0x5566, 0x7788, 0x99aa, 0xbbcc, 0xddee, 0xff00 },
37     { 3, 1, 2, 0, 7, 5, 6, 4 },
38     { 0x7788, 0x3344, 0x5566, 0x1122, 0xff00, 0xbbcc, 0xddee, 0x99aa },
39   },
40   {
41     { 0x1122, 0x3344, 0x5566, 0x7788, 0x99aa, 0xbbcc, 0xddee, 0xff00 },
42     { 0, 0, 0, 0 },
43     { 0x1122, 0x1122, 0x1122, 0x1122, 0x1122, 0x1122, 0x1122, 0x1122 },
44   },
45   {
46     { 0x1122, 0x3344, 0x5566, 0x7788, 0x99aa, 0xbbcc, 0xddee, 0xff00 },
47     { 1, 6, 1, 6, 1, 6, 1, 6 }, 
48     { 0x3344, 0xddee, 0x3344, 0xddee, 0x3344, 0xddee, 0x3344, 0xddee },
49   }
50 };
51
52 extern void abort(void);
53
54 int main()
55 {
56   int i;
57
58   for (i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i)
59     {
60       V r = __builtin_shuffle(tests[i].in, tests[i].mask);
61       if (memcmp(&r, &tests[i].out, sizeof(V)) != 0)
62         abort();
63     }
64
65   return 0;
66 }
67
68 #endif /* SIZEOF_SHORT */