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 
12 void
TEST(void)13 TEST (void)
14 {
15   UNION_TYPE (AVX512F_LEN,) val;
16   UNION_TYPE (AVX512F_LEN_HALF, i_w) res1,res2,res3;
17   MASK_TYPE mask = MASK_VALUE;
18 #if AVX512F_LEN == 128
19   short exp[SIZE * 2];
20 #else
21   short exp[SIZE];
22 #endif
23   int i;
24 
25   for (i = 0; i < SIZE; i++)
26     {
27       res1.a[i] = DEFAULT_VALUE;
28       res2.a[i] = DEFAULT_VALUE;
29       res3.a[i] = DEFAULT_VALUE;
30     }
31 
32   val.a[0] = 1;
33   val.a[1] = 2;
34   val.a[2] = 4;
35   val.a[3] = 8;
36 #if AVX512F_LEN > 128
37   val.a[4] = -1;
38   val.a[5] = -2;
39   val.a[6] = -4;
40   val.a[7] = -8;
41 #endif
42 #if AVX512F_LEN > 256
43   val.a[8] = 1;
44   val.a[9] = 2;
45   val.a[10] = 4;
46   val.a[11] = 8;
47   val.a[12] = -1;
48   val.a[13] = -2;
49   val.a[14] = -4;
50   val.a[15] = -8;
51 #endif
52 
53   exp[0] = 0x3c00;
54   exp[1] = 0x4000;
55   exp[2] = 0x4400;
56   exp[3] = 0x4800;
57 #if AVX512F_LEN > 128
58   exp[4] = 0xbc00;
59   exp[5] = 0xc000;
60   exp[6] = 0xc400;
61   exp[7] = 0xc800;
62 #else
63   exp[4] = 0;
64   exp[5] = 0;
65   exp[6] = 0;
66   exp[7] = 0;
67 #endif
68 #if AVX512F_LEN > 256
69   exp[8] = 0x3c00;
70   exp[9] = 0x4000;
71   exp[10] = 0x4400;
72   exp[11] = 0x4800;
73   exp[12] = 0xbc00;
74   exp[13] = 0xc000;
75   exp[14] = 0xc400;
76   exp[15] = 0xc800;
77 #endif
78 
79   res1.x = INTRINSIC (_cvtps_ph (val.x, 0));
80   res2.x = INTRINSIC (_mask_cvtps_ph (res2.x, mask, val.x, 0));
81   res3.x = INTRINSIC (_maskz_cvtps_ph (mask, val.x, 0));
82 
83   if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res1, exp))
84     abort ();
85 
86   MASK_MERGE (i_w) (exp, mask, SIZE);
87   if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res2, exp))
88     abort ();
89 
90   MASK_ZERO (i_w) (exp, mask, SIZE);
91   if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res3, exp))
92     abort ();
93 }
94