Daily bump.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-klogic-2.c
blobec09e4c61820e7a37e45d394dfdc3c2a7d7a8038
1 /* { dg-do run } */
2 /* { dg-options "-mavx512f -O2" } */
3 /* { dg-require-effective-target avx512f } */
5 #include "avx512f-check.h"
7 void
8 avx512f_test (void)
10 __mmask16 dst, src1, src2, dst_ref;
11 volatile __m512 x = _mm512_setzero_ps();
13 __asm__( "kmovw %1, %0" : "=k" (src1) : "r" (0x0FFF) );
14 __asm__( "kmovw %1, %0" : "=k" (src2) : "r" (0x0F0F) );
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 ();
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 ();
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 ();
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 ();
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 ();
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 ();
52 dst = _mm512_kunpackb (src1, src2);
53 x = _mm512_mask_add_ps (x, dst, x, x);
54 dst_ref = ((src1 << 8) | src2) & 0xFFFF;
56 if (dst != dst_ref)
57 abort ();