(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-vcvtps2ph-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  
      12  void
      13  TEST (void)
      14  {
      15    UNION_TYPE (AVX512F_LEN,) val;
      16    UNION_TYPE (AVX512F_LEN_HALF, i_w) res1,res2,res3;
      17    MASK_TYPE mask = MASK_VALUE;
      18  #if AVX512F_LEN == 128
      19    short exp[SIZE * 2];
      20  #else
      21    short exp[SIZE];
      22  #endif
      23    int i;
      24  
      25    for (i = 0; i < SIZE; i++)
      26      {
      27        res1.a[i] = DEFAULT_VALUE;
      28        res2.a[i] = DEFAULT_VALUE;
      29        res3.a[i] = DEFAULT_VALUE;
      30      }
      31  
      32    val.a[0] = 1;
      33    val.a[1] = 2;
      34    val.a[2] = 4;
      35    val.a[3] = 8;
      36  #if AVX512F_LEN > 128
      37    val.a[4] = -1;
      38    val.a[5] = -2;
      39    val.a[6] = -4;
      40    val.a[7] = -8;
      41  #endif
      42  #if AVX512F_LEN > 256
      43    val.a[8] = 1;
      44    val.a[9] = 2;
      45    val.a[10] = 4;
      46    val.a[11] = 8;
      47    val.a[12] = -1;
      48    val.a[13] = -2;
      49    val.a[14] = -4;
      50    val.a[15] = -8;
      51  #endif
      52  
      53    exp[0] = 0x3c00;
      54    exp[1] = 0x4000;
      55    exp[2] = 0x4400;
      56    exp[3] = 0x4800;
      57  #if AVX512F_LEN > 128
      58    exp[4] = 0xbc00;
      59    exp[5] = 0xc000;
      60    exp[6] = 0xc400;
      61    exp[7] = 0xc800;
      62  #else
      63    exp[4] = 0;
      64    exp[5] = 0;
      65    exp[6] = 0;
      66    exp[7] = 0;
      67  #endif
      68  #if AVX512F_LEN > 256
      69    exp[8] = 0x3c00;
      70    exp[9] = 0x4000;
      71    exp[10] = 0x4400;
      72    exp[11] = 0x4800;
      73    exp[12] = 0xbc00;
      74    exp[13] = 0xc000;
      75    exp[14] = 0xc400;
      76    exp[15] = 0xc800;
      77  #endif
      78  
      79    res1.x = INTRINSIC (_cvtps_ph (val.x, 0));
      80    res2.x = INTRINSIC (_mask_cvtps_ph (res2.x, mask, val.x, 0));
      81    res3.x = INTRINSIC (_maskz_cvtps_ph (mask, val.x, 0));
      82  
      83    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res1, exp))
      84      abort ();
      85  
      86    MASK_MERGE (i_w) (exp, mask, SIZE);
      87    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res2, exp))
      88      abort ();
      89  
      90    MASK_ZERO (i_w) (exp, mask, SIZE);
      91    if (UNION_CHECK (AVX512F_LEN_HALF, i_w) (res3, exp))
      92      abort ();
      93  }