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