(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-vpermilpdi-2.c
       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 / 64)
      10  #include "avx512f-mask-type.h"
      11  
      12  #if AVX512F_LEN > 256
      13    #define CTRL 129
      14  #elif AVX512F_LEN > 128
      15    #define CTRL 5
      16  #else
      17    #define CTRL 1
      18  #endif
      19  
      20  static void
      21  CALC (double *s1, int s2, double *r)
      22  {
      23    int i;
      24  
      25    for (i = 0; i < SIZE; i++)
      26      {
      27        r[i] = (s2 & (1 << i)) ? s1[1 + 2 * (i / 2)] : s1[2 * (i / 2)];
      28      }
      29  }
      30  
      31  void
      32  TEST (void)
      33  {
      34    UNION_TYPE (AVX512F_LEN, d) s1, res1, res2, res3;
      35    MASK_TYPE mask = MASK_VALUE;
      36    double res_ref[SIZE];
      37    int i;
      38  
      39    for (i = 0; i < SIZE; i++)
      40      {
      41        s1.a[i] = i + 10.;
      42        res2.a[i] = DEFAULT_VALUE;
      43      }
      44  
      45    res1.x = INTRINSIC (_permute_pd) (s1.x, CTRL);
      46    res2.x = INTRINSIC (_mask_permute_pd) (res2.x, mask, s1.x, CTRL);
      47    res3.x = INTRINSIC (_maskz_permute_pd) (mask, s1.x, CTRL);
      48  
      49    CALC (s1.a, CTRL, res_ref);
      50  
      51    if (UNION_CHECK (AVX512F_LEN, d) (res1, res_ref))
      52      abort ();
      53  
      54    MASK_MERGE (d) (res_ref, mask, SIZE);
      55    if (UNION_CHECK (AVX512F_LEN, d) (res2, res_ref))
      56      abort ();
      57  
      58    MASK_ZERO (d) (res_ref, mask, SIZE);
      59    if (UNION_CHECK (AVX512F_LEN, d) (res3, res_ref))
      60      abort ();
      61  }
      62  
      63  #undef CTRL