Browse Source

cmake: gcc: Fix Cortex-R52 FPU type

The commit f10fa0dea8 mapped the
Cortex-R52 processor type to use the "VFPv3" FPU type, but the
toolchain requires the "FPv5" FPU type and refuses to assemble
floating-point instructions when the "VFPv3" FPU type is specified.

This commit updates the build script to specify the FPU type of
`fpv5-sp-d16` when the processor is configured with a single-precision
FPU, and `neon-fp-armv8` when the processor is configured with a
double-precision + Advanced SIMD-capable FPU.

Note that the `fp-armv8` FPU type is an alias for double-precision FPv5
with 32 double-precision registers (refer to the GCC
`gcc/config/arm/arm-cpus.in` for more details); NEON is always
specified in case of a double-precision configuration because the
Cortex-R52 can only be configured as such.

Signed-off-by: Stephanos Ioannidis <stephanos.ioannidis@nordicsemi.no>
pull/51408/head
Stephanos Ioannidis 3 years ago committed by Stephanos Ioannidis
parent
commit
9f652ea04a
  1. 8
      cmake/gcc-m-fpu.cmake

8
cmake/gcc-m-fpu.cmake

@ -7,7 +7,7 @@ if(CONFIG_FPU) @@ -7,7 +7,7 @@ if(CONFIG_FPU)
if("${ARCH}" STREQUAL "arm")
if(CONFIG_CPU_AARCH32_CORTEX_R)
if(CONFIG_CPU_CORTEX_R4 OR CONFIG_CPU_CORTEX_R5 OR CONFIG_CPU_CORTEX_R52) # VFPv3
if(CONFIG_CPU_CORTEX_R4 OR CONFIG_CPU_CORTEX_R5) # VFPv3
if(CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
set(GCC_M_FPU vfpv3-d16)
elseif(CONFIG_VFP_FEATURE_SINGLE_PRECISION)
@ -16,6 +16,12 @@ if("${ARCH}" STREQUAL "arm") @@ -16,6 +16,12 @@ if("${ARCH}" STREQUAL "arm")
if(CONFIG_VFP_FEATURE_HALF_PRECISION)
set(GCC_M_FPU ${GCC_M_FPU}-fp16)
endif()
elseif(CONFIG_CPU_CORTEX_R52)
if(CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
set(GCC_M_FPU neon-fp-armv8)
elseif(CONFIG_VFP_FEATURE_SINGLE_PRECISION)
set(GCC_M_FPU fpv5-sp-d16)
endif()
endif()
elseif(CONFIG_CPU_CORTEX_M)
# Defines a mapping from GCC_M_CPU to FPU

Loading…
Cancel
Save