2 /* { dg-options "-mavx512f -O2" } */
3 /* { dg-require-effective-target avx512f } */
6 #include "avx512f-check.h"
8 #define SIZE (128 / 32)
9 #include "avx512f-mask-type.h"
12 compute_scalefss (float *s1
, float *s2
, float *r
)
14 r
[0] = s1
[0] * (float) pow (2, floor (s2
[0]));
23 union128 res1
, res2
, res3
, res4
;
26 MASK_TYPE mask
= MASK_VALUE
;
29 for (i
= 0; i
< SIZE
; i
++)
31 s1
.a
[i
] = 11.5 * (i
+ 1);
32 s2
.a
[i
] = 10.5 * (i
+ 1);
33 res_ref
[i
] = 9.5 * (i
+ 1);
34 res1
.a
[i
] = DEFAULT_VALUE
;
35 res2
.a
[i
] = DEFAULT_VALUE
;
36 res3
.a
[i
] = DEFAULT_VALUE
;
37 res4
.a
[i
] = DEFAULT_VALUE
;
40 res1
.x
= _mm_scalef_ss (s1
.x
, s2
.x
);
41 res2
.x
= _mm_scalef_round_ss (s1
.x
, s2
.x
,
42 _MM_FROUND_TO_NEAREST_INT
| _MM_FROUND_NO_EXC
);
43 res3
.x
= _mm_mask_scalef_round_ss (s1
.x
, mask
, s1
.x
, s2
.x
,
44 _MM_FROUND_TO_NEAREST_INT
| _MM_FROUND_NO_EXC
);
45 res4
.x
= _mm_maskz_scalef_round_ss (mask
, s1
.x
, s2
.x
,
46 _MM_FROUND_TO_NEAREST_INT
| _MM_FROUND_NO_EXC
);
48 compute_scalefss (s1
.a
, s2
.a
, res_ref
);
50 if (check_union128 (res1
, res_ref
))
52 if (check_union128 (res2
, res_ref
))
55 MASK_MERGE () (res_ref
, mask
, 1);
57 if (check_union128 (res3
, res_ref
))
60 MASK_ZERO () (res_ref
, mask
, 1);
62 if (check_union128 (res4
, res_ref
))