1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-Ofast -mavx512vl -mno-avx512dq" } */
3 
4 void
f1(float x)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
f2(float x,float y)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
f3(float x)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
f4(double x)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
f5(double x,double y)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
f6(double x)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 "vpord\[^\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 "vporq\[^\n\r\]*xmm18" } } */
71 /* { dg-final { scan-assembler "vpxorq\[^\n\r\]*xmm18" } } */
72