1120586Sbms/* { dg-do run } */
2120586Sbms/* { dg-options "-O2 -mavx512f" } */
3120586Sbms/* { dg-require-effective-target avx512f } */
4120586Sbms
5120586Sbms#define AVX512F
6120586Sbms
7120586Sbms#include "avx512f-helper.h"
8120586Sbms
9120586Sbms#define SIZE (AVX512F_LEN / 32)
10120586Sbms#include "avx512f-mask-type.h"
11120586Sbms
12120586Sbmsstatic void
13120586SbmsCALC (int *r, int *s1, int *s2)
14120586Sbms{
15120586Sbms  int i;
16120586Sbms  for (i = 0; i < SIZE / 4; i++)
17120586Sbms    {
18120586Sbms      r[4 * i] = s1[4 * i + 2];
19120586Sbms      r[4 * i + 1] = s2[4 * i + 2];
20120586Sbms      r[4 * i + 2] = s1[4 * i + 3];
21120586Sbms      r[4 * i + 3] = s2[4 * i + 3];
22120586Sbms    }
23120586Sbms}
24120586Sbms
25120586Sbmsvoid
26120586SbmsTEST (void)
27120586Sbms{
28120586Sbms  int i, sign;
29131680Sru  UNION_TYPE (AVX512F_LEN, i_d) res1, res2, res3, src1, src2;
30131681Sru  MASK_TYPE mask = MASK_VALUE;
31120586Sbms  int res_ref[SIZE];
32120586Sbms
33120586Sbms  sign = -1;
34120586Sbms  for (i = 0; i < SIZE; i++)
35120586Sbms    {
36120586Sbms      src1.a[i] = 34 * i * sign;
37120586Sbms      src1.a[i] = 179 * i;
38120586Sbms      sign = sign * -1;
39120586Sbms    }
40120586Sbms  for (i = 0; i < SIZE; i++)
41120586Sbms    res2.a[i] = DEFAULT_VALUE;
42120586Sbms
43120586Sbms  res1.x = INTRINSIC (_unpackhi_epi32) (src1.x, src2.x);
44120586Sbms  res2.x =
45120586Sbms    INTRINSIC (_mask_unpackhi_epi32) (res2.x, mask, src1.x, src2.x);
46120586Sbms  res3.x = INTRINSIC (_maskz_unpackhi_epi32) (mask, src1.x, src2.x);
47120586Sbms
48120586Sbms  CALC (res_ref, src1.a, src2.a);
49120586Sbms
50120586Sbms  if (UNION_CHECK (AVX512F_LEN, i_d) (res1, res_ref))
51120586Sbms    abort ();
52120586Sbms
53120586Sbms  MASK_MERGE (i_d) (res_ref, mask, SIZE);
54120586Sbms  if (UNION_CHECK (AVX512F_LEN, i_d) (res2, res_ref))
55120586Sbms    abort ();
56120586Sbms
57120586Sbms  MASK_ZERO (i_d) (res_ref, mask, SIZE);
58147647Shmp  if (UNION_CHECK (AVX512F_LEN, i_d) (res3, res_ref))
59120586Sbms    abort ();
60}
61