(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr102327-2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx512vl -mavx512fp16" } */
       3  /* { dg-require-effective-target avx512vl } */
       4  /* { dg-require-effective-target avx512fp16 } */
       5  
       6  #define AVX512VL
       7  #define AVX512FP16
       8  
       9  #ifndef CHECK
      10  #define CHECK "avx512f-helper.h"
      11  #endif
      12  
      13  #include CHECK
      14  #include "pr102327-1.c"
      15  
      16  #define RUNCHECK_VEC_EXTRACT(U,V,S,IDX)		\
      17    do						\
      18      {						\
      19        S tmp = vec_extract_##V##_##IDX ((V)U.x);	\
      20        if (tmp != U.a[IDX])			\
      21  	abort();				\
      22      }						\
      23    while (0)
      24  
      25  #define RUNCHECK_VEC_SET(UTYPE,U,V,S,IDX,NUM)		\
      26    do							\
      27      {							\
      28        S tmp = 3.0f;					\
      29        UTYPE res;					\
      30        res.x = vec_set_##V##_##IDX ((V)U.x, tmp);	\
      31        for (int i = 0; i != NUM; i++)			\
      32  	if (i == IDX)					\
      33  	  {						\
      34  	    if (res.a[i] != tmp)			\
      35  	      abort ();					\
      36  	  }						\
      37  	else if (res.a[i] != U.a[i])			\
      38  	  abort();					\
      39      }							\
      40    while (0)
      41  
      42  void
      43  test_256 (void)
      44  {
      45    union512h g1;
      46    union256h t1;
      47    union128h x1;
      48    int sign = 1;
      49  
      50    int i = 0;
      51    for (i = 0; i < 32; i++)
      52      {
      53        g1.a[i] = 56.78 * (i - 30) * sign;
      54        sign = -sign;
      55      }
      56  
      57    for (i = 0; i != 16; i++)
      58      {
      59        t1.a[i] = 90.12 * (i + 40) * sign;
      60        sign = -sign;
      61      }
      62  
      63    for (i = 0; i != 8; i++)
      64      {
      65        x1.a[i] = 90.12 * (i + 40) * sign;
      66        sign = -sign;
      67      }
      68  
      69    RUNCHECK_VEC_EXTRACT (x1, v8hf, _Float16, 4);
      70    RUNCHECK_VEC_EXTRACT (t1, v16hf, _Float16, 3);
      71    RUNCHECK_VEC_EXTRACT (t1, v16hf, _Float16, 8);
      72    RUNCHECK_VEC_EXTRACT (t1, v16hf, _Float16, 15);
      73    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 5);
      74    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 8);
      75    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 14);
      76    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 16);
      77    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 24);
      78    RUNCHECK_VEC_EXTRACT (g1, v32hf, _Float16, 28);
      79  
      80    RUNCHECK_VEC_SET (union128h, x1, v8hf, _Float16, 4, 8);
      81    RUNCHECK_VEC_SET (union256h, t1, v16hf, _Float16, 3, 16);
      82    RUNCHECK_VEC_SET (union256h, t1, v16hf, _Float16, 8, 16);
      83    RUNCHECK_VEC_SET (union256h, t1, v16hf, _Float16, 15, 16);
      84    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 5, 32);
      85    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 8, 32);
      86    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 14, 32);
      87    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 16, 32);
      88    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 24, 32);
      89    RUNCHECK_VEC_SET (union512h, g1, v32hf, _Float16, 28, 32);
      90  }
      91  
      92  void
      93  test_128()
      94  {
      95  }