2 /* { dg-options "-mavx512f -O2" } */
3 /* { dg-require-effective-target avx512f } */
5 #include "avx512f-check.h"
10 compute_scatterdd (__mmask16 m16
, int *idx
,
11 int *src
, int scale
, int *r
)
15 for (i
= 0; i
< 16; i
++)
18 *(int *) (((unsigned char *) r
) + idx
[i
] * scale
) = src
[i
];
28 int res_ref
[16] = { 0 };
29 __mmask16 m16
= 0xBC5D;
31 for (i
= 0; i
< 16; i
++)
33 src
.a
[i
] = 1973 * (i
+ 1) * (i
+ 2);
35 /* About to gather in reverse order,
36 divide by 2 to demonstrate scale */
37 idx
.a
[i
] = (64 - (i
+ 1) * 4) >> 1;
40 _mm512_mask_i32scatter_epi32 (res
, m16
, idx
.x
, src
.x
, SCALE
);
41 compute_scatterdd (m16
, idx
.a
, src
.a
, SCALE
, res_ref
);
43 if (checkVi (res
, res_ref
, 16))
46 _mm512_i32scatter_epi32 (res
, idx
.x
, src
.x
, SCALE
);
47 compute_scatterdd (0xFFFF, idx
.a
, src
.a
, SCALE
, res_ref
);
49 if (checkVi (res
, res_ref
, 16))