1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-Ofast -mavx512vl -mno-avx512dq" } */
       3  
       4  void
       5  f1 (float x)
       6  {
       7    register float a __asm ("xmm16");
       8    a = x;
       9    asm volatile ("" : "+v" (a));
      10    a = __builtin_fabsf (a);
      11    asm volatile ("" : "+v" (a));
      12  }
      13  
      14  void
      15  f2 (float x, float y)
      16  {
      17    register float a __asm ("xmm16"), b __asm ("xmm17");
      18    a = x;
      19    b = y;
      20    asm volatile ("" : "+v" (a), "+v" (b));
      21    a = __builtin_copysignf (a, b);
      22    asm volatile ("" : "+v" (a));
      23  }
      24  
      25  void
      26  f3 (float x)
      27  {
      28    register float a __asm ("xmm16");
      29    a = x;
      30    asm volatile ("" : "+v" (a));
      31    a = -a;
      32    asm volatile ("" : "+v" (a));
      33  }
      34  
      35  void
      36  f4 (double x)
      37  {
      38    register double a __asm ("xmm18");
      39    a = x;
      40    asm volatile ("" : "+v" (a));
      41    a = __builtin_fabs (a);
      42    asm volatile ("" : "+v" (a));
      43  }
      44  
      45  void
      46  f5 (double x, double y)
      47  {
      48    register double a __asm ("xmm18"), b __asm ("xmm19");
      49    a = x;
      50    b = y;
      51    asm volatile ("" : "+v" (a), "+v" (b));
      52    a = __builtin_copysign (a, b);
      53    asm volatile ("" : "+v" (a));
      54  }
      55  
      56  void
      57  f6 (double x)
      58  {
      59    register double a __asm ("xmm18");
      60    a = x;
      61    asm volatile ("" : "+v" (a));
      62    a = -a;
      63    asm volatile ("" : "+v" (a));
      64  }
      65  
      66  /* { dg-final { scan-assembler "vpandd\[^\n\r\]*xmm16" } } */
      67  /* { dg-final { scan-assembler "vpternlogd\[^\n\r\]*xmm16" } } */
      68  /* { dg-final { scan-assembler "vpxord\[^\n\r\]*xmm16" } } */
      69  /* { dg-final { scan-assembler "vpandq\[^\n\r\]*xmm18" } } */
      70  /* { dg-final { scan-assembler "vpternlogq\[^\n\r\]*xmm18" } } */
      71  /* { dg-final { scan-assembler "vpxorq\[^\n\r\]*xmm18" } } */