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  
      12  void static
      13  avx512f_test (void)
      14  {
      15    union512d s1, res, res2, res3;
      16    union256d s2;
      17    double 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 + 1.6;
      24        res2.a[j] = DEFAULT_VALUE;
      25      }
      26  
      27    for (j = 0; j < 4; j++)
      28      s2.a[j] = j * j * j / 2.7;
      29  
      30    res.x = _mm512_insertf64x4 (s1.x, s2.x, 0);
      31    res2.x = _mm512_mask_insertf64x4 (res2.x, mask, s1.x, s2.x, 0);
      32    res3.x = _mm512_maskz_insertf64x4 (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_union512d (res, res_ref))
      38      abort ();
      39  
      40    MASK_MERGE (d) (res_ref, mask, SIZE);
      41    if (check_union512d (res2, res_ref))
      42      abort ();
      43  
      44    MASK_ZERO (d) (res_ref, mask, SIZE);
      45    if (check_union512d (res3, res_ref))
      46      abort ();
      47  
      48    res.x = _mm512_insertf64x4 (s1.x, s2.x, 1);
      49    res2.x = _mm512_mask_insertf64x4 (res2.x, mask, s1.x, s2.x, 1);
      50    res3.x = _mm512_maskz_insertf64x4 (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_union512d (res, res_ref))
      56      abort ();
      57  
      58    MASK_MERGE (d) (res_ref, mask, SIZE);
      59    if (check_union512d (res2, res_ref))
      60      abort ();
      61  
      62    MASK_ZERO (d) (res_ref, mask, SIZE);
      63    if (check_union512d (res3, res_ref))
      64      abort ();
      65  }