modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/scal-to-vec2.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  
    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; }
    32  
    33  
    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};
    36      vector(16, char) c1;
    37      
    38      vector(8, short) s0 = {argc, 1,2,3,4,5,6,7};
    39      vector(8, short) s1;
    40  
    41      vector(4, int) i0 = {argc, 1, 2, 3};
    42      vector(4, int) i1;
    43  
    44      vector(2, long) l0 = {argc, 1};
    45      vector(2, long) l1;
    46  
    47      c1 = vchr() + c0; check (char, 16, c0, c1, vchr(), +, l);
    48      
    49      s1 = vsrt() + s0; check (short, 8, s0, s1, vsrt(), +, l);
    50      s1 = vchr() + s0; check (short, 8, s0, s1, vchr(), +, l);
    51  
    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);
    55  
    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);
    60  
    61      return 0;
    62  }