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