1/* { dg-do run } */ 2/* { dg-options "-O2 -mavx512bw" } */ 3/* { dg-require-effective-target avx512bw } */ 4 5#define AVX512BW 6#include "avx512f-helper.h" 7 8#define SIZE (AVX512F_LEN / 16) 9#include "avx512f-mask-type.h" 10 11void 12CALC (MASK_TYPE *res, short *src1, short *src2) 13{ 14 int i; 15 *res = 0; 16 MASK_TYPE one = 1; 17 18 for (i = 0; i < SIZE; i++) 19 if (!(src1[i] & src2[i])) 20 *res = *res | one << i; 21} 22 23void 24TEST (void) 25{ 26 int i, sign = 1; 27 UNION_TYPE (AVX512F_LEN, i_w) src1, src2; 28 MASK_TYPE res_ref, res1, res2; 29 MASK_TYPE mask = MASK_VALUE; 30 31 for (i = 0; i < SIZE; i++) 32 { 33 src1.a[i] = i * i * sign; 34 src2.a[i] = i + 20; 35 sign = -sign; 36 } 37 38 res1 = INTRINSIC (_testn_epi16_mask) (src1.x, src2.x); 39 res2 = INTRINSIC (_mask_testn_epi16_mask) (mask, src1.x, src2.x); 40 41 CALC (&res_ref, src1.a, src2.a); 42 43 if (res1 != res_ref) 44 abort (); 45 46 res_ref &= mask; 47 48 if (res2 != res_ref) 49 abort (); 50} 51