(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
vect_hadd_1.h
       1  #include <stdint.h>
       2  
       3  #pragma GCC target "+nosve"
       4  
       5  #define N 100
       6  
       7  #define DEF_FUNC(TYPE, B1, B2, C1, C2)					\
       8    void __attribute__ ((noipa))						\
       9    f_##TYPE (TYPE *restrict a, TYPE *restrict b, TYPE *restrict c)	\
      10    {									\
      11      for (int i = 0; i < N; ++i)						\
      12        a[i] = ((__int128) b[i] + c[i] + BIAS) >> 1;			\
      13    }
      14  
      15  #define TEST_FUNC(TYPE, B1, B2, C1, C2)					\
      16    {									\
      17      TYPE a[N], b[N], c[N];						\
      18      for (TYPE i = 0; i < N; ++i)					\
      19        {									\
      20  	b[i] = B1 + i * B2;						\
      21  	c[i] = C1 + i * C2;						\
      22        }									\
      23      f_##TYPE (a, b, c);							\
      24      for (TYPE i = 0; i < N; ++i)					\
      25        if (a[i] != ((B1 + C1 + BIAS + (__int128) i * (B2 + C2)) >> 1))	\
      26  	__builtin_abort ();						\
      27    }
      28  
      29  #define FOR_EACH_SIGNED_TYPE(T) \
      30    T (int8_t, -124, 2, -40, 1) \
      31    T (int16_t, -32000, 510, -10000, 257) \
      32    T (int32_t, -2000000000, 131072, -3277000, 65537) \
      33    T (int64_t, -44, 100, -10000, 99)
      34  
      35  #define FOR_EACH_UNSIGNED_TYPE(T) \
      36    T (uint8_t, 4, 2, 40, 1) \
      37    T (uint16_t, 12, 510, 10000, 257) \
      38    T (uint32_t, 20, 131072, 3277000, 65537) \
      39    T (uint64_t, 90, 100, 10000, 99)