blob: f9d0578f03eae6df30236f49649db95e4b83958f [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vpopcntdq" } */
/* { dg-require-effective-target avx512vpopcntdq } */
#define AVX512VPOPCNTDQ
#include "avx512f-helper.h"
#include "avx512vpopcntdq-pr97770-1.c"
#define SIZE_D AVX512F_LEN / 32
#define SIZE_Q AVX512F_LEN / 64
#define RTEST(TYPE, LEN, SIZE, MODE) \
do \
{ \
TYPE res[SIZE], src[SIZE], res_ref[SIZE], v; \
int i, j, ret; \
for (i = 0; i < SIZE; i++) \
{ \
v = src[i] = i * 2 + 3; \
ret = 0; \
for (j = 0; j < sizeof(v) * 8; j++) \
if ((v & ((TYPE)1 << (TYPE) j))) \
ret++; \
res_ref[i] = ret; \
} \
EVAL(popcount, MODE, LEN) (res, src); \
for (i = 0; i < SIZE; i++) \
if (res[i] != res_ref[i]) \
abort (); \
} \
while (0)
void
TEST (void)
{
RTEST (long long, AVX512F_LEN, SIZE_Q, q_);
RTEST (int, AVX512F_LEN, SIZE_D, d_);
}