ARM: code size increase starting from gcc 10
Gabriele Favalessa
gabriele@rzerosystems.com
Fri Mar 11 09:57:14 GMT 2022
Hi,
up to gcc 9 this function
#include <stdint.h>
#include <stdbool.h>
bool f() {
return *(volatile uint32_t*)0x42143fa8 == 0;
}
compiles (arm-none-eabi-gcc -mcpu=cortex-m4 -Os) to:
0: 4b02 ldr r3, [pc, #8] ; (c <f+0xc>)
2: 6818 ldr r0, [r3, #0]
4: fab0 f080 clz r0, r0
8: 0940 lsrs r0, r0, #5
a: 4770 bx lr
c: 42143fa8 .word 0x42143fa8
Starting with gcc 10 it compiles to:
0: 4b03 ldr r3, [pc, #12] ; (10 <f+0x10>)
2: f8d3 0fa8 ldr.w r0, [r3, #4008] ; 0xfa8
6: fab0 f080 clz r0, r0
a: 0940 lsrs r0, r0, #5
c: 4770 bx lr
e: bf00 nop
10: 42143000 .word 0x42143000
Questions:
1) why newer gcc versions don't generate the smallest possible size in
spite of -Os?
2) is there a way to get the smaller code with newer gcc versions?
Thanks
Gabriele
More information about the Gcc-help
mailing list