1#define vector(elcount, type) \ 2__attribute__((vector_size((elcount)*sizeof(type)))) type 3 4#define vidx(type, vec, idx) (*((type *) &(vec) + idx)) 5 6#define operl(a, b, op) (a op b) 7#define operr(a, b, op) (b op a) 8 9#define check(type, count, vec0, vec1, num, op, lr) \ 10do {\ 11 int __i; \ 12 for (__i = 0; __i < count; __i++) {\ 13 if (vidx (type, vec1, __i) != oper##lr (num, vidx (type, vec0, __i), op)) \ 14 __builtin_abort (); \ 15 }\ 16} while (0) 17 18#define veccompare(type, count, v0, v1) \ 19do {\ 20 int __i; \ 21 for (__i = 0; __i < count; __i++) { \ 22 if (vidx (type, v0, __i) != vidx (type, v1, __i)) \ 23 __builtin_abort (); \ 24 } \ 25} while (0) 26 27 28long __attribute__ ((noinline)) vlng () { return (long)42; } 29int __attribute__ ((noinline)) vint () { return (int) 43; } 30short __attribute__ ((noinline)) vsrt () { return (short)42; } 31char __attribute__ ((noinline)) vchr () { return (char)42; } 32 33 34int main (int argc, char *argv[]) { 35 vector(16, char) c0 = {argc, 1,2,3,4,5,6,7, argc, 1,2,3,4,5,6,7}; 36 vector(16, char) c1; 37 38 vector(8, short) s0 = {argc, 1,2,3,4,5,6,7}; 39 vector(8, short) s1; 40 41 vector(4, int) i0 = {argc, 1, 2, 3}; 42 vector(4, int) i1; 43 44 vector(2, long) l0 = {argc, 1}; 45 vector(2, long) l1; 46 47 c1 = vchr() + c0; check (char, 16, c0, c1, vchr(), +, l); 48 49 s1 = vsrt() + s0; check (short, 8, s0, s1, vsrt(), +, l); 50 s1 = vchr() + s0; check (short, 8, s0, s1, vchr(), +, l); 51 52 i1 = vint() * i0; check (int, 4, i0, i1, vint(), *, l); 53 i1 = vsrt() * i0; check (int, 4, i0, i1, vsrt(), *, l); 54 i1 = vchr() * i0; check (int, 4, i0, i1, vchr(), *, l); 55 56 l1 = vlng() * l0; check (long, 2, l0, l1, vlng(), *, l); 57 l1 = vint() * l0; check (long, 2, l0, l1, vint(), *, l); 58 l1 = vsrt() * l0; check (long, 2, l0, l1, vsrt(), *, l); 59 l1 = vchr() * l0; check (long, 2, l0, l1, vchr(), *, l); 60 61 return 0; 62} 63