/* { dg-do run } */ /* { dg-require-effective-target avx512bw } */ /* { dg-options "-O2 -mavx512bw -mavx512vl" } */ #ifndef CHECK #define CHECK "avx512f-helper.h" #endif #include CHECK #ifndef TEST #define TEST avx512bw_test #endif #include "avx512bw-pr95488-1.c" #define TEST_MULB(typeV, typeS, N, fn) \ do \ { \ typeV v1, v2, res; \ typeS s1[N], s2[N], exp[N]; \ int i,j; \ \ for (i = 0; i < N; i++) \ { \ s1[i] = i * i; \ s2[i] = i + 20; \ } \ for (i = 0; i < N; i++) \ exp[i] = s1[i] * s2[i]; \ v1 = *(typeV *)&s1[0]; \ v2 = *(typeV *)&s2[0]; \ res = fn (v1, v2); \ for (j = 0; j < N; j++) \ { \ if (res[j] != exp[j]) \ abort(); \ } \ } \ while (0) static void TEST (void) { TEST_MULB (v32qi, char, 32, mul_512); TEST_MULB (v32uqi, unsigned char, 32, umul_512); }