2 /* { dg-options "-mavx512f -O2 -std=gnu99" } */
3 /* { dg-require-effective-target avx512f } */
4 /* { dg-require-effective-target c99_runtime } */
6 #include "avx512f-check.h"
7 #include "avx512f-helper.h"
10 #include "avx512f-mask-type.h"
13 compute_fixupimmps (float *r
, float src
, int tbl
)
24 *r
= signbit (src
) ? -NAN
: NAN
;
36 *r
= signbit (src
) ? -INFINITY
: INFINITY
;
73 union128 s1
, res1
, res2
, res3
;
78 float vals
[2] = { -10, 10 };
79 int controls
[10] = { 0x11111111,
80 0x77777777, 0x88888888, 0x99999999,
81 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc,
82 0xdddddddd, 0xeeeeeeee, 0xffffffff
85 MASK_TYPE mask
= MASK_VALUE
;
87 for (i
= 0; i
< 2; i
++)
90 res1
.a
[0] = res2
.a
[0] = res3
.a
[0] = DEFAULT_VALUE
;
91 for (k
= 1; k
< 4; k
++)
96 res1
.a
[k
] = res2
.a
[k
] = res3
.a
[k
] = DEFAULT_VALUE
;
99 for (j
= 0; j
< 10; j
++)
101 s2
.a
[0] = controls
[j
];
102 compute_fixupimmps (&res_ref
[0], s1
.a
[0], s2
.a
[0]);
104 res1
.x
= _mm_fixupimm_ss (res1
.x
, s1
.x
, s2
.x
, 0);
105 res2
.x
= _mm_mask_fixupimm_ss (res2
.x
, mask
, s1
.x
, s2
.x
, 0);
106 res3
.x
= _mm_maskz_fixupimm_ss (mask
, res3
.x
, s1
.x
, s2
.x
, 0);
108 if (check_union128 (res1
, res_ref
))
111 MASK_MERGE () (res_ref
, mask
, 1);
112 if (check_union128 (res2
, res_ref
))
115 MASK_ZERO () (res_ref
, mask
, 1);
116 if (check_union128 (res3
, res_ref
))