1/* { dg-do run } */ 2/* { dg-options "-O2 -mavx512f" } */ 3/* { dg-require-effective-target avx512f } */ 4 5#define AVX512F 6 7#include "avx512f-helper.h" 8 9#define SIZE (AVX512F_LEN / 64) 10#include "avx512f-mask-type.h" 11#include <limits.h> 12 13void 14CALC (short *r, long long *s, int mem) 15{ 16 int i; 17 int len = mem ? SIZE : 8; 18 for (i = 0; i < len; i++) 19 { 20 if (s[i] < SHRT_MIN) 21 r[i] = SHRT_MIN; 22 else if (s[i] > SHRT_MAX) 23 r[i] = SHRT_MAX; 24 else 25 r[i] = s[i]; 26 r[i] = (i < SIZE) ? r[i] : 0; 27 } 28} 29 30void 31TEST (void) 32{ 33 int i, sign; 34 UNION_TYPE (128, i_w) res1, res2, res3; 35 short res4[8]; 36 UNION_TYPE (AVX512F_LEN, i_q) src; 37 MASK_TYPE mask = MASK_VALUE; 38 short res_ref[8]; 39 short res_ref2[8]; 40 41 sign = -1; 42 for (i = 0; i < SIZE; i++) 43 { 44 src.a[i] = 1 + 34 * i * sign; 45 sign = sign * -1; 46 res2.a[i] = DEFAULT_VALUE; 47 res4[i] = DEFAULT_VALUE; 48 } 49 50 for (i = SIZE; i < 8; i++) 51 { 52 res_ref2[i] = DEFAULT_VALUE * 2; 53 res4[i] = DEFAULT_VALUE * 2; 54 } 55 56 res1.x = INTRINSIC (_cvtsepi64_epi16) (src.x); 57 res2.x = INTRINSIC (_mask_cvtsepi64_epi16) (res2.x, mask, src.x); 58 res3.x = INTRINSIC (_maskz_cvtsepi64_epi16) (mask, src.x); 59 60 CALC (res_ref, src.a, 0); 61 62 if (UNION_CHECK (128, i_w) (res1, res_ref)) 63 abort (); 64 65 MASK_MERGE (i_w) (res_ref, mask, SIZE); 66 if (UNION_CHECK (128, i_w) (res2, res_ref)) 67 abort (); 68 69 MASK_ZERO (i_w) (res_ref, mask, SIZE); 70 if (UNION_CHECK (128, i_w) (res3, res_ref)) 71 abort (); 72 73 INTRINSIC (_mask_cvtsepi64_storeu_epi16) (res4, mask, src.x); 74 CALC (res_ref2, src.a, 1); 75 76 MASK_MERGE (i_w) (res_ref2, mask, SIZE); 77 if (checkVs (res4, res_ref2, 8)) 78 abort (); 79} 80