2 /* { dg-options "-O2 -mavx512f -mvpclmulqdq" } */
3 /* { dg-require-effective-target avx512f } */
4 /* { dg-require-effective-target vpclmulqdq } */
9 #include "avx512f-helper.h"
11 #define SIZE (AVX512F_LEN / 64)
13 #include "avx512f-mask-type.h"
16 CALC (unsigned long long *r
, unsigned long long *s1
, unsigned long long *s2
, unsigned char imm
)
18 for (int len
= 0; len
< SIZE
/2; len
++)
20 unsigned long long src1
, src2
;
21 src1
= (imm
& 1) ? s1
[len
*2 + 1] : s1
[len
*2];
22 src2
= ((imm
>> 4) & 1) ? s2
[len
*2 + 1] : s2
[len
*2];
23 for (int i
= 0; i
< 64; i
++)
28 r
[len
*2 + 1] ^= src2
>> (64 - i
);
29 r
[len
*2] ^= src2
<< i
;
39 UNION_TYPE (AVX512F_LEN
, i_q
) res
, src1
, src2
;
40 unsigned long long res_ref
[SIZE
];
41 unsigned char imm
= 1;
43 for (i
= 0; i
< SIZE
; i
++)
45 src1
.a
[i
] = 0xFFFFFFFFF + i
;
46 src2
.a
[i
] = 0xFFFFFFFFF + i
*i
;
49 for (i
= 0; i
< SIZE
; i
++)
55 CALC (res_ref
, src1
.a
, src2
.a
, imm
);
56 res
.x
= INTRINSIC (_clmulepi64_epi128
) (src1
.x
, src2
.x
, imm
);
58 if (UNION_CHECK (AVX512F_LEN
, i_q
) (res
, res_ref
))