2018-02-09 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / gcc / testsuite / gcc.target / arm / thumb-16bit-ops.c
blob9f4f659b35c062c9c576e9bb2d6aae74f91f6a86
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" } */
6 int
7 f (int a, int b)
9 return a + b;
12 /* { dg-final { scan-assembler "add r0, r0, r1" } } */
14 int
15 f2 (int a, int b, int c)
17 return b + c;
20 /* { dg-final { scan-assembler "adds r0, r1, r2" } } */
21 int
22 g1 (int a)
24 return a + 255;
27 /* { dg-final { scan-assembler "adds r0, r0, #255" } } */
29 int
30 g2 (int a)
32 return a + 256;
35 /* { dg-final { scan-assembler "add r0, r0, #256" } } */
37 int
38 g3 (int a)
40 return a - 255;
43 /* { dg-final { scan-assembler "subs r0, r0, #255" } } */
45 int
46 g4 (int a)
48 return a - 256;
51 /* { dg-final { scan-assembler "sub r0, r0, #256" } } */
53 int
54 h1 (int a, int b)
56 return b + 7;
59 /* { dg-final { scan-assembler "adds r0, r1, #7" } } */
61 int
62 h2 (int a, int b)
64 return b + 8;
67 /* { dg-final { scan-assembler "add r0, r1, #8" } } */
69 int
70 h3 (int a, int b)
72 return b - 7;
75 /* { dg-final { scan-assembler "subs r0, r1, #7" } } */
77 int
78 h4 (int a, int b)
80 return b - 8;
83 /* { dg-final { scan-assembler "sub r0, r1, #8" } } */
85 int
86 i (int a, int b)
88 return b;
91 /* { dg-final { scan-assembler "mov r0, r1" } } */
93 int
94 j1 ()
96 return 255;
99 /* { dg-final { scan-assembler "movs r0, #255" } } */
102 j2 ()
104 return 256;
107 /* { dg-final { scan-assembler "mov r0, #256" } } */
110 k (int a, int b)
112 return b << 15;
115 /* { dg-final { scan-assembler "lsls r0, r1, #15" } } */
118 l1 (int a, int b)
120 return a << b;
123 /* { dg-final { scan-assembler "lsls r0, r0, r1" } } */
126 l2 (int a, int b, int c)
128 return b << c;
131 /* { dg-final { scan-assembler "lsl r0, r1, r2" } } */
134 m (int a, int b)
136 return b >> 15;
139 /* { dg-final { scan-assembler "asrs r0, r1, #15" } } */
142 n1 (int a, int b)
144 return a >> b;
147 /* { dg-final { scan-assembler "asrs r0, r0, r1" } } */
150 n2 (int a, int b, int c)
152 return b >> c;
155 /* { dg-final { scan-assembler "asr r0, r1, r2" } } */
157 unsigned int
158 o (unsigned int a, unsigned int b)
160 return b >> 15;
163 /* { dg-final { scan-assembler "lsrs r0, r1, #15" } } */
165 unsigned int
166 p1 (unsigned int a, unsigned int b)
168 return a >> b;
171 /* { dg-final { scan-assembler "lsrs r0, r0, r1" } } */
173 unsigned int
174 p2 (unsigned int a, unsigned int b, unsigned int c)
176 return b >> c;
179 /* { dg-final { scan-assembler "lsr r0, r1, r2" } } */
182 q (int a, int b)
184 return b * a;
187 /* { dg-final { scan-assembler "muls r0, r1, r0" } } */
190 r (int a, int b)
192 return ~b;
195 /* { dg-final { scan-assembler "mvns r0, r1" } } */
198 s (int a, int b)
200 return -b;
203 /* { dg-final { scan-assembler "rsbs r0, r1, #0" } } */