| /* Driver fragment for __builtin_shuffle of any vector shape. */ |
| |
| extern void abort (void); |
| |
| #ifndef UNSUPPORTED |
| V a, b, c, d; |
| |
| #define T(num, msk...) \ |
| __attribute__((noinline, noclone)) void \ |
| test_##num (void) \ |
| { \ |
| VI mask = { msk }; \ |
| int i; \ |
| c = __builtin_shuffle (a, mask); \ |
| d = __builtin_shuffle (a, b, mask); \ |
| __asm ("" : : "r" (&c), "r" (&d) : "memory"); \ |
| for (i = 0; i < N; ++i) \ |
| if (c[i] != a[mask[i] & (N - 1)]) \ |
| abort (); \ |
| else if ((mask[i] & N)) \ |
| { \ |
| if (d[i] != b[mask[i] & (N - 1)]) \ |
| abort (); \ |
| } \ |
| else if (d[i] != a[mask[i] & (N - 1)]) \ |
| abort (); \ |
| } |
| TESTS |
| #ifdef EXPENSIVE |
| EXPTESTS |
| #endif |
| #endif |
| |
| int |
| main () |
| { |
| #ifndef UNSUPPORTED |
| int i; |
| for (i = 0; i < N; ++i) |
| { |
| a[i] = i + 2; |
| b[i] = N + i + 2; |
| } |
| |
| #undef T |
| #define T(num, msk...) \ |
| test_##num (); |
| TESTS |
| #ifdef EXPENSIVE |
| EXPTESTS |
| #endif |
| #endif |
| |
| return 0; |
| } |