Currently in Armv8-M GCC/ArmClang ports, constant pool is used to define literals needed for ldr instruction. However, those constant pools are defined with .align 4 which increases code size. Instead of defining the constant pool with .align 4, let the compiler hanlde the constant pool and the required alignment.
Description
Currently in Armv8-M GCC/ArmClang ports, constant pool is used to define literals needed for
ldr
instruction. However, those constant pools are defined with.align 4
which increases code size. Instead of defining the constant pool with.align 4
, let the compiler hanlde the constant pool and the required alignment.Benchmarking these changes using Cortex-M85 (Corstone-315) and blinky application in https://github.com/FreeRTOS/iot-reference-arm-corstone3xx/tree/main/applications/blinky shows a code size reduction of
72 bytes (GCC)
and56 bytes (ArmClang)
.Additional info: Armv8-M IAR port doesn't use any constant pool. With these changes all three ports GCC/ArmClang/IAR are aligned.
Test Steps
Validated the changes using GCC and ArmClang and using blinky application in https://github.com/FreeRTOS/iot-reference-arm-corstone3xx/tree/main/applications/blinky and:
Still to validate:
Checklist:
Related Issue
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.