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 veccompare(type, count, v0, v1) \ 7do {\ 8 int __i; \ 9 for (__i = 0; __i < count; __i++) { \ 10 if (vidx (type, v0, __i) != vidx (type, v1, __i)) \ 11 __builtin_abort (); \ 12 } \ 13} while (0) 14 15 16int 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.} 19 20 vector(4, float) f0 = {1., 2., 3., 4.}; 21 vector(4, float) f1, f2; 22 23 vector(2, double) d0 = {1., 2.}; 24 vector(2, double) d1, d2; 25 26 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); 31 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); 36 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); 41 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); 46 47 return 0; 48} 49