(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vpopcntdq-pr97770-2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx512vpopcntdq" } */
       3  /* { dg-require-effective-target avx512vpopcntdq } */
       4  
       5  #define AVX512VPOPCNTDQ
       6  
       7  #include "avx512f-helper.h"
       8  #include "avx512vpopcntdq-pr97770-1.c"
       9  
      10  #define SIZE_D AVX512F_LEN / 32
      11  #define SIZE_Q AVX512F_LEN / 64
      12  
      13  
      14  #define RTEST(TYPE, LEN, SIZE, MODE)			\
      15    do							\
      16      {							\
      17        TYPE res[SIZE], src[SIZE], res_ref[SIZE], v;	\
      18        int i, j, ret;					\
      19        for (i = 0; i < SIZE; i++)			\
      20  	{						\
      21  	  v = src[i] = i * 2 + 3;			\
      22  	  ret = 0;					\
      23  	  for (j = 0; j < sizeof(v) * 8; j++)		\
      24  	    if ((v & ((TYPE)1 << (TYPE) j)))		\
      25  	      ret++;					\
      26  	  res_ref[i] = ret;				\
      27  	}						\
      28        EVAL(popcount, MODE, LEN) (res, src);		\
      29  	for (i = 0; i < SIZE; i++)			\
      30  	  if (res[i] != res_ref[i])			\
      31  	    abort ();					\
      32      }							\
      33    while (0)
      34  
      35  void
      36  TEST (void)
      37  {
      38    RTEST (long long, AVX512F_LEN, SIZE_Q, q_);
      39    RTEST (int, AVX512F_LEN, SIZE_D, d_);
      40  }