1 #define vector(elcount, type) \
2 __attribute__((vector_size((elcount)*sizeof(type)))) type
4 #define vidx(type, vec, idx) (*((type *) &(vec) + idx))
6 #define veccompare(type, count, v0, v1) \
9 for (__i = 0; __i < count; __i++) { \
10 if (vidx (type, v0, __i) != vidx (type, v1, __i)) \
16 int main (int argc
, char *argv
[]) {
17 #define fvec_2 (vector(4, float)){2., 2., 2., 2.}
18 #define dvec_2 (vector(2, double)){2., 2.}
20 vector(4, float) f0
= {1., 2., 3., 4.};
21 vector(4, float) f1
, f2
;
23 vector(2, double) d0
= {1., 2.};
24 vector(2, double) d1
, d2
;
27 f1
= 2 + f0
; f2
= fvec_2
+ f0
; veccompare (float, 4, f1
, f2
);
28 f1
= 2 - f0
; f2
= fvec_2
- f0
; veccompare (float, 4, f1
, f2
);
29 f1
= 2 * f0
; f2
= fvec_2
* f0
; veccompare (float, 4, f1
, f2
);
30 f1
= 2 / f0
; f2
= fvec_2
/ f0
; veccompare (float, 4, f1
, f2
);
32 f1
= f0
+ 2; f2
= f0
+ fvec_2
; veccompare (float, 4, f1
, f2
);
33 f1
= f0
- 2; f2
= f0
- fvec_2
; veccompare (float, 4, f1
, f2
);
34 f1
= f0
* 2; f2
= f0
* fvec_2
; veccompare (float, 4, f1
, f2
);
35 f1
= f0
/ 2; f2
= f0
/ fvec_2
; veccompare (float, 4, f1
, f2
);
37 d1
= 2 + d0
; d2
= dvec_2
+ d0
; veccompare (double, 2, d1
, d2
);
38 d1
= 2 - d0
; d2
= dvec_2
- d0
; veccompare (double, 2, d1
, d2
);
39 d1
= 2 * d0
; d2
= dvec_2
* d0
; veccompare (double, 2, d1
, d2
);
40 d1
= 2 / d0
; d2
= dvec_2
/ d0
; veccompare (double, 2, d1
, d2
);
42 d1
= d0
+ 2; d2
= d0
+ dvec_2
; veccompare (double, 2, d1
, d2
);
43 d1
= d0
- 2; d2
= d0
- dvec_2
; veccompare (double, 2, d1
, d2
);
44 d1
= d0
* 2; d2
= d0
* dvec_2
; veccompare (double, 2, d1
, d2
);
45 d1
= d0
/ 2; d2
= d0
/ dvec_2
; veccompare (double, 2, d1
, d2
);