1 #define vector(elcount, type) \
2 __attribute__((vector_size((elcount)*sizeof(type)))) type
4 #define vidx(type, vec, idx) (*((type *) &(vec) + idx))
6 #define operl(a, b, op) (a op b)
7 #define operr(a, b, op) (b op a)
9 #define check(type, count, vec0, vec1, num, op, lr) \
12 for (__i = 0; __i < count; __i++) {\
13 if (vidx (type, vec1, __i) != oper##lr (num, vidx (type, vec0, __i), op)) \
18 #define veccompare(type, count, v0, v1) \
21 for (__i = 0; __i < count; __i++) { \
22 if (vidx (type, v0, __i) != vidx (type, v1, __i)) \
28 long __attribute__ ((noinline
)) vlng () { return (long)42; }
29 int __attribute__ ((noinline
)) vint () { return (int) 43; }
30 short __attribute__ ((noinline
)) vsrt () { return (short)42; }
31 char __attribute__ ((noinline
)) vchr () { return (char)42; }
34 int 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};
38 vector(8, short) s0
= {argc
, 1,2,3,4,5,6,7};
41 vector(4, int) i0
= {argc
, 1, 2, 3};
44 vector(2, long) l0
= {argc
, 1};
47 c1
= vchr() + c0
; check (char, 16, c0
, c1
, vchr(), +, l
);
49 s1
= vsrt() + s0
; check (short, 8, s0
, s1
, vsrt(), +, l
);
50 s1
= vchr() + s0
; check (short, 8, s0
, s1
, vchr(), +, l
);
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
);
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
);