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