2 /* { dg-options "-O2 -mavx512dq" } */
3 /* { dg-require-effective-target avx512dq } */
6 #include "avx512f-helper.h"
11 #include "avx512f-mask-type.h"
12 #define SIZE (AVX512F_LEN / 32)
16 int check_fp_class_sp (float src
, int imm
)
18 int qNaN_res
= isnan (src
);
19 int sNaN_res
= isnan (src
);
20 int Pzero_res
= (src
== 0.0);
21 int Nzero_res
= (src
== -0.0);
22 int PInf_res
= (isinf (src
) == 1);
23 int NInf_res
= (isinf (src
) == -1);
24 int Denorm_res
= (fpclassify (src
) == FP_SUBNORMAL
);
25 int FinNeg_res
= __builtin_finite (src
) && (src
< 0);
27 int result
= (((imm
& 1) && qNaN_res
)
28 || (((imm
>> 1) & 1) && Pzero_res
)
29 || (((imm
>> 2) & 1) && Nzero_res
)
30 || (((imm
>> 3) & 1) && PInf_res
)
31 || (((imm
>> 4) & 1) && NInf_res
)
32 || (((imm
>> 5) & 1) && Denorm_res
)
33 || (((imm
>> 6) & 1) && FinNeg_res
)
34 || (((imm
>> 7) & 1) && sNaN_res
));
40 CALC (float *s1
, int imm
)
45 for (i
= 0; i
< SIZE
; i
++)
46 if (check_fp_class_sp(s1
[i
], imm
))
56 UNION_TYPE (AVX512F_LEN
,) src
;
57 MASK_TYPE res1
, res2
, res_ref
= 0;
58 MASK_TYPE mask
= MASK_VALUE
;
62 for (i
= 2; i
< SIZE
; i
++)
64 src
.a
[i
] = -24.43 + 0.6 * i
;
67 res1
= INTRINSIC (_fpclass_ps_mask
) (src
.x
, 0xFF);
68 res2
= INTRINSIC (_mask_fpclass_ps_mask
) (mask
, src
.x
, 0xFF);
71 res_ref
= CALC (src
.a
, 0xFF);
76 if ((mask
& res_ref
) != res2
)