2 /* { dg-options "-O2 -mavx512f" } */
3 /* { dg-require-effective-target avx512f } */
7 #include "avx512f-helper.h"
9 #define SIZE (AVX512F_LEN / 64)
10 #include "avx512f-mask-type.h"
14 CALC (double *s
, double *r
, int imm
)
19 for (i
= 0; i
< SIZE
; i
++)
22 case _MM_FROUND_FLOOR
:
23 r
[i
] = floor (s
[i
] * pow (2, m
)) / pow (2, m
);
26 r
[i
] = ceil (s
[i
] * pow (2, m
)) / pow (2, m
);
38 UNION_TYPE (AVX512F_LEN
, d
) res1
,res2
,res3
,s
;
41 MASK_TYPE mask
= 6 ^ (0xff >> SIZE
);
43 imm
= _MM_FROUND_FLOOR
| (7 << 4);
45 for (i
= 0; i
< 3; i
++)
48 for (j
= 0; j
< SIZE
; j
++)
50 s
.a
[j
] = j
* (j
+ 12.0231);
51 res1
.a
[j
] = DEFAULT_VALUE
;
52 res2
.a
[j
] = DEFAULT_VALUE
;
53 res3
.a
[j
] = DEFAULT_VALUE
;
59 imm
= _MM_FROUND_FLOOR
| (7 << 4);
60 res1
.x
= INTRINSIC (_roundscale_pd
) (s
.x
, imm
);
61 res2
.x
= INTRINSIC (_mask_roundscale_pd
) (res2
.x
, mask
, s
.x
, imm
);
62 res3
.x
= INTRINSIC (_maskz_roundscale_pd
) (mask
, s
.x
, imm
);
65 imm
= _MM_FROUND_FLOOR
;
66 res1
.x
= INTRINSIC (_floor_pd
) (s
.x
);
67 res2
.x
= INTRINSIC (_mask_floor_pd
) (res2
.x
, mask
, s
.x
);
70 imm
= _MM_FROUND_CEIL
;
71 res1
.x
= INTRINSIC (_ceil_pd
) (s
.x
);
72 res2
.x
= INTRINSIC (_mask_ceil_pd
) (res2
.x
, mask
, s
.x
);
76 CALC (s
.a
, res_ref
, imm
);
78 if (UNION_CHECK (AVX512F_LEN
, d
) (res1
, res_ref
))
81 MASK_MERGE(d
) (res_ref
,mask
,SIZE
);
83 if (UNION_CHECK (AVX512F_LEN
, d
) (res2
, res_ref
))
86 MASK_ZERO(d
) (res_ref
,mask
,SIZE
);
88 if (!i
&& UNION_CHECK (AVX512F_LEN
, d
) (res3
, res_ref
))