1/* { dg-do run } */
2/* { dg-options "-O2 -mavx512f" } */
3/* { dg-require-effective-target avx512f } */
4
5#define AVX512F
6
7#include "avx512f-helper.h"
8
9#define SIZE (AVX512F_LEN / 32)
10#include "avx512f-mask-type.h"
11
12void
13TEST (void)
14{
15  UNION_TYPE (AVX512F_LEN_HALF, i_w) val;
16  UNION_TYPE (AVX512F_LEN,) res1,res2,res3;
17  MASK_TYPE mask = MASK_VALUE;
18  float exp[SIZE];
19  int i;
20
21  for (i = 0; i < SIZE; i++)
22    {
23      res1.a[i] = DEFAULT_VALUE;
24      res2.a[i] = DEFAULT_VALUE;
25      res3.a[i] = DEFAULT_VALUE;
26    }
27
28  exp[0] = 1;
29  exp[1] = 2;
30  exp[2] = 4;
31  exp[3] = 8;
32#if AVX512F_LEN > 128
33  exp[4] = -1;
34  exp[5] = -2;
35  exp[6] = -4;
36  exp[7] = -8;
37#endif
38#if AVX512F_LEN > 256
39  exp[8] = 1;
40  exp[9] = 2;
41  exp[10] = 4;
42  exp[11] = 8;
43  exp[12] = -1;
44  exp[13] = -2;
45  exp[14] = -4;
46  exp[15] = -8;
47#endif
48
49  val.a[0] = 0x3c00;
50  val.a[1] = 0x4000;
51  val.a[2] = 0x4400;
52  val.a[3] = 0x4800;
53#if AVX512F_LEN > 128
54  val.a[4] = 0xbc00;
55  val.a[5] = 0xc000;
56  val.a[6] = 0xc400;
57  val.a[7] = 0xc800;
58#endif
59#if AVX512F_LEN > 256
60  val.a[8] = 0x3c00;
61  val.a[9] = 0x4000;
62  val.a[10] = 0x4400;
63  val.a[11] = 0x4800;
64  val.a[12] = 0xbc00;
65  val.a[13] = 0xc000;
66  val.a[14] = 0xc400;
67  val.a[15] = 0xc800;
68#endif
69
70  res1.x = INTRINSIC (_cvtph_ps) (val.x);
71  res2.x = INTRINSIC (_mask_cvtph_ps) (res2.x, mask, val.x);
72  res3.x = INTRINSIC (_maskz_cvtph_ps) (mask, val.x);
73
74  if (UNION_CHECK (AVX512F_LEN,) (res1, exp))
75    abort ();
76
77  MASK_MERGE () (exp, mask, SIZE);
78  if (UNION_CHECK (AVX512F_LEN,) (res2, exp))
79    abort ();
80
81  MASK_ZERO () (exp, mask, SIZE);
82  if (UNION_CHECK (AVX512F_LEN,) (res3, exp))
83    abort ();
84}
85