From 9f652ea04a6deba0b33c0b34b861195ae967cd7c Mon Sep 17 00:00:00 2001 From: Stephanos Ioannidis Date: Tue, 18 Oct 2022 21:26:46 +0900 Subject: [PATCH] cmake: gcc: Fix Cortex-R52 FPU type The commit f10fa0dea8ecea9cbe05e45f42df8e018735d7a5 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 --- cmake/gcc-m-fpu.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/gcc-m-fpu.cmake b/cmake/gcc-m-fpu.cmake index 5a1f5b2252..0e231b2ae3 100644 --- a/cmake/gcc-m-fpu.cmake +++ b/cmake/gcc-m-fpu.cmake @@ -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") 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