| /* { dg-do run } */ |
| #define vector(elcount, type) \ |
| __attribute__((vector_size((elcount)*sizeof(type)))) type |
| |
| #define vidx(type, vec, idx) (*((type *) &(vec) + idx)) |
| #define uint unsigned int |
| |
| int main (int argc, char *argv[]) { |
| vector(4, uint) vuint = { 1, 2, 3, 4}; |
| vector(4, int) vint0 = { 1, 1, 1, 1}; |
| vector(4, int) vint1 = {-1, -1, -1, -1}; |
| |
| vector(4, int) i1, i2, i3; |
| vector(4, uint) u1, u2, u3; |
| |
| i1 = vint1<< vint0; |
| |
| if (vidx(int, i1, 0) != ((int)-1 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, i1, 1) != ((int)-1 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, i1, 2) != ((int)-1 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, i1, 3) != ((int)-1 << (int)1)) |
| __builtin_abort (); |
| |
| u1 = vuint << vint0; |
| |
| if (vidx(int, u1, 0) != ((uint)1 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, u1, 1) != ((uint)2 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, u1, 2) != ((uint)3 << (int)1)) |
| __builtin_abort (); |
| if (vidx(int, u1, 3) != ((uint)4 << (int)1)) |
| __builtin_abort (); |
| |
| |
| i2 = vint1 >> vuint; |
| |
| if (vidx(int, i2, 0) != ((int)-1 >> (uint)1)) |
| __builtin_abort (); |
| if (vidx(int, i2, 1) != ((int)-1 >> (uint)2)) |
| __builtin_abort (); |
| if (vidx(int, i2, 2) != ((int)-1 >> (uint)3)) |
| __builtin_abort (); |
| if (vidx(int, i2, 3) != ((int)-1 >> (uint)4)) |
| __builtin_abort (); |
| |
| |
| vint1 >>= vuint; |
| |
| vuint <<= vint0; |
| vuint <<= vint1; |
| |
| |
| return 0; |
| } |
| |
| |