2 /* { dg-options "-mavx512f -O2" } */
3 /* { dg-require-effective-target avx512f } */
5 #include "avx512f-check.h"
8 init_vpadd_mask (int* dst
, int *src1
, int *src2
, int seed
)
12 for (i
= 0; i
< 16; i
++)
15 src1
[i
] = seed
* 2 * i
+ 1;
16 src2
[i
] = seed
* 2 * i
;
21 calc_vpadd_mask_zeroed (int *dst
, __mmask16 m
, int *src1
, int *src2
)
25 for (i
= 0; i
< 16; i
++)
28 dst
[i
] = src1
[i
] + src2
[i
];
37 /* Checking mask arithmetic instruction */
39 __mmask16 msk_dst
, msk_src1
, msk_src2
, msk_dst_ref
;
44 asm ("kandw\t%2, %1, %0"
46 : "k" (msk_src1
), "k" (msk_src2
));
48 msk_dst_ref
= _mm512_kand (msk_src1
, msk_src2
);
49 if (msk_dst
!= msk_dst_ref
)
53 /* Checking zero-masked vector instruction */
54 union512i_d dst
, src1
, src2
;
57 init_vpadd_mask (dst
.a
, src1
.a
, src2
.a
, 1);
58 init_vpadd_mask (dst_ref
, src1
.a
, src2
.a
, 1);
60 asm ("vpaddd\t%2, %1, %0 %{%3%}%{z%}"
62 : "x" (src1
.x
), "x" (src2
.x
), "Yk" (msk_dst
));
64 calc_vpadd_mask_zeroed (dst_ref
, msk_dst
, src1
.a
, src2
.a
);
66 if (check_union512i_d (dst
, dst_ref
))