From 50161185094208ef8805a5fdbddd34d0b8d2d5a8 Mon Sep 17 00:00:00 2001 From: Travis Geiselbrecht Date: Wed, 8 Oct 2025 23:41:13 -0700 Subject: [PATCH] [fpu] have the arch layers set WITH_NO_FPU based on the cpu This will generally turn off more FPU codegen, even if its using software fallback unless the project/target/platform selects a cpu that has FPU support. This also turns off a few blocks of test code and the upcoming floating point printf if it's not present on the arch. This may break projects that were compiling for say cortex-m0 but expected FPU code to be present. If so it should be pretty easy to override it, but not going to add that yet unless it's necessary. --- app/tests/float.c | 14 +++++++------- arch/arm/rules.mk | 33 ++++++++++++++++++++++----------- arch/m68k/rules.mk | 3 +++ arch/riscv/rules.mk | 2 ++ platform/cc13xx/rules.mk | 3 +-- project/lpclink2-lpcboot.mk | 3 --- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/app/tests/float.c b/app/tests/float.c index f6a442ba..88fc6f9a 100644 --- a/app/tests/float.c +++ b/app/tests/float.c @@ -5,7 +5,7 @@ * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT */ -#if ARM_WITH_VFP || ARCH_ARM64 || X86_WITH_FPU || (ARCH_RISCV && RISCV_FPU) +#if !WITH_NO_FP #include #include @@ -20,11 +20,6 @@ #include #include -extern void float_vfp_arm_instruction_test(void); -extern void float_vfp_thumb_instruction_test(void); -extern void float_neon_arm_instruction_test(void); -extern void float_neon_thumb_instruction_test(void); - #if ARM_WITH_VFP_SP_ONLY #define FLOAT float #else @@ -57,6 +52,11 @@ static int float_thread(void *arg) { } #if ARCH_ARM && !ARM_ISA_ARMV7M +extern void float_vfp_arm_instruction_test(void); +extern void float_vfp_thumb_instruction_test(void); +extern void float_neon_arm_instruction_test(void); +extern void float_neon_thumb_instruction_test(void); + static void arm_float_instruction_trap_test(void) { printf("testing fpu trap\n"); @@ -152,4 +152,4 @@ STATIC_COMMAND_START STATIC_COMMAND("float_tests", "floating point test", &float_tests) STATIC_COMMAND_END(float_tests); -#endif // ARM_WITH_VFP || ARCH_ARM64 +#endif // !WITH_NO_FP diff --git a/arch/arm/rules.mk b/arch/arm/rules.mk index 0583ec46..632be8f1 100644 --- a/arch/arm/rules.mk +++ b/arch/arm/rules.mk @@ -18,7 +18,8 @@ GLOBAL_DEFINES += \ ARM_CPU_CORTEX_M0=1 \ ARM_ISA_ARMV6M=1 \ ARM_WITH_THUMB=1 \ - USE_BUILTIN_ATOMICS=0 + USE_BUILTIN_ATOMICS=0 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -28,7 +29,8 @@ GLOBAL_DEFINES += \ ARM_CPU_CORTEX_M0_PLUS=1 \ ARM_ISA_ARMV6M=1 \ ARM_WITH_THUMB=1 \ - USE_BUILTIN_ATOMICS=0 + USE_BUILTIN_ATOMICS=0 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -39,7 +41,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv7=1 \ ARM_ISA_ARMv7M=1 \ ARM_WITH_THUMB=1 \ - ARM_WITH_THUMB2=1 + ARM_WITH_THUMB2=1 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -50,7 +53,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv7=1 \ ARM_ISA_ARMv7M=1 \ ARM_WITH_THUMB=1 \ - ARM_WITH_THUMB2=1 + ARM_WITH_THUMB2=1 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -76,7 +80,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv7M=1 \ ARM_WITH_THUMB=1 \ ARM_WITH_THUMB2=1 \ - ARM_WITH_CACHE=1 + ARM_WITH_CACHE=1 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -102,7 +107,8 @@ GLOBAL_DEFINES += \ ARM_WITH_THUMB2=1 \ ARM_WITH_CACHE=1 \ ARM_WITH_VFP=1 \ - ARM_WITH_VFP_SP_ONLY=1 + ARM_WITH_VFP_SP_ONLY=1 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := true SUBARCH := arm-m @@ -135,6 +141,8 @@ ifneq ($(ARM_WITHOUT_VFP_NEON),true) GLOBAL_DEFINES += \ ARM_WITH_VFP=1 \ ARM_WITH_NEON=1 +else +GLOBAL_DEFINES += WITH_NO_FP=1 endif HANDLED_CORE := true endif @@ -160,7 +168,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv7A=1 \ ARM_WITH_THUMB=1 \ ARM_WITH_THUMB2=1 \ - ARM_WITH_CACHE=1 + ARM_WITH_CACHE=1 \ + WITH_NO_FP=1 HANDLED_CORE := true endif ifeq ($(ARM_CPU),cortex-a9-neon) @@ -184,7 +193,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv6=1 \ ARM_WITH_THUMB=1 \ ARM_WITH_CACHE=1 \ - ARM_CPU_ARM1136=1 + ARM_CPU_ARM1136=1 \ + WITH_NO_FP=1 HANDLED_CORE := true endif ifeq ($(ARM_CPU),arm1176jzf-s) @@ -204,8 +214,8 @@ GLOBAL_DEFINES += \ ARM_ISA_ARMv7=1 \ ARM_WITH_VFP=1 \ ARM_WITH_THUMB=1 - ENABLE_THUMB := true - HANDLED_CORE := true +ENABLE_THUMB := true +HANDLED_CORE := true endif ifeq ($(ARM_CPU),armemu) # flavor of emulated cpu by the armemu project @@ -213,7 +223,8 @@ GLOBAL_DEFINES += \ ARM_WITH_CP15=1 \ ARM_ISA_ARMv7=1 \ ARM_ISA_ARMv7A=1 \ - ARM_WITH_CACHE=1 + ARM_WITH_CACHE=1 \ + WITH_NO_FP=1 HANDLED_CORE := true ENABLE_THUMB := false # armemu doesn't currently support thumb properly endif diff --git a/arch/m68k/rules.mk b/arch/m68k/rules.mk index 00194672..ecf02d6d 100644 --- a/arch/m68k/rules.mk +++ b/arch/m68k/rules.mk @@ -21,10 +21,13 @@ M68K_CPU ?= 68040 # default to 040 ifeq ($(M68K_CPU),68000) ARCH_COMPILEFLAGS := -mcpu=68000 +GLOBAL_DEFINES += WITH_NO_FP=1 else ifeq ($(M68K_CPU),68010) ARCH_COMPILEFLAGS := -mcpu=68010 +GLOBAL_DEFINES += WITH_NO_FP=1 else ifeq ($(M68K_CPU),68020) ARCH_COMPILEFLAGS := -mcpu=68020 +GLOBAL_DEFINES += WITH_NO_FP=1 else ifeq ($(M68K_CPU),68030) ARCH_COMPILEFLAGS := -mcpu=68030 else ifeq ($(M68K_CPU),68040) diff --git a/arch/riscv/rules.mk b/arch/riscv/rules.mk index 24d8e19d..bcc3ad8b 100644 --- a/arch/riscv/rules.mk +++ b/arch/riscv/rules.mk @@ -135,6 +135,8 @@ endif ifeq (true,$(call TOBOOL,$(RISCV_FPU))) GLOBAL_DEFINES += RISCV_FPU=1 +else + GLOBAL_DEFINES += WITH_NO_FP=1 endif # based on a list of optional extensions passed in, collapse the extensions into diff --git a/platform/cc13xx/rules.mk b/platform/cc13xx/rules.mk index d2fc310b..fa9f25c1 100644 --- a/platform/cc13xx/rules.mk +++ b/platform/cc13xx/rules.mk @@ -23,8 +23,7 @@ MODULE_DEPS += \ arch/arm/arm-m/systick \ platform/cc13xx/cc13xxware -GLOBAL_COMPILEFLAGS += -DWITH_NO_FP=1 -#GLOBAL_COMPILEFLAGS += -DDISABLE_DEBUG_OUTPUT=1 +#GLOBAL_DEFINES += DISABLE_DEBUG_OUTPUT=1 include make/module.mk diff --git a/project/lpclink2-lpcboot.mk b/project/lpclink2-lpcboot.mk index 4f0d0fdb..dc5e7d79 100644 --- a/project/lpclink2-lpcboot.mk +++ b/project/lpclink2-lpcboot.mk @@ -1,9 +1,6 @@ MODULES += \ app/lpcboot -GLOBAL_DEFINES += \ - WITH_NO_FP=1 - # WITH_NO_CLOCK_INIT=1 TARGET := lpclink2