1  /* PR target/87767 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O1 -mavx512fp16 -mavx512dq -mavx512vl" } */
       4  /* { dg-require-effective-target avx512dq } */
       5  /* { dg-require-effective-target avx512vl } */
       6  /* { dg-require-effective-target avx512fp16 } */
       7  
       8  #define AVX512DQ
       9  #define AVX512VL
      10  #define AVX512FP16
      11  #include "avx512f-helper.h"
      12  
      13  #include "avx512fp16-broadcast-1.c"
      14  
      15  #define RTEST(VTYPE, TYPE, N, OP_NAME, OP)             \
      16    do                                                   \
      17      {                                                  \
      18        TYPE exp[N], src[N];                             \
      19        VTYPE res;                                       \
      20        for (int i = 0; i < N; i++)                      \
      21         src[i] = 2.0 * i - 8.4;                         \
      22        res = foo_##OP_NAME##_##VTYPE (*(VTYPE*)&src[0]);        \
      23        for (int i = 0; i < N; i ++)                     \
      24         exp[i] = src[i] OP CONSTANT;                    \
      25        for (int j = 0; j < N; j++)                      \
      26         {                                               \
      27           if (res[j] != exp[j])                         \
      28             abort();                                    \
      29         }                                               \
      30      }                                                  \
      31    while (0)
      32  
      33  void
      34  test_256 (void)
      35  {
      36    RTEST (v8hf, _Float16, 8, add, +);
      37    RTEST (v16hf, _Float16, 16, add, +);
      38    RTEST (v32hf, _Float16, 32, add, +);
      39    RTEST (v8hf, _Float16, 8, sub, -);
      40    RTEST (v16hf, _Float16, 16, sub, -);
      41    RTEST (v32hf, _Float16, 32, sub, -);
      42    RTEST (v8hf, _Float16, 8, mul, *);
      43    RTEST (v16hf, _Float16, 16, mul, *);
      44    RTEST (v32hf, _Float16, 32, mul, *);
      45    RTEST (v8hf, _Float16, 8, div, /);
      46    RTEST (v16hf, _Float16, 16, div, /);
      47    RTEST (v32hf, _Float16, 32, div, /);
      48  }
      49  
      50  void
      51  test_128 (void)
      52  {
      53  }