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))