1 /* { dg-do compile } */
2 /* { dg-options "-O2" } */
3
4 /*
5 ** inv1:
6 ** cmp w0, 0
7 ** csinv w0, w1, w2, ne
8 ** ret
9 */
10 unsigned long long
11 inv1(unsigned a, unsigned b, unsigned c)
12 {
13 return a ? b : ~c;
14 }
15
16 /*
17 ** inv1_local:
18 ** cmp w0, 0
19 ** csinv w0, w1, w2, ne
20 ** ret
21 */
22 unsigned long long
23 inv1_local(unsigned a, unsigned b, unsigned c)
24 {
25 unsigned d = ~c;
26 return a ? b : d;
27 }
28
29 /*
30 ** inv_zero1:
31 ** cmp w0, 0
32 ** csinv w0, wzr, w1, ne
33 ** ret
34 */
35 unsigned long long
36 inv_zero1(unsigned a, unsigned b)
37 {
38 return a ? 0 : ~b;
39 }
40
41 /*
42 ** inv_zero2:
43 ** cmp w0, 0
44 ** csinv w0, wzr, w1, eq
45 ** ret
46 */
47 unsigned long long
48 inv_zero2(unsigned a, unsigned b)
49 {
50 return a ? ~b : 0;
51 }
52
53
54 /*
55 ** inv2:
56 ** cmp w0, 0
57 ** csinv w0, w2, w1, eq
58 ** ret
59 */
60 unsigned long long
61 inv2(unsigned a, unsigned b, unsigned c)
62 {
63 return a ? ~b : c;
64 }
65
66 /*
67 ** inv2_local:
68 ** cmp w0, 0
69 ** csinv w0, w2, w1, eq
70 ** ret
71 */
72 unsigned long long
73 inv2_local(unsigned a, unsigned b, unsigned c)
74 {
75 unsigned d = ~b;
76 return a ? d : c;
77 }
78
79 /*
80 ** neg1:
81 ** cmp w0, 0
82 ** csneg w0, w1, w2, ne
83 ** ret
84 */
85 unsigned long long
86 neg1(unsigned a, unsigned b, unsigned c)
87 {
88 return a ? b : -c;
89 }
90
91
92 /*
93 ** neg2:
94 ** cmp w0, 0
95 ** csneg w0, w2, w1, eq
96 ** ret
97 */
98 unsigned long long
99 neg2(unsigned a, unsigned b, unsigned c)
100 {
101 return a ? -b : c;
102 }
103
104 /* { dg-final { check-function-bodies "**" "" "" } } */