1/* Driver fragment for __builtin_shuffle of any vector shape.  */
2
3extern void abort (void);
4
5#ifndef UNSUPPORTED
6V a, b, c, d;
7
8#define T(num, msk...) \
9__attribute__((noinline, noclone)) void		\
10test_##num (void)				\
11{						\
12  VI mask = { msk };				\
13  int i;					\
14  c = __builtin_shuffle (a, mask);		\
15  d = __builtin_shuffle (a, b, mask);		\
16  __asm ("" : : "r" (&c), "r" (&d) : "memory");	\
17  for (i = 0; i < N; ++i)			\
18    if (c[i] != a[mask[i] & (N - 1)])		\
19      abort ();					\
20    else if ((mask[i] & N))			\
21      {						\
22	if (d[i] != b[mask[i] & (N - 1)])	\
23	  abort ();				\
24      }						\
25    else if (d[i] != a[mask[i] & (N - 1)])	\
26      abort ();					\
27}
28TESTS
29#ifdef EXPENSIVE
30EXPTESTS
31#endif
32#endif
33
34int
35main ()
36{
37#ifndef UNSUPPORTED
38  int i;
39  for (i = 0; i < N; ++i)
40    {
41      a[i] = i + 2;
42      b[i] = N + i + 2;
43    }
44
45#undef T
46#define T(num, msk...) \
47  test_##num ();
48  TESTS
49#ifdef EXPENSIVE
50  EXPTESTS
51#endif
52#endif
53
54  return 0;
55}
56