ARM: code size increase starting from gcc 10

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux