2 /* { dg-require-effective-target avx2 } */
3 /* { dg-options "-O2 -mavx2" } */
6 #include "avx2-check.h"
9 compute_i64gatherps (int *src
,
10 int *s1
, long long *s2
, int *mask
, int scale
, int *r
)
14 for (i
= 0; i
< 2; ++i
)
15 if ((mask
[i
] >> 31) & 1)
16 r
[i
] = *(int *) (((unsigned char *) s1
) + s2
[i
] * scale
);
26 union128i_d res
, src
, mask
;
27 int s1
[2], res_ref
[4] = { 0 };
29 for (i
= 0; i
< 2; ++i
)
32 s1
[i
] = 1973 * (i
+ 1) * (i
+ 2);
34 /* Set src as something different from s1 */
38 mask
.a
[i
] = i
% 2 ? 0 : -1;
40 /* About to gather in reverse order,
41 divide by 2 to demonstrate scale */
42 idx
.a
[i
] = (8 - (i
+ 1) * 4) >> 1;
45 res
.x
= _mm_mask_i64gather_epi32 (src
.x
, s1
, idx
.x
, mask
.x
, 2);
47 compute_i64gatherps (src
.a
, s1
, idx
.a
, mask
.a
, 2, res_ref
);
49 if (check_union128i_d (res
, res_ref
) != 0)