FreeRTOS / FreeRTOS-Kernel

FreeRTOS kernel files only, submoduled into https://github.com/FreeRTOS/FreeRTOS and various other repos.
https://www.FreeRTOS.org
MIT License
2.51k stars 1.05k forks source link

armv8-m: GCC/ArmClang: Remove redundant constant pools #1035

Closed urutva closed 2 months ago

urutva commented 2 months ago

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) and 56 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.

sonarcloud[bot] commented 2 months ago

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.7% Duplication on New Code

See analysis details on SonarCloud