(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vl-broadcast-pr87767-4.c
       1  /* PR target/87767 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -mavx512f -mavx512vl" } */
       4  /* { dg-require-effective-target avx512vl } */
       5  
       6  #define AVX512VL
       7  #include "avx512f-helper.h"
       8  
       9  #include "avx512vl-broadcast-pr87767-3.c"
      10  
      11  #define RTEST(VTYPE, TYPE, N, OP_NAME, OP1, OP2)				\
      12    do									\
      13      {									\
      14        TYPE exp[N], src1[N], src2[N];					\
      15        VTYPE res;							\
      16        for (int i = 0; i < N; i++)					\
      17  	{								\
      18  	  src1[i] = i * i * 107.2f;					\
      19  	  src2[i] = i * 2.f - 404.f;					\
      20  	}								\
      21        res = foo_##OP_NAME##_##VTYPE (*(VTYPE*)&src1[0], *(VTYPE*)&src2[0]); \
      22        for (int i = 0; i < N; i ++)					\
      23  	exp[i] = (OP1 src1[i] * src2[i]) OP2 CONSTANT;			\
      24        for (int j = 0; j < N; j++)					\
      25  	{								\
      26  	  if (res[j] != exp[j])						\
      27  	    abort();							\
      28  	}								\
      29      }									\
      30    while (0)
      31  
      32  void
      33  test_256 (void)
      34  {
      35    RTEST (v8sf, float, 8, fma,, +);
      36    RTEST (v4df, double, 4, fma,, +);
      37    RTEST (v8sf, float, 8, fms,, -);
      38    RTEST (v4df, double, 4, fms,, -);
      39    RTEST (v8sf, float, 8, fnma,-, +);
      40    RTEST (v4df, double, 4, fnma,-, +);
      41    RTEST (v8sf, float, 8, fnms,-, -);
      42    RTEST (v4df, double, 4, fnms,-, -);
      43  }
      44  
      45  void
      46  test_128 (void)
      47  {
      48    RTEST (v4sf, float, 4, fma,, +);
      49    RTEST (v2df, double, 2, fma,, +);
      50    RTEST (v4sf, float, 4, fms,, -);
      51    RTEST (v2df, double, 2, fms,, -);
      52    RTEST (v4sf, float, 4, fnma,-, +);
      53    RTEST (v2df, double, 2, fnma,-, +);
      54    RTEST (v4sf, float, 4, fnms,-, -);
      55    RTEST (v2df, double, 2, fnms,-, -);
      56  }