aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Geiselbrecht <geist@foobox.com>2024-05-14 01:18:38 -0700
committerTravis Geiselbrecht <geist@foobox.com>2024-05-14 01:28:51 -0700
commit035739433ec664b1fa991ffa62f29da677a16e21 (patch)
tree60497cfcbbceff90518d2849c9eb374d721ea330
parent1a761abb83fafd4dc6203ed4ffc9b61c4eb362a0 (diff)
downloadlk-upstream-master.tar.gz
[arch][arm] avoid using -mgeneral-regs-only for arm32upstream-master
For older compilers (gcc 7.5.0 in particular) avoid using -mgeneral-regs-only to override the floating point switches, since it doesn't seem to understand that switch. Instead more properly add the floating point switches for a module or source file compiled with float. More compatible with all compilers.
-rw-r--r--arch/arm/rules.mk10
-rw-r--r--arch/arm/toolchain.mk20
2 files changed, 15 insertions, 15 deletions
diff --git a/arch/arm/rules.mk b/arch/arm/rules.mk
index 1f4b2b16..53b48cb6 100644
--- a/arch/arm/rules.mk
+++ b/arch/arm/rules.mk
@@ -244,12 +244,14 @@ MODULE_SRCS += \
$(LOCAL_DIR)/arm/cache.c \
$(LOCAL_DIR)/arm/debug.c \
$(LOCAL_DIR)/arm/ops.S \
- $(LOCAL_DIR)/arm/exceptions.S \
$(LOCAL_DIR)/arm/faults.c \
- $(LOCAL_DIR)/arm/fpu.c \
$(LOCAL_DIR)/arm/mmu.c \
$(LOCAL_DIR)/arm/thread.c
+MODULE_FLOAT_SRCS += \
+ $(LOCAL_DIR)/arm/exceptions.S \
+ $(LOCAL_DIR)/arm/fpu.c \
+
MODULE_ARM_OVERRIDE_SRCS := \
$(LOCAL_DIR)/arm/arch.c
@@ -333,8 +335,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 :=
+ARCH_COMPILEFLAGS_NOFLOAT :=
+ARCH_COMPILEFLAGS_FLOAT := $(ARCH_$(ARCH)_COMPILEFLAGS_FLOAT)
GLOBAL_COMPILEFLAGS += $(THUMBINTERWORK)
diff --git a/arch/arm/toolchain.mk b/arch/arm/toolchain.mk
index 07f48719..f1e1a458 100644
--- a/arch/arm/toolchain.mk
+++ b/arch/arm/toolchain.mk
@@ -75,33 +75,31 @@ ARCH_arm_COMPILEFLAGS += -mcpu=cortex-m4
endif
ifeq ($(ARM_CPU),cortex-m7-fpu-sp-d16)
# use cortex-m4 for now until better general toolchain support
-ARCH_arm_COMPILEFLAGS += -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
+ARCH_arm_COMPILEFLAGS += -mcpu=cortex-m4
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),cortex-m4f)
-ARCH_arm_COMPILEFLAGS += -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
+ARCH_arm_COMPILEFLAGS += -mcpu=cortex-m4
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),cortex-a7)
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
-ARCH_arm_COMPILEFLAGS += -mfpu=vfpv3 -mfloat-abi=softfp
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=vfpv3 -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),cortex-a8)
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
-ARCH_arm_COMPILEFLAGS += -mfpu=neon -mfloat-abi=softfp
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=neon -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),cortex-a9)
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
endif
ifeq ($(ARM_CPU),cortex-a9-neon)
ARCH_arm_COMPILEFLAGS += -mcpu=cortex-a9
-# XXX cannot enable neon right now because compiler generates
-# neon code for 64bit integer ops
-ARCH_arm_COMPILEFLAGS += -mfpu=vfpv3 -mfloat-abi=softfp
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=neon -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),cortex-a15)
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
-ifneq ($(ARM_WITHOUT_VFP_NEON),true)
-ARCH_arm_COMPILEFLAGS += -mfpu=vfpv3 -mfloat-abi=softfp
-endif
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=neon -mfloat-abi=softfp
endif
ifeq ($(ARM_CPU),arm1136j-s)
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
@@ -113,7 +111,7 @@ ifeq ($(ARM_CPU),cortex-r4f)
ARCH_arm_COMPILEFLAGS += -march=armv7-r
ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
ARCH_arm_COMPILEFLAGS += -mbig-endian
-ARCH_arm_COMPILEFLAGS += -mfpu=vfpv3-d16 -mfloat-abi=hard
+ARCH_arm_COMPILEFLAGS_FLOAT += -mfpu=vfpv3-d16 -mfloat-abi=hard
GLOBAL_MODULE_LDFLAGS += -EB
endif
ifeq ($(ARM_CPU),armemu)