(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-vpmovsdw-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 / 32)
      10  #include "avx512f-mask-type.h"
      11  #define SIZE_HALF (AVX512F_LEN_HALF / 16)
      12  #include <limits.h>
      13  
      14  void
      15  CALC (short *r, int *s, int mem)
      16  {
      17    int i;
      18    int len = mem ? SIZE : SIZE_HALF;
      19    for (i = 0; i < len; i++)
      20      {
      21        if (i < SIZE)
      22  	{
      23  	  if (s[i] < SHRT_MIN)
      24  	    r[i] = SHRT_MIN;
      25  	  else if (s[i] > SHRT_MAX)
      26  	    r[i] = SHRT_MAX;
      27  	  else
      28  	    r[i] = s[i];
      29  	}
      30        else
      31  	r[i] = 0;
      32      }
      33  }
      34  
      35  void
      36  TEST (void)
      37  {
      38    int i, sign;
      39    UNION_TYPE (AVX512F_LEN_HALF, i_w) res1, res2, res3;
      40    short res4[SIZE_HALF];
      41    UNION_TYPE (AVX512F_LEN, i_d) src;
      42    MASK_TYPE mask = MASK_VALUE;
      43    short res_ref[SIZE_HALF];
      44    short res_ref2[SIZE_HALF];
      45  
      46    sign = -1;
      47    for (i = 0; i < SIZE; i++)
      48      {
      49        src.a[i] = 1 + 34 * i * sign;
      50        sign = sign * -1;
      51        res2.a[i] = DEFAULT_VALUE;
      52        res4[i] = DEFAULT_VALUE;
      53      }
      54  
      55    for (i = SIZE; i < SIZE_HALF; i++)
      56      {
      57        res_ref2[i] = DEFAULT_VALUE * 2;
      58        res4[i] = DEFAULT_VALUE * 2;
      59      }
      60  
      61    res1.x = INTRINSIC (_cvtsepi32_epi16) (src.x);
      62    res2.x = INTRINSIC (_mask_cvtsepi32_epi16) (res2.x, mask, src.x);
      63    res3.x = INTRINSIC (_maskz_cvtsepi32_epi16) (mask, src.x);
      64  
      65    CALC (res_ref, src.a, 0);
      66  
      67    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res1, res_ref))
      68      abort ();
      69  
      70    MASK_MERGE (i_w) (res_ref, mask, SIZE);
      71    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res2, res_ref))
      72      abort ();
      73  
      74    MASK_ZERO (i_w) (res_ref, mask, SIZE);
      75    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res3, res_ref))
      76      abort ();
      77  
      78    INTRINSIC (_mask_cvtsepi32_storeu_epi16) (res4, mask, src.x);
      79    CALC (res_ref2, src.a, 1);
      80  
      81    MASK_MERGE (i_w) (res_ref2, mask, SIZE);
      82    if (checkVs (res4, res_ref2, SIZE_HALF))
      83      abort ();
      84  }