| /* { 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_); |
| } |