aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Geiselbrecht <geist@foobox.com>2024-05-14 00:48:51 -0700
committerTravis Geiselbrecht <geist@foobox.com>2024-05-14 00:57:19 -0700
commit1a761abb83fafd4dc6203ed4ffc9b61c4eb362a0 (patch)
treef3f732d5f66c9d0a7a5df2ab7616a1a86c8e4e14
parent973a0ae4661661627883657bea1da9228c59fb1f (diff)
downloadlk-1a761abb83fafd4dc6203ed4ffc9b61c4eb362a0.tar.gz
[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
-rw-r--r--arch/arm/arm-m/arch.c5
-rw-r--r--arch/arm/rules.mk4
-rw-r--r--engine.mk5
-rw-r--r--make/module.mk2
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
@@ -102,11 +102,6 @@ void arch_init(void) {
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
}
void arch_quiesce(void) {
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))\"