Implement C _FloatN, _FloatNx types.
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / vshuf-main.inc
blob52b75ee7365b28537a3e0dba34a9bdb2cc315de5
1 /* Driver fragment for __builtin_shuffle of any vector shape.  */
3 extern void abort (void);
5 #ifndef UNSUPPORTED
6 V a, b, c, d;
8 #define T(num, msk...) \
9 __attribute__((noinline, noclone)) void         \
10 test_##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 ();                                 \
28 TESTS
29 #ifdef EXPENSIVE
30 EXPTESTS
31 #endif
32 #endif
34 int
35 main ()
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     }
45 #undef T
46 #define T(num, msk...) \
47   test_##num ();
48   TESTS
49 #ifdef EXPENSIVE
50   EXPTESTS
51 #endif
52 #endif
54   return 0;