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