(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512bitalg-vpopcntb-1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx512bitalg -mavx512bw" } */
       3  /* { dg-require-effective-target avx512bitalg } */
       4  /* { dg-require-effective-target avx512bw } */
       5  
       6  #define AVX512BITALG
       7  #define SIZE (AVX512F_LEN / 8)
       8  
       9  #include "avx512f-helper.h"
      10  #include "avx512f-mask-type.h"
      11  
      12  #define TYPE char
      13  
      14  int
      15  CALC (TYPE v)
      16  {
      17    int ret;
      18    int i;
      19  
      20   ret = 0;
      21   for (i = 0; i < sizeof(v) * 8; i++)
      22     if ((v & ((TYPE)1 << (TYPE) i)))
      23       ret++;
      24  
      25   return ret;
      26  }
      27  
      28  void
      29  TEST (void)
      30  {
      31    UNION_TYPE (AVX512F_LEN, i_b) res1, res2, res3, src, src0;
      32    MASK_TYPE mask = MASK_VALUE;
      33    TYPE res_ref[SIZE];
      34    src.x = INTRINSIC (_set1_epi8) (0x3D);
      35    int i;
      36  
      37    for (i = 0; i < SIZE; i++)
      38    {
      39      res_ref[i] = CALC (src.a[i]);
      40      src0.a[i] = DEFAULT_VALUE;
      41    }
      42  
      43    res1.x = INTRINSIC (_popcnt_epi8)       (src.x);
      44    res2.x = INTRINSIC (_mask_popcnt_epi8)  (src0.x, mask, src.x);
      45    res3.x = INTRINSIC (_maskz_popcnt_epi8) (mask, src.x);
      46  
      47    if (UNION_CHECK (AVX512F_LEN, i_b) (res1, res_ref))
      48      abort ();
      49  
      50    MASK_MERGE (i_b) (res_ref, mask, SIZE);
      51    if (UNION_CHECK (AVX512F_LEN, i_b) (res2, res_ref))
      52      abort ();
      53  
      54    MASK_ZERO (i_b) (res_ref, mask, SIZE);
      55    if (UNION_CHECK (AVX512F_LEN, i_b) (res3, res_ref))
      56      abort ();
      57  }