1/* { dg-do run } */ 2/* { dg-require-effective-target avx512f } */ 3/* { dg-options "-O2 -mavx512f" } */ 4 5#define SIZE (512 / 64) 6#include "avx512f-mask-type.h" 7#include <string.h> 8#include "avx512f-check.h" 9#include "avx512f-mask-type.h" 10#include "avx512f-helper.h" 11 12void static 13avx512f_test (void) 14{ 15 union512i_q s1, res, res2, res3; 16 union256i_q s2; 17 long long int res_ref[8]; 18 MASK_TYPE mask = MASK_VALUE; 19 int j; 20 21 for (j = 0; j < 8; j++) 22 { 23 s1.a[j] = j * j; 24 res2.a[j] = DEFAULT_VALUE; 25 } 26 27 for (j = 0; j < 4; j++) 28 s2.a[j] = j * j * j; 29 30 res.x = _mm512_inserti64x4 (s1.x, s2.x, 0); 31 res2.x = _mm512_mask_inserti64x4 (res2.x, mask, s1.x, s2.x, 0); 32 res3.x = _mm512_maskz_inserti64x4 (mask, s1.x, s2.x, 0); 33 34 memcpy (res_ref, s1.a, 64); 35 memcpy (res_ref, s2.a, 32); 36 37 if (check_union512i_q (res, res_ref)) 38 abort (); 39 40 MASK_MERGE (i_q) (res_ref, mask, SIZE); 41 if (check_union512i_q (res2, res_ref)) 42 abort (); 43 44 MASK_ZERO (i_q) (res_ref, mask, SIZE); 45 if (check_union512i_q (res3, res_ref)) 46 abort (); 47 48 res.x = _mm512_inserti64x4 (s1.x, s2.x, 1); 49 res2.x = _mm512_mask_inserti64x4 (res2.x, mask, s1.x, s2.x, 1); 50 res3.x = _mm512_maskz_inserti64x4 (mask, s1.x, s2.x, 1); 51 52 memcpy (res_ref, s1.a, 64); 53 memcpy (res_ref + 4, s2.a, 32); 54 55 if (check_union512i_q (res, res_ref)) 56 abort (); 57 58 MASK_MERGE (i_q) (res_ref, mask, SIZE); 59 if (check_union512i_q (res2, res_ref)) 60 abort (); 61 62 MASK_ZERO (i_q) (res_ref, mask, SIZE); 63 if (check_union512i_q (res3, res_ref)) 64 abort (); 65} 66