1  /* { dg-do compile } */
       2  /* { dg-options "-Ofast -mavx512vl -mavx512fp16 -mprefer-vector-width=512" } */
       3  
       4  #include<immintrin.h>
       5  __m128h
       6  f1 (__m128h x)
       7  {
       8    int i = 0;
       9    __m128h y;
      10    for (; i != 8; i++)
      11      y[i] = __builtin_fabsf16 (x[i]);
      12    return y;
      13  }
      14  
      15  __m256h
      16  f2 (__m256h x)
      17  {
      18    int i = 0;
      19    __m256h y;
      20    for (; i != 16; i++)
      21      y[i] = __builtin_fabsf16 (x[i]);
      22    return y;
      23  }
      24  
      25  __m512h
      26  f3 (__m512h x)
      27  {
      28    int i = 0;
      29    __m512h y;
      30    for (; i != 32; i++)
      31      y[i] = __builtin_fabsf16 (x[i]);
      32    return y;
      33  }
      34  
      35  __m128h
      36  f4 (__m128h x)
      37  {
      38    return -x;
      39  }
      40  
      41  __m256h
      42  f5 (__m256h x)
      43  {
      44    return -x;
      45  }
      46  
      47  __m512h
      48  f6 (__m512h x)
      49  {
      50    return -x;
      51  }
      52  
      53  __m128h
      54  f7 (__m128h x, __m128h y)
      55  {
      56    int i = 0;
      57    __m128h z;
      58    for (; i != 8; i++)
      59      z[i] = __builtin_copysignf16 (x[i], y[i]);
      60    return z;
      61  }
      62  
      63  __m256h
      64  f8 (__m256h x, __m256h y)
      65  {
      66    int i = 0;
      67    __m256h z;
      68    for (; i != 16; i++)
      69      z[i] = __builtin_copysignf16 (x[i], y[i]);
      70    return z;
      71  }
      72  
      73  __m512h
      74  f9 (__m512h x, __m512h y)
      75  {
      76    int i = 0;
      77    __m512h z;
      78    for (; i != 32; i++)
      79      z[i] = __builtin_copysignf16 (x[i], y[i]);
      80    return z;
      81  }
      82  
      83  __m128h
      84  f10 (__m128h x, __m128h y)
      85  {
      86    int i = 0;
      87    __m128h z;
      88    for (; i != 8; i++)
      89      z[i] = x[i] * __builtin_copysignf16 (1, y[i]);
      90    return z;
      91  }
      92  
      93  __m256h
      94  f11 (__m256h x, __m256h y)
      95  {
      96    int i = 0;
      97    __m256h z;
      98    for (; i != 16; i++)
      99      z[i] = x[i] * __builtin_copysignf16 (1, y[i]);
     100    return z;
     101  }
     102  
     103  __m512h
     104  f12 (__m512h x, __m512h y)
     105  {
     106    int i = 0;
     107    __m512h z;
     108    for (; i != 32; i++)
     109      z[i] = x[i] * __builtin_copysignf16 (1, y[i]);
     110    return z;
     111  }
     112  
     113  /* { dg-final { scan-assembler "vandps\[^\n\r\]*xmm0" } } */
     114  /* { dg-final { scan-assembler "vandps\[^\n\r\]*ymm0" } } */
     115  /* { dg-final { scan-assembler "vpandd\[^\n\r\]*zmm0" } } */
     116  /* { dg-final { scan-assembler-times "vxorps\[^\n\r\]*xmm0" 1 } } */
     117  /* { dg-final { scan-assembler-times "vxorps\[^\n\r\]*ymm0" 1 } } */
     118  /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*zmm0" 1 } } */
     119  /* { dg-final { scan-assembler-times "vpternlogd\[^\n\r\]*xmm\[0-9\]" 2 } } */
     120  /* { dg-final { scan-assembler-times "vpternlogd\[^\n\r\]*ymm\[0-9\]" 2 } } */
     121  /* { dg-final { scan-assembler-times "vpternlogd\[^\n\r\]*zmm\[0-9\]" 2 } } */