1 /* Check that the compiler properly uses 16-bit encodings where available. */
2 /* { dg-do compile } */
3 /* { dg-require-effective-target arm_thumb2_ok } */
4 /* { dg-options "-Os -fno-builtin -mthumb" } */
5
6 int
f(int a,int b)7 f (int a, int b)
8 {
9 return a + b;
10 }
11
12 /* { dg-final { scan-assembler "add r0, r0, r1" } } */
13
14 int
f2(int a,int b,int c)15 f2 (int a, int b, int c)
16 {
17 return b + c;
18 }
19
20 /* { dg-final { scan-assembler "adds r0, r1, r2" } } */
21 int
g1(int a)22 g1 (int a)
23 {
24 return a + 255;
25 }
26
27 /* { dg-final { scan-assembler "adds r0, r0, #255" } } */
28
29 int
g2(int a)30 g2 (int a)
31 {
32 return a + 256;
33 }
34
35 /* { dg-final { scan-assembler "add r0, r0, #256" } } */
36
37 int
g3(int a)38 g3 (int a)
39 {
40 return a - 255;
41 }
42
43 /* { dg-final { scan-assembler "subs r0, r0, #255" } } */
44
45 int
g4(int a)46 g4 (int a)
47 {
48 return a - 256;
49 }
50
51 /* { dg-final { scan-assembler "sub r0, r0, #256" } } */
52
53 int
h1(int a,int b)54 h1 (int a, int b)
55 {
56 return b + 7;
57 }
58
59 /* { dg-final { scan-assembler "adds r0, r1, #7" } } */
60
61 int
h2(int a,int b)62 h2 (int a, int b)
63 {
64 return b + 8;
65 }
66
67 /* { dg-final { scan-assembler "add r0, r1, #8" } } */
68
69 int
h3(int a,int b)70 h3 (int a, int b)
71 {
72 return b - 7;
73 }
74
75 /* { dg-final { scan-assembler "subs r0, r1, #7" } } */
76
77 int
h4(int a,int b)78 h4 (int a, int b)
79 {
80 return b - 8;
81 }
82
83 /* { dg-final { scan-assembler "sub r0, r1, #8" } } */
84
85 int
i(int a,int b)86 i (int a, int b)
87 {
88 return b;
89 }
90
91 /* { dg-final { scan-assembler "mov r0, r1" } } */
92
93 int
j1()94 j1 ()
95 {
96 return 255;
97 }
98
99 /* { dg-final { scan-assembler "movs r0, #255" } } */
100
101 int
j2()102 j2 ()
103 {
104 return 256;
105 }
106
107 /* { dg-final { scan-assembler "mov r0, #256" } } */
108
109 int
k(int a,int b)110 k (int a, int b)
111 {
112 return b << 15;
113 }
114
115 /* { dg-final { scan-assembler "lsls r0, r1, #15" } } */
116
117 int
l1(int a,int b)118 l1 (int a, int b)
119 {
120 return a << b;
121 }
122
123 /* { dg-final { scan-assembler "lsls r0, r0, r1" } } */
124
125 int
l2(int a,int b,int c)126 l2 (int a, int b, int c)
127 {
128 return b << c;
129 }
130
131 /* { dg-final { scan-assembler "lsl r0, r1, r2" } } */
132
133 int
m(int a,int b)134 m (int a, int b)
135 {
136 return b >> 15;
137 }
138
139 /* { dg-final { scan-assembler "asrs r0, r1, #15" } } */
140
141 int
n1(int a,int b)142 n1 (int a, int b)
143 {
144 return a >> b;
145 }
146
147 /* { dg-final { scan-assembler "asrs r0, r0, r1" } } */
148
149 int
n2(int a,int b,int c)150 n2 (int a, int b, int c)
151 {
152 return b >> c;
153 }
154
155 /* { dg-final { scan-assembler "asr r0, r1, r2" } } */
156
157 unsigned int
o(unsigned int a,unsigned int b)158 o (unsigned int a, unsigned int b)
159 {
160 return b >> 15;
161 }
162
163 /* { dg-final { scan-assembler "lsrs r0, r1, #15" } } */
164
165 unsigned int
p1(unsigned int a,unsigned int b)166 p1 (unsigned int a, unsigned int b)
167 {
168 return a >> b;
169 }
170
171 /* { dg-final { scan-assembler "lsrs r0, r0, r1" } } */
172
173 unsigned int
p2(unsigned int a,unsigned int b,unsigned int c)174 p2 (unsigned int a, unsigned int b, unsigned int c)
175 {
176 return b >> c;
177 }
178
179 /* { dg-final { scan-assembler "lsr r0, r1, r2" } } */
180
181 int
q(int a,int b)182 q (int a, int b)
183 {
184 return b * a;
185 }
186
187 /* { dg-final { scan-assembler "muls r0, r1, r0" } } */
188
189 int
r(int a,int b)190 r (int a, int b)
191 {
192 return ~b;
193 }
194
195 /* { dg-final { scan-assembler "mvns r0, r1" } } */
196
197 int
s(int a,int b)198 s (int a, int b)
199 {
200 return -b;
201 }
202
203 /* { dg-final { scan-assembler "rsbs r0, r1, #0" } } */
204