1120586Sbms/* { dg-do run } */ 2120586Sbms/* { dg-options "-O2 -mavx512f" } */ 3120586Sbms/* { dg-require-effective-target avx512f } */ 4120586Sbms 5120586Sbms#define AVX512F 6120586Sbms 7120586Sbms#include "avx512f-helper.h" 8120586Sbms 9120586Sbms#define SIZE (AVX512F_LEN / 32) 10120586Sbms#include "avx512f-mask-type.h" 11120586Sbms 12120586Sbmsstatic void 13120586SbmsCALC (int *r, int *s1, int *s2) 14120586Sbms{ 15120586Sbms int i; 16120586Sbms for (i = 0; i < SIZE / 4; i++) 17120586Sbms { 18120586Sbms r[4 * i] = s1[4 * i + 2]; 19120586Sbms r[4 * i + 1] = s2[4 * i + 2]; 20120586Sbms r[4 * i + 2] = s1[4 * i + 3]; 21120586Sbms r[4 * i + 3] = s2[4 * i + 3]; 22120586Sbms } 23120586Sbms} 24120586Sbms 25120586Sbmsvoid 26120586SbmsTEST (void) 27120586Sbms{ 28120586Sbms int i, sign; 29131680Sru UNION_TYPE (AVX512F_LEN, i_d) res1, res2, res3, src1, src2; 30131681Sru MASK_TYPE mask = MASK_VALUE; 31120586Sbms int res_ref[SIZE]; 32120586Sbms 33120586Sbms sign = -1; 34120586Sbms for (i = 0; i < SIZE; i++) 35120586Sbms { 36120586Sbms src1.a[i] = 34 * i * sign; 37120586Sbms src1.a[i] = 179 * i; 38120586Sbms sign = sign * -1; 39120586Sbms } 40120586Sbms for (i = 0; i < SIZE; i++) 41120586Sbms res2.a[i] = DEFAULT_VALUE; 42120586Sbms 43120586Sbms res1.x = INTRINSIC (_unpackhi_epi32) (src1.x, src2.x); 44120586Sbms res2.x = 45120586Sbms INTRINSIC (_mask_unpackhi_epi32) (res2.x, mask, src1.x, src2.x); 46120586Sbms res3.x = INTRINSIC (_maskz_unpackhi_epi32) (mask, src1.x, src2.x); 47120586Sbms 48120586Sbms CALC (res_ref, src1.a, src2.a); 49120586Sbms 50120586Sbms if (UNION_CHECK (AVX512F_LEN, i_d) (res1, res_ref)) 51120586Sbms abort (); 52120586Sbms 53120586Sbms MASK_MERGE (i_d) (res_ref, mask, SIZE); 54120586Sbms if (UNION_CHECK (AVX512F_LEN, i_d) (res2, res_ref)) 55120586Sbms abort (); 56120586Sbms 57120586Sbms MASK_ZERO (i_d) (res_ref, mask, SIZE); 58147647Shmp if (UNION_CHECK (AVX512F_LEN, i_d) (res3, res_ref)) 59120586Sbms abort (); 60} 61