| /* { dg-do compile { target { ! ia32 } } } */ |
| /* { dg-options "-Ofast -mavx512vl" } */ |
| |
| void |
| f1 (__float128 x) |
| { |
| register __float128 a __asm ("xmm16"); |
| a = x; |
| asm volatile ("" : "+v" (a)); |
| a = __builtin_fabsq (a); |
| asm volatile ("" : "+v" (a)); |
| } |
| |
| void |
| f2 (__float128 x, __float128 y) |
| { |
| register __float128 a __asm ("xmm16"), b __asm ("xmm17"); |
| a = x; |
| b = y; |
| asm volatile ("" : "+v" (a), "+v" (b)); |
| a = __builtin_copysignq (a, b); |
| asm volatile ("" : "+v" (a)); |
| } |
| |
| void |
| f3 (__float128 x) |
| { |
| register __float128 a __asm ("xmm16"); |
| a = x; |
| asm volatile ("" : "+v" (a)); |
| a = -a; |
| asm volatile ("" : "+v" (a)); |
| } |
| |
| __int128_t |
| f4 (void) |
| { |
| register __int128_t a __asm ("xmm16"); |
| register __int128_t __attribute__((vector_size (16))) b __asm ("xmm17"); |
| a = 1; |
| asm volatile ("" : "+v" (a)); |
| b[0] = a; |
| asm volatile ("" : "+v" (b)); |
| return b[0]; |
| } |
| |
| /* { dg-final { scan-assembler "vpandq\[^\n\r\]*xmm16" } } */ |
| /* { dg-final { scan-assembler "vporq\[^\n\r\]*xmm16" } } */ |
| /* { dg-final { scan-assembler "vpxorq\[^\n\r\]*xmm16" } } */ |