1/* { dg-do run } */ 2/* { dg-options "-mavx512f -O2" } */ 3/* { dg-require-effective-target avx512f } */ 4 5#include "avx512f-check.h" 6 7void 8avx512f_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 = ((src2 << 8) | src1) & 0xFFFF; 55 56 if (dst != dst_ref) 57 abort (); 58} 59