2 /* { dg-options "-mavx2 -O2" } */
3 /* { dg-require-effective-target avx2 } */
5 #include "avx2-check.h"
13 init_perm2i128 (unsigned long long *src1
, unsigned long long *src2
, int seed
)
17 for (i
= 0; i
< 4; i
++)
19 src1
[i
] = (i
+ seed
) * (i
+ seed
) * sign
;
20 src2
[i
] = (i
+ seed
) * seed
* sign
;
26 calc_perm2i128 (unsigned long long *src1
,
27 unsigned long long *src2
,
28 unsigned int mask
, unsigned long long *dst
)
37 memcpy (dst
, src1
, 16);
39 memcpy (dst
, src1
+ 2, 16);
41 memcpy (dst
, src2
, 16);
43 memcpy (dst
, src1
+ 2, 16);
46 temp
= (mask
>> 4) & 3;
51 memcpy (dst
+ 2, src1
, 16);
53 memcpy (dst
+ 2, src1
+ 2, 16);
55 memcpy (dst
+ 2, src2
, 16);
57 memcpy (dst
+ 2, src1
+ 2, 16);
64 memset (dst
+ 2, 0, 16);
70 union256i_q src1
, src2
, dst
;
71 unsigned long long dst_ref
[4];
74 for (i
= 0; i
< NUM
; i
++)
76 init_perm2i128 (src1
.a
, src2
.a
, i
);
78 dst
.x
= _mm256_permute2x128_si256 (src1
.x
, src2
.x
, MASK
);
79 calc_perm2i128 (src1
.a
, src2
.a
, MASK
, dst_ref
);
81 if (check_union256i_q (dst
, dst_ref
))