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 "negs	r0, r1" } } */
204