1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-Ofast -mavx512vl" } */
       3  
       4  void
       5  f1 (__float128 x)
       6  {
       7    register __float128 a __asm ("xmm16");
       8    a = x;
       9    asm volatile ("" : "+v" (a));
      10    a = __builtin_fabsq (a);
      11    asm volatile ("" : "+v" (a));
      12  }
      13  
      14  void
      15  f2 (__float128 x, __float128 y)
      16  {
      17    register __float128 a __asm ("xmm16"), b __asm ("xmm17");
      18    a = x;
      19    b = y;
      20    asm volatile ("" : "+v" (a), "+v" (b));
      21    a = __builtin_copysignq (a, b);
      22    asm volatile ("" : "+v" (a));
      23  }
      24  
      25  void
      26  f3 (__float128 x)
      27  {
      28    register __float128 a __asm ("xmm16");
      29    a = x;
      30    asm volatile ("" : "+v" (a));
      31    a = -a;
      32    asm volatile ("" : "+v" (a));
      33  }
      34  
      35  __int128_t
      36  f4 (void)
      37  {
      38    register __int128_t a __asm ("xmm16");
      39    register __int128_t __attribute__((vector_size (16))) b __asm ("xmm17");
      40    a = 1;
      41    asm volatile ("" : "+v" (a));
      42    b[0] = a;
      43    asm volatile ("" : "+v" (b));
      44    return b[0];
      45  }
      46  
      47  /* { dg-final { scan-assembler "vpandq\[^\n\r\]*xmm16" } } */
      48  /* { dg-final { scan-assembler "vporq\[^\n\r\]*xmm16" } } */
      49  /* { dg-final { scan-assembler "vpxorq\[^\n\r\]*xmm16" } } */