1133707Skan/* { dg-do run } */
2133707Skan/* { dg-options "-O2 -mavx512f" } */
3156854Sru/* { dg-require-effective-target avx512f } */
4156854Sru
5198471Skan#define AVX512F
6133707Skan
7133707Skan#include "avx512f-helper.h"
8133707Skan
9169718Skan#define SIZE (AVX512F_LEN / 32)
10133707Skan#include "avx512f-mask-type.h"
11133707Skan
12133707Skan
13133707Skanstatic void
14133707SkanCALC (int *src1, int *src2, int *dst)
15133707Skan{
16133707Skan  int i;
17169718Skan
18133707Skan  for (i = 0; i < SIZE; i++)
19133707Skan    dst[i] = src1[i] * src2[i];
20169718Skan}
21169718Skan
22169718Skanvoid
23169718SkanTEST (void)
24169718Skan{
25133707Skan  UNION_TYPE (AVX512F_LEN, i_d) src1, src2, res1, res2, res3;
26133707Skan  MASK_TYPE mask = MASK_VALUE;
27133707Skan  int dst_ref[SIZE];
28133707Skan  int i;
29133707Skan
30133707Skan  for (i = 0; i < SIZE; i++)
31194564Skan    {
32194564Skan      src1.a[i] = i + 50;
33194564Skan      src2.a[i] = i + 100;
34194564Skan    }
35194564Skan
36194564Skan  for (i = 0; i < SIZE; i++)
37194564Skan    res2.a[i] = DEFAULT_VALUE;
38194564Skan
39194564Skan  res1.x = INTRINSIC (_mullo_epi32) (src1.x, src2.x);
40169718Skan  res2.x = INTRINSIC (_mask_mullo_epi32) (res2.x, mask, src1.x, src2.x);
41133707Skan  res3.x = INTRINSIC (_maskz_mullo_epi32) (mask, src1.x, src2.x);
42133707Skan
43133707Skan  CALC (src1.a, src2.a, dst_ref);
44133707Skan
45133707Skan  if (UNION_CHECK (AVX512F_LEN, i_d) (res1, dst_ref))
46133707Skan    abort ();
47133707Skan
48194564Skan  MASK_MERGE (i_d) (dst_ref, mask, SIZE);
49133707Skan  if (UNION_CHECK (AVX512F_LEN, i_d) (res2, dst_ref))
50139106Sru    abort ();
51133707Skan
52194564Skan  MASK_ZERO (i_d) (dst_ref, mask, SIZE);
53133707Skan  if (UNION_CHECK (AVX512F_LEN, i_d) (res3, dst_ref))
54133707Skan    abort ();
55156854Sru
56169718Skan}
57194564Skan