1 /* { dg-do run } */
2 /* { dg-options "-mavx512f -O2" } */
3 /* { dg-require-effective-target avx512f } */
4 
5 #include "avx512f-check.h"
6 
7 void
avx512f_test(void)8 avx512f_test (void)
9 {
10   __mmask16 dst, src1, src2, dst_ref;
11   volatile __m512 x = _mm512_setzero_ps();
12 
13   __asm__( "kmovw %1, %0" : "=k" (src1) : "r" (0x0FFF) );
14   __asm__( "kmovw %1, %0" : "=k" (src2) : "r" (0x0F0F) );
15 
16   dst = _mm512_kand (src1, src2);
17   x = _mm512_mask_add_ps (x, dst, x, x);
18   dst_ref = src1 & src2;
19   if (dst != dst_ref)
20     abort ();
21 
22   dst = _mm512_kandn (src1, src2);
23   x = _mm512_mask_add_ps (x, dst, x, x);
24   dst_ref = ~src1 & src2;
25   if (dst != dst_ref)
26     abort ();
27 
28   dst = _mm512_kor (src1, src2);
29   x = _mm512_mask_add_ps (x, dst, x, x);
30   dst_ref = src1 | src2;
31   if (dst != dst_ref)
32     abort ();
33 
34   dst = _mm512_kxnor (src1, src2);
35   x = _mm512_mask_add_ps (x, dst, x, x);
36   dst_ref = ~(src1 ^ src2);
37   if (dst != dst_ref)
38     abort ();
39 
40   dst = _mm512_kxor (src1, src2);
41   x = _mm512_mask_add_ps (x, dst, x, x);
42   dst_ref = src1 ^ src2;
43   if (dst != dst_ref)
44     abort ();
45 
46   dst = _mm512_knot (src1);
47   x = _mm512_mask_add_ps (x, dst, x, x);
48   dst_ref = ~src1;
49   if (dst != dst_ref)
50     abort ();
51 
52   dst = _mm512_kunpackb (src1, src2);
53   x = _mm512_mask_add_ps (x, dst, x, x);
54   dst_ref = ((src1 << 8) | src2) & 0xFFFF;
55 
56   if (dst != dst_ref)
57     abort ();
58 }
59