Commit 011f5e9
Christophe Lyon
arm: Improve thumb1_gen_const_int
Enable thumb1_gen_const_int to generate RTL or asm depending on the
context, so that we avoid duplicating code to handle constants in
Thumb-1 with -mpure-code.
Use a template so that the algorithm is effectively shared, and
rely on two classes to handle the actual emission as RTL or asm.
The generated sequence is improved to handle right-shiftable and small
values with less instructions. We now generate:
128:
movs r0, r0, #128
264:
movs r3, gcc-mirror#33
lsls r3, gcc-mirror#3
510:
movs r3, #255
lsls r3, #1
512:
movs r3, #1
lsls r3, gcc-mirror#9
764:
movs r3, #191
lsls r3, gcc-mirror#2
65536:
movs r3, #1
lsls r3, gcc-mirror#16
0x123456:
movs r3, gcc-mirror#18 ;0x12
lsls r3, gcc-mirror#8
adds r3, gcc-mirror#52 ;0x34
lsls r3, gcc-mirror#8
adds r3, gcc-mirror#86 ;0x56
0x1123456:
movs r3, #137 ;0x89
lsls r3, gcc-mirror#8
adds r3, gcc-mirror#26 ;0x1a
lsls r3, gcc-mirror#8
adds r3, gcc-mirror#43 ;0x2b
lsls r3, #1
0x1000010:
movs r3, gcc-mirror#16
lsls r3, gcc-mirror#16
adds r3, #1
lsls r3, gcc-mirror#4
0x1000011:
movs r3, #1
lsls r3, gcc-mirror#24
adds r3, gcc-mirror#17
-8192:
movs r3, #1
lsls r3, gcc-mirror#13
rsbs r3, #0
The patch adds a testcase which does not fully exercise
thumb1_gen_const_int, as other existing patterns already catch small
constants. These parts of thumb1_gen_const_int are used by
arm_thumb1_mi_thunk.
2020-11-02 Christophe Lyon <[email protected]>
gcc/
* config/arm/arm.c (thumb1_const_rtl, thumb1_const_print): New
classes.
(thumb1_gen_const_int): Rename to ...
(thumb1_gen_const_int_1): ... New helper function. Add capability
to emit either RTL or asm, improve generated code.
(thumb1_gen_const_int_rtl): New function.
* config/arm/arm-protos.h (thumb1_gen_const_int): Rename to
thumb1_gen_const_int_rtl.
* config/arm/thumb1.md: Call thumb1_gen_const_int_rtl instead
of thumb1_gen_const_int.
gcc/testsuite/
* gcc.target/arm/pure-code/no-literal-pool-m0.c: New.1 parent 79680c1 commit 011f5e9
File tree
4 files changed
+369
-34
lines changed- gcc
- config/arm
- testsuite/gcc.target/arm/pure-code
4 files changed
+369
-34
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
77 | | - | |
| 77 | + | |
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4528 | 4528 | | |
4529 | 4529 | | |
4530 | 4530 | | |
4531 | | - | |
4532 | | - | |
4533 | | - | |
4534 | | - | |
4535 | | - | |
4536 | | - | |
4537 | | - | |
4538 | | - | |
4539 | | - | |
4540 | | - | |
4541 | | - | |
4542 | | - | |
4543 | | - | |
4544 | | - | |
4545 | | - | |
4546 | | - | |
4547 | | - | |
4548 | | - | |
4549 | | - | |
4550 | | - | |
4551 | | - | |
4552 | | - | |
4553 | | - | |
4554 | | - | |
4555 | | - | |
4556 | | - | |
4557 | | - | |
4558 | | - | |
4559 | | - | |
4560 | | - | |
4561 | | - | |
4562 | | - | |
4563 | 4531 | | |
4564 | 4532 | | |
4565 | 4533 | | |
| |||
28263 | 28231 | | |
28264 | 28232 | | |
28265 | 28233 | | |
| 28234 | + | |
| 28235 | + | |
| 28236 | + | |
| 28237 | + | |
| 28238 | + | |
| 28239 | + | |
| 28240 | + | |
| 28241 | + | |
| 28242 | + | |
| 28243 | + | |
| 28244 | + | |
| 28245 | + | |
| 28246 | + | |
| 28247 | + | |
| 28248 | + | |
| 28249 | + | |
| 28250 | + | |
| 28251 | + | |
| 28252 | + | |
| 28253 | + | |
| 28254 | + | |
| 28255 | + | |
| 28256 | + | |
| 28257 | + | |
| 28258 | + | |
| 28259 | + | |
| 28260 | + | |
| 28261 | + | |
| 28262 | + | |
| 28263 | + | |
| 28264 | + | |
| 28265 | + | |
| 28266 | + | |
| 28267 | + | |
| 28268 | + | |
| 28269 | + | |
| 28270 | + | |
| 28271 | + | |
| 28272 | + | |
| 28273 | + | |
| 28274 | + | |
| 28275 | + | |
| 28276 | + | |
| 28277 | + | |
| 28278 | + | |
| 28279 | + | |
| 28280 | + | |
| 28281 | + | |
| 28282 | + | |
| 28283 | + | |
| 28284 | + | |
| 28285 | + | |
| 28286 | + | |
| 28287 | + | |
| 28288 | + | |
| 28289 | + | |
| 28290 | + | |
| 28291 | + | |
| 28292 | + | |
| 28293 | + | |
| 28294 | + | |
| 28295 | + | |
| 28296 | + | |
| 28297 | + | |
| 28298 | + | |
| 28299 | + | |
| 28300 | + | |
| 28301 | + | |
| 28302 | + | |
| 28303 | + | |
| 28304 | + | |
| 28305 | + | |
| 28306 | + | |
| 28307 | + | |
| 28308 | + | |
| 28309 | + | |
| 28310 | + | |
| 28311 | + | |
| 28312 | + | |
| 28313 | + | |
| 28314 | + | |
| 28315 | + | |
| 28316 | + | |
| 28317 | + | |
| 28318 | + | |
| 28319 | + | |
| 28320 | + | |
| 28321 | + | |
| 28322 | + | |
| 28323 | + | |
| 28324 | + | |
| 28325 | + | |
| 28326 | + | |
| 28327 | + | |
| 28328 | + | |
| 28329 | + | |
| 28330 | + | |
| 28331 | + | |
| 28332 | + | |
| 28333 | + | |
| 28334 | + | |
| 28335 | + | |
| 28336 | + | |
| 28337 | + | |
| 28338 | + | |
| 28339 | + | |
| 28340 | + | |
| 28341 | + | |
| 28342 | + | |
| 28343 | + | |
| 28344 | + | |
| 28345 | + | |
| 28346 | + | |
| 28347 | + | |
| 28348 | + | |
| 28349 | + | |
| 28350 | + | |
| 28351 | + | |
| 28352 | + | |
| 28353 | + | |
| 28354 | + | |
| 28355 | + | |
| 28356 | + | |
| 28357 | + | |
| 28358 | + | |
| 28359 | + | |
| 28360 | + | |
| 28361 | + | |
| 28362 | + | |
| 28363 | + | |
| 28364 | + | |
| 28365 | + | |
| 28366 | + | |
| 28367 | + | |
| 28368 | + | |
| 28369 | + | |
| 28370 | + | |
| 28371 | + | |
| 28372 | + | |
| 28373 | + | |
| 28374 | + | |
| 28375 | + | |
| 28376 | + | |
| 28377 | + | |
| 28378 | + | |
| 28379 | + | |
| 28380 | + | |
| 28381 | + | |
| 28382 | + | |
| 28383 | + | |
| 28384 | + | |
| 28385 | + | |
| 28386 | + | |
| 28387 | + | |
| 28388 | + | |
| 28389 | + | |
| 28390 | + | |
| 28391 | + | |
| 28392 | + | |
| 28393 | + | |
| 28394 | + | |
| 28395 | + | |
| 28396 | + | |
| 28397 | + | |
| 28398 | + | |
| 28399 | + | |
| 28400 | + | |
| 28401 | + | |
| 28402 | + | |
| 28403 | + | |
| 28404 | + | |
| 28405 | + | |
| 28406 | + | |
| 28407 | + | |
| 28408 | + | |
| 28409 | + | |
| 28410 | + | |
| 28411 | + | |
| 28412 | + | |
| 28413 | + | |
| 28414 | + | |
| 28415 | + | |
| 28416 | + | |
| 28417 | + | |
| 28418 | + | |
| 28419 | + | |
| 28420 | + | |
| 28421 | + | |
| 28422 | + | |
| 28423 | + | |
| 28424 | + | |
| 28425 | + | |
28266 | 28426 | | |
28267 | 28427 | | |
28268 | 28428 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
820 | 820 | | |
821 | 821 | | |
822 | 822 | | |
823 | | - | |
| 823 | + | |
824 | 824 | | |
825 | 825 | | |
826 | 826 | | |
| |||
0 commit comments