(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vlfp16-11b.c
       1  /* { dg-do run { target avx512fp16 } } */
       2  /* { dg-options "-O2 -mavx512fp16 -mavx512vl" } */
       3  
       4  #include <string.h>
       5  #include <stdlib.h>
       6  static void do_test (void);
       7  
       8  #define DO_TEST do_test
       9  #define AVX512FP16
      10  #include "avx512-check.h"
      11  #include "avx512vlfp16-11a.c"
      12  
      13  /* Get random float16 between -50.x to 50.x.  */
      14  _Float16
      15  get_float16_noround()
      16  {
      17    return ((int) (100.0 * rand ()/ (RAND_MAX + 1.0)) - 50)
      18      + 0.1f * (int) (10 * rand() / (RAND_MAX + 1.0));
      19  }
      20  
      21  static void
      22  do_test (void)
      23  {
      24    _Float16 x[16];
      25    _Float16 y[16];
      26    _Float16 res_add[16];
      27    _Float16 res_sub[16];
      28    _Float16 res_mul[16];
      29    _Float16 res_div[16];
      30    for (int i = 0 ; i != 16; i++)
      31      {
      32        x[i] = get_float16_noround ();
      33        y[i] = get_float16_noround ();
      34        if (y[i] == 0)
      35  	y[i] = 1.0f;
      36        res_add[i] = x[i] + y[i];
      37        res_sub[i] = x[i] - y[i];
      38        res_mul[i] = x[i] * y[i];
      39        res_div[i] = x[i] / y[i];
      40  
      41      }
      42  
      43    union128h u128 = { x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7] };
      44    union128h u128_1 = { y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7] };
      45    union256h u256 = { x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7],
      46        x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15] };
      47    union256h u256_1 = { y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7],
      48        y[8], y[9], y[10], y[11], y[12], y[13], y[14], y[15]};
      49  
      50    __m128h v128;
      51    __m256h v256;
      52    union128h a128;
      53    union256h a256;
      54  
      55    memset (&v128, -1, sizeof (v128));
      56    v128 = vadd128 (u128.x, u128_1.x);
      57    a128.x = v128;
      58    if (check_union128h (a128, res_add))
      59      abort ();
      60    memset (&v128, -1, sizeof (v128));
      61    v128 = vsub128 (u128.x, u128_1.x);
      62    a128.x = v128;
      63    if (check_union128h (a128, res_sub))
      64      abort ();
      65    memset (&v128, -1, sizeof (v128));
      66    v128 = vmul128 (u128.x, u128_1.x);
      67    a128.x = v128;
      68    if (check_union128h (a128, res_mul))
      69      abort ();
      70    memset (&v128, -1, sizeof (v128));
      71    v128 = vdiv128 (u128.x, u128_1.x);
      72    a128.x = v128;
      73    if (check_union128h (a128, res_div))
      74      abort ();
      75  
      76    memset (&v256, -1, sizeof (v256));
      77    v256 = vadd256 (u256.x, u256_1.x);
      78    a256.x = v256;
      79    if (check_union256h (a256, res_add))
      80      abort ();
      81    memset (&v256, -1, sizeof (v256));
      82    v256 = vsub256 (u256.x, u256_1.x);
      83    a256.x = v256;
      84    if (check_union256h (a256, res_sub))
      85      abort ();
      86    memset (&v256, -1, sizeof (v256));
      87    v256 = vmul256 (u256.x, u256_1.x);
      88    a256.x = v256;
      89    if (check_union256h (a256, res_mul))
      90      abort ();
      91    memset (&v256, -1, sizeof (v256));
      92    v256 = vdiv256 (u256.x, u256_1.x);
      93    a256.x = v256;
      94    if (check_union256h (a256, res_div))
      95      abort ();
      96  }