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 }