modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/scal-to-vec3.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 veccompare(type, count, v0, v1) \
     7  do {\
     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  
    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.}
    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  }