From 1a761abb83fafd4dc6203ed4ffc9b61c4eb362a0 Mon Sep 17 00:00:00 2001 From: Travis Geiselbrecht Date: Tue, 14 May 2024 00:48:51 -0700 Subject: [PATCH] [arch][arm] Add support for float/nofloat compile options Was already added to arm64, but arch/arm hadn't picked up this feature yet. Uncovered a few places here or there that wasn't marking code as float/no-float, but this fixes a problem where newer compilers are starting to sneak in vector code because they can. Issue #406 --- arch/arm/arm-m/arch.c | 5 ----- arch/arm/rules.mk | 4 +++- engine.mk | 5 +++++ make/module.mk | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/arch/arm/arm-m/arch.c b/arch/arm/arm-m/arch.c index 2fd7765d..83a0072e 100644 --- a/arch/arm/arm-m/arch.c +++ b/arch/arm/arm-m/arch.c @@ -101,11 +101,6 @@ void arch_init(void) { CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CYCCNT = 0; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // enable cycle counter -#endif - printf("CONTROL 0x%x\n", __get_CONTROL()); -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - printf("FPSCR 0x%x\n", __get_FPSCR()); - printf("FPCCR 0x%x\n", FPU->FPCCR); #endif } diff --git a/arch/arm/rules.mk b/arch/arm/rules.mk index c2b9431e..1f4b2b16 100644 --- a/arch/arm/rules.mk +++ b/arch/arm/rules.mk @@ -309,8 +309,8 @@ MODULE_SRCS += \ $(LOCAL_DIR)/arm-m/arch.c \ $(LOCAL_DIR)/arm-m/cache.c \ $(LOCAL_DIR)/arm-m/exceptions.c \ - $(LOCAL_DIR)/arm-m/start.c \ $(LOCAL_DIR)/arm-m/spin_cycles.c \ + $(LOCAL_DIR)/arm-m/start.c \ $(LOCAL_DIR)/arm-m/thread.c \ $(LOCAL_DIR)/arm-m/vectab.c @@ -333,6 +333,8 @@ TOOLCHAIN_PREFIX := $(ARCH_$(ARCH)_TOOLCHAIN_PREFIX) $(info TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)) ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS) +ARCH_COMPILEFLAGS_NOFLOAT := -mgeneral-regs-only +ARCH_COMPILEFLAGS_FLOAT := GLOBAL_COMPILEFLAGS += $(THUMBINTERWORK) diff --git a/engine.mk b/engine.mk index e2d47dcd..555fa533 100644 --- a/engine.mk +++ b/engine.mk @@ -309,6 +309,8 @@ GLOBAL_DEFINES += GLOBAL_CPPFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_CPPFLAGS))\" GLOBAL_DEFINES += GLOBAL_ASMFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_ASMFLAGS))\" GLOBAL_DEFINES += GLOBAL_LDFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_LDFLAGS))\" GLOBAL_DEFINES += ARCH_COMPILEFLAGS=\"$(subst $(SPACE),_,$(ARCH_COMPILEFLAGS))\" +GLOBAL_DEFINES += ARCH_COMPILEFLAGS_FLOAT=\"$(subst $(SPACE),_,$(ARCH_COMPILEFLAGS_FLOAT))\" +GLOBAL_DEFINES += ARCH_COMPILEFLAGS_NOFLOAT=\"$(subst $(SPACE),_,$(ARCH_COMPILEFLAGS_NOFLOAT))\" GLOBAL_DEFINES += ARCH_CFLAGS=\"$(subst $(SPACE),_,$(ARCH_CFLAGS))\" GLOBAL_DEFINES += ARCH_CPPFLAGS=\"$(subst $(SPACE),_,$(ARCH_CPPFLAGS))\" GLOBAL_DEFINES += ARCH_ASMFLAGS=\"$(subst $(SPACE),_,$(ARCH_ASMFLAGS))\" @@ -335,6 +337,9 @@ endif $(info LIBGCC = $(LIBGCC)) $(info GLOBAL_COMPILEFLAGS = $(GLOBAL_COMPILEFLAGS)) $(info GLOBAL_OPTFLAGS = $(GLOBAL_OPTFLAGS)) +$(info ARCH_COMPILEFLAGS = $(ARCH_COMPILEFLAGS)) +$(info ARCH_COMPILEFLAGS_FLOAT = $(ARCH_COMPILEFLAGS_FLOAT)) +$(info ARCH_COMPILEFLAGS_NOFLOAT = $(ARCH_COMPILEFLAGS_NOFLOAT)) # make all object files depend on any targets in GLOBAL_SRCDEPS $(ALLOBJS): $(GLOBAL_SRCDEPS) diff --git a/make/module.mk b/make/module.mk index bf761805..8ad13339 100644 --- a/make/module.mk +++ b/make/module.mk @@ -91,7 +91,7 @@ endif #$(info MODULE_BUILDDIR $(MODULE_BUILDDIR)) #$(info MODULE_DEPS $(MODULE_DEPS)) #$(info MODULE_SRCS $(MODULE_SRCS)) -#$(info MODULE_FLOAT_SRCS $(MODULE_SRCS)) +#$(info MODULE_FLOAT_SRCS $(MODULE_FLOAT_SRCS)) #$(info MODULE_OPTIONS $(MODULE_OPTIONS)) MODULE_DEFINES += MODULE_NAME=\"$(subst $(SPACE),_,$(MODULE))\"