modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/scal-to-vec1.c (about) 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) \ 10 do {\ 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) \ 19 do {\ 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 volatile int one = 1; 28 29 int main (int argc, char *argv[]) { 30 #define fvec_2 (vector(4, float)){2., 2., 2., 2.} 31 #define dvec_2 (vector(2, double)){2., 2.} 32 33 34 vector(8, short) v0 = {one, 1, 2, 3, 4, 5, 6, 7}; 35 vector(8, short) v1; 36 37 vector(4, float) f0 = {1., 2., 3., 4.}; 38 vector(4, float) f1, f2; 39 40 vector(2, double) d0 = {1., 2.}; 41 vector(2, double) d1, d2; 42 43 44 45 v1 = 2 + v0; check (short, 8, v0, v1, 2, +, l); 46 v1 = 2 - v0; check (short, 8, v0, v1, 2, -, l); 47 v1 = 2 * v0; check (short, 8, v0, v1, 2, *, l); 48 v1 = 2 / v0; check (short, 8, v0, v1, 2, /, l); 49 v1 = 2 % v0; check (short, 8, v0, v1, 2, %, l); 50 v1 = 2 ^ v0; check (short, 8, v0, v1, 2, ^, l); 51 v1 = 2 & v0; check (short, 8, v0, v1, 2, &, l); 52 v1 = 2 | v0; check (short, 8, v0, v1, 2, |, l); 53 v1 = 2 << v0; check (short, 8, v0, v1, 2, <<, l); 54 v1 = 2 >> v0; check (short, 8, v0, v1, 2, >>, l); 55 56 v1 = v0 + 2; check (short, 8, v0, v1, 2, +, r); 57 v1 = v0 - 2; check (short, 8, v0, v1, 2, -, r); 58 v1 = v0 * 2; check (short, 8, v0, v1, 2, *, r); 59 v1 = v0 / 2; check (short, 8, v0, v1, 2, /, r); 60 v1 = v0 % 2; check (short, 8, v0, v1, 2, %, r); 61 v1 = v0 ^ 2; check (short, 8, v0, v1, 2, ^, r); 62 v1 = v0 & 2; check (short, 8, v0, v1, 2, &, r); 63 v1 = v0 | 2; check (short, 8, v0, v1, 2, |, r); 64 65 f1 = 2. + f0; f2 = fvec_2 + f0; veccompare (float, 4, f1, f2); 66 f1 = 2. - f0; f2 = fvec_2 - f0; veccompare (float, 4, f1, f2); 67 f1 = 2. * f0; f2 = fvec_2 * f0; veccompare (float, 4, f1, f2); 68 f1 = 2. / f0; f2 = fvec_2 / f0; veccompare (float, 4, f1, f2); 69 70 f1 = f0 + 2.; f2 = f0 + fvec_2; veccompare (float, 4, f1, f2); 71 f1 = f0 - 2.; f2 = f0 - fvec_2; veccompare (float, 4, f1, f2); 72 f1 = f0 * 2.; f2 = f0 * fvec_2; veccompare (float, 4, f1, f2); 73 f1 = f0 / 2.; f2 = f0 / fvec_2; veccompare (float, 4, f1, f2); 74 75 d1 = 2. + d0; d2 = dvec_2 + d0; veccompare (double, 2, d1, d2); 76 d1 = 2. - d0; d2 = dvec_2 - d0; veccompare (double, 2, d1, d2); 77 d1 = 2. * d0; d2 = dvec_2 * d0; veccompare (double, 2, d1, d2); 78 d1 = 2. / d0; d2 = dvec_2 / d0; veccompare (double, 2, d1, d2); 79 80 d1 = d0 + 2.; d2 = d0 + dvec_2; veccompare (double, 2, d1, d2); 81 d1 = d0 - 2.; d2 = d0 - dvec_2; veccompare (double, 2, d1, d2); 82 d1 = d0 * 2.; d2 = d0 * dvec_2; veccompare (double, 2, d1, d2); 83 d1 = d0 / 2.; d2 = d0 / dvec_2; veccompare (double, 2, d1, d2); 84 85 return 0; 86 }