(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512fp16-5.c
       1  /* { dg-do run { target avx512fp16 } } */
       2  /* { dg-options "-O2 -mavx512fp16" } */
       3  
       4  #include <string.h>
       5  
       6  static void do_test (void);
       7  
       8  #define DO_TEST do_test
       9  #define AVX512FP16
      10  #include "avx512-check.h"
      11  
      12  __m128h
      13  __attribute__ ((noinline, noclone))
      14  foo1 (_Float16 x)
      15  {
      16    return __extension__ (__m128h)(__v8hf) { x, 0.0f, 0.0f, 0.0f,
      17                                             1.0f, 0.0f, 0.0f, 0.0f };
      18  }
      19  
      20  __m128h
      21  __attribute__ ((noinline, noclone))
      22  foo2 (_Float16 x, _Float16 y)
      23  {
      24    return __extension__ (__m128h)(__v8hf) { x, 0.0f, 0.0f, y,
      25                                             3.0f, 0.0f, 0.0f, 0.0f };
      26  }
      27  
      28  __m256h
      29  __attribute__ ((noinline, noclone))
      30  foo3 (_Float16 x)
      31  {
      32    return __extension__ (__m256h)(__v16hf) { x, 0.0f, 0.0f, 0.0f,
      33                                              0.0f, 0.0f, 0.0f, 0.0f,
      34                                              1.0f, 0.0f, 0.0f, 0.0f,
      35                                              0.0f, 0.0f, 0.0f, 0.0f };
      36  }
      37  
      38  __m256h
      39  __attribute__ ((noinline, noclone))
      40  foo4 (_Float16 x, _Float16 y)
      41  {
      42    return __extension__ (__m256h)(__v16hf) { x, 0.0f, 0.0f, 0.0f,
      43                                              0.0f, 0.0f, 0.0f, y,
      44                                              3.0f, 0.0f, 0.0f, 0.0f,
      45                                              0.0f, 0.0f, 0.0f, 0.0f };
      46  }
      47  
      48  __m512h
      49  __attribute__ ((noinline, noclone))
      50  foo5 (_Float16 x)
      51  {
      52    return __extension__ (__m512h)(__v32hf) { x, 0.0f, 0.0f, 0.0f,
      53                                              0.0f, 0.0f, 0.0f, 0.0f,
      54                                              0.0f, 0.0f, 0.0f, 0.0f,
      55                                              0.0f, 0.0f, 0.0f, 0.0f,
      56                                              1.0f, 0.0f, 0.0f, 0.0f,
      57                                              0.0f, 0.0f, 0.0f, 0.0f,
      58                                              0.0f, 0.0f, 0.0f, 0.0f,
      59                                              0.0f, 0.0f, 0.0f, 0.0f };
      60  }
      61  
      62  __m512h
      63  __attribute__ ((noinline, noclone))
      64  foo6 (_Float16 x, _Float16 y)
      65  {
      66    return __extension__ (__m512h)(__v32hf) { x, 0.0f, 0.0f, 0.0f,
      67                                              0.0f, 0.0f, 0.0f, 0.0f,
      68                                              0.0f, 0.0f, 0.0f, 0.0f,
      69                                              0.0f, 0.0f, 0.0f, y,
      70                                              3.0f, 0.0f, 0.0f, 0.0f,
      71                                              0.0f, 0.0f, 0.0f, 0.0f,
      72                                              0.0f, 0.0f, 0.0f, 0.0f,
      73                                              0.0f, 0.0f, 0.0f, 0.0f };
      74  }
      75  
      76  static void
      77  do_test (void)
      78  {
      79    _Float16 x = 25.3;
      80    _Float16 y = -35.7;
      81    union128h u128 = { x, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f };
      82    union256h u256 = { x, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
      83  		     1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
      84    union512h u512 = { x, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
      85  		     0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
      86  		     1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
      87  		     0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
      88    __m128h v128;
      89    __m256h v256;
      90    __m512h v512;
      91    union128h a128;
      92    union256h a256;
      93    union512h a512;
      94  
      95    memset (&v128, -1, sizeof (v128));
      96    v128 = foo1 (x);
      97    a128.x = v128;
      98    if (check_union128h (a128, u128.a))
      99      abort ();
     100    memset (&v128, -1, sizeof (v128));
     101    u128.a[3] = y;
     102    u128.a[4] = 3.0f;
     103    v128 = foo2 (x, y);
     104    a128.x = v128;
     105    if (check_union128h (a128, u128.a))
     106      abort ();
     107  
     108    memset (&v256, -1, sizeof (v256));
     109    v256 = foo3 (x);
     110    a256.x = v256;
     111    if (check_union256h (a256, u256.a))
     112      abort ();
     113    memset (&v256, -1, sizeof (v256));
     114    u256.a[7] = y;
     115    u256.a[8] = 3.0f;
     116    v256 = foo4 (x, y);
     117    a256.x = v256;
     118    if (check_union256h (a256, u256.a))
     119      abort ();
     120  
     121    memset (&v512, -1, sizeof (v512));
     122    v512 = foo5 (x);
     123    a512.x = v512;
     124    if (check_union512h (a512, u512.a))
     125      abort ();
     126    memset (&v512, -1, sizeof (v512));
     127    u512.a[15] = y;
     128    u512.a[16] = 3.0f;
     129    v512 = foo6 (x, y);
     130    a512.x = v512;
     131    if (check_union512h (a512, u512.a))
     132      abort ();
     133  }