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 / 32) 10#include "avx512f-mask-type.h" 11#include "string.h" 12 13static void 14CALC (UNION_TYPE (AVX512F_LEN,) s1, float *res_ref, int mask) 15{ 16 memset (res_ref, 0, 16); 17 memcpy (res_ref, s1.a + mask * 4, 16); 18} 19 20void 21TEST (void) 22{ 23 UNION_TYPE (AVX512F_LEN,) s1; 24 union128 res1, res2, res3; 25 float res_ref[4]; 26 MASK_TYPE mask = MASK_VALUE; 27 int j; 28 29 for (j = 0; j < SIZE; j++) 30 { 31 s1.a[j] = j * j / 4.56; 32 } 33 34 for (j = 0; j < 4; j++) 35 { 36 res1.a[j] = DEFAULT_VALUE; 37 res2.a[j] = DEFAULT_VALUE; 38 res3.a[j] = DEFAULT_VALUE; 39 } 40 41 res1.x = INTRINSIC (_extractf32x4_ps) (s1.x, 1); 42 res2.x = INTRINSIC (_mask_extractf32x4_ps) (res2.x, mask, s1.x, 1); 43 res3.x = INTRINSIC (_maskz_extractf32x4_ps) (mask, s1.x, 1); 44 CALC (s1, res_ref, 1); 45 46 if (check_union128 (res1, res_ref)) 47 abort (); 48 49 MASK_MERGE ()(res_ref, mask, 4); 50 if (check_union128 (res2, res_ref)) 51 abort (); 52 53 MASK_ZERO ()(res_ref, mask, 4); 54 if (check_union128 (res3, res_ref)) 55 abort (); 56} 57