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