[AArch64] Implement copysign[ds]f3
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / copysign_2.c
blob6eaa70413a36c364fbdc4206671dc00d7bd60cc9
1 /* { dg-do run } */
2 /* { dg-options "-O2 --save-temps" } */
4 float fabsf (float);
6 float
7 check (float x, float y)
9 return __builtin_copysignf (x, y);
12 float
13 check1 (float x)
15 return __builtin_copysignf (x, 1.0);
18 float
19 check2 (float x)
21 return __builtin_copysignf (1.0, x);
24 float
25 check3 (float x)
27 return -__builtin_copysignf (x, 1.0);
30 float
31 check4 (float x, float y)
33 return x * __builtin_copysignf (x, y);
36 float
37 check5 (float x, float y)
39 return __builtin_copysignf (-x, -y);
42 int
43 main (int argc, char** argv)
45 float x = 2.0f;
46 float y = -5.0f;
47 float epsilon = 0.00001f;
49 float expected = -2.0f;
51 if (fabsf (check (x, y) - expected) >= epsilon)
52 __builtin_abort ();
54 expected = 2.0f;
56 if (fabsf (check1 (x) - expected) >= epsilon)
57 __builtin_abort ();
59 expected = 1.0f;
61 if (fabsf (check2 (x) - expected) >= epsilon)
62 __builtin_abort ();
64 expected = -2.0f;
66 if (fabsf (check3 (x) - expected) >= epsilon)
67 __builtin_abort ();
69 expected = -4.0f;
71 if (fabsf (check4 (x, y) - expected) >= epsilon)
72 __builtin_abort ();
74 expected = 2.0f;
76 if (fabsf (check5 (x, y) - expected) >= epsilon)
77 __builtin_abort ();
80 /* { dg-final { scan-assembler-not "copysign\tw" } } */