1 /* { dg-do run } */
2 /* { dg-options "-O2 -mavx512f" } */
3 /* { dg-require-effective-target avx512f } */
4 
5 #include "avx512f-check.h"
6 
7 void
avx512f_test()8 avx512f_test () {
9   volatile __mmask16 k1;
10   __mmask16 k2;
11   volatile short r = 0;
12   volatile unsigned char r1 = 0;
13   unsigned char r2;
14 
15   /* Test kortestc.  */
16   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
17   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (45) );
18 
19   r += _mm512_kortestc (k1, k2);
20 
21   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
22   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
23 
24   r += _mm512_kortestc (k1, k2);
25   if (r)
26     abort ();
27 
28   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (-1) );
29   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
30 
31   r += _mm512_kortestc (k1, k2);
32   if (!r)
33     abort ();
34 
35   r = 0;
36   /* Test kortestz.  */
37   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
38   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (45) );
39 
40   r += _mm512_kortestz (k1, k2);
41 
42   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (-1) );
43   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
44 
45   r += _mm512_kortestz (k1, k2);
46   if (r)
47     abort ();
48 
49   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
50   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
51 
52   r += _mm512_kortestz (k1, k2);
53   if (!r)
54     abort ();
55 
56   __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
57   __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (-1) );
58 
59   r1 = _kortest_mask16_u8 (k1, k2, &r2);
60   if (r1 != 0 || r2 != 1)
61     abort ();
62 }
63