2 /* { dg-options "-O2 -mavx512dq -DAVX512DQ" } */
3 /* { dg-require-effective-target avx512dq } */
5 #include "avx512f-helper.h"
9 #define SIZE (AVX512F_LEN / 64)
10 #include "avx512f-mask-type.h"
14 int check_fp_class_dp (double src
, int imm
)
16 int qNaN_res
= isnan (src
);
17 int sNaN_res
= isnan (src
);
18 int Pzero_res
= (src
== 0.0);
19 int Nzero_res
= (src
== -0.0);
20 int PInf_res
= (isinf (src
) == 1);
21 int NInf_res
= (isinf (src
) == -1);
22 int Denorm_res
= (fpclassify (src
) == FP_SUBNORMAL
);
23 int FinNeg_res
= finite (src
) && (src
< 0);
25 int result
= (((imm
& 1) && qNaN_res
)
26 || (((imm
>> 1) & 1) && Pzero_res
)
27 || (((imm
>> 2) & 1) && Nzero_res
)
28 || (((imm
>> 3) & 1) && PInf_res
)
29 || (((imm
>> 4) & 1) && NInf_res
)
30 || (((imm
>> 5) & 1) && Denorm_res
)
31 || (((imm
>> 6) & 1) && FinNeg_res
)
32 || (((imm
>> 7) & 1) && sNaN_res
));
37 CALC (double *s1
, int imm
)
42 for (i
= 0; i
< SIZE
; i
++)
43 if (check_fp_class_dp(s1
[i
], imm
))
53 UNION_TYPE (AVX512F_LEN
, d
) src
;
54 __mmask8 res1
, res2
, res_ref
= 0;
55 MASK_TYPE mask
= MASK_VALUE
;
59 for (i
= 2; i
< SIZE
; i
++)
61 src
.a
[i
] = -24.43 + 0.6 * i
;
64 res1
= INTRINSIC (_fpclass_pd_mask
) (src
.x
, 0xFF);
65 res2
= INTRINSIC (_mask_fpclass_pd_mask
) (mask
, src
.x
, 0xFF);
67 res_ref
= CALC (src
.a
, 0xFF);
72 if ((res_ref
& mask
) != res2
)