Browse Source

rework FPU/FLOAT support

NEON is only an extension not the FPU hardware.
So handle this in a better way.
Remove the lower case symbols.
Waldemar Brodkorb 9 years ago
parent
commit
476a87c63f

+ 0 - 2
target/arm/systems/raspberry-pi

@@ -4,8 +4,6 @@ config ADK_TARGET_SYSTEM_RASPBERRY_PI
 	select ADK_little
 	select ADK_raspberry_pi
 	select ADK_CPU_ARM1176JZF_S
-	select ADK_TARGET_CPU_WITH_FPU
-	select ADK_TARGET_CPU_WITH_FPU_VFP
 	select ADK_TARGET_BOARD_BCM28XX
 	select ADK_TARGET_WITH_VGA
 	select ADK_TARGET_WITH_SERIAL

+ 1 - 2
target/arm/systems/raspberry-pi2

@@ -4,9 +4,8 @@ config ADK_TARGET_SYSTEM_RASPBERRY_PI2
 	select ADK_little
 	select ADK_raspberry_pi2
 	select ADK_CPU_CORTEX_A7
+	select ADK_TARGET_CPU_WITH_NEON
 	select ADK_TARGET_BOARD_BCM28XX
-	select ADK_TARGET_CPU_WITH_FPU
-	select ADK_TARGET_CPU_WITH_FPU_NEON
 	select ADK_TARGET_WITH_VGA
 	select ADK_TARGET_WITH_SERIAL
 	select ADK_TARGET_WITH_CPU_FREQ

+ 1 - 2
target/arm/systems/solidrun-imx6

@@ -4,8 +4,7 @@ config ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
 	select ADK_little
 	select ADK_solidrun_imx6
 	select ADK_CPU_CORTEX_A9
-	select ADK_TARGET_CPU_WITH_FPU
-	select ADK_TARGET_CPU_WITH_FPU_NEON
+	select ADK_TARGET_CPU_WITH_NEON
 	select ADK_TARGET_WITH_VGA
 	select ADK_TARGET_WITH_SERIAL
 	select ADK_TARGET_WITH_CPU_FREQ

+ 16 - 2
target/config/Config.in.arm.choice

@@ -6,11 +6,21 @@ prompt "CPU architecture and family"
 depends on ADK_TARGET_TOOLCHAIN && ADK_TARGET_ARCH_ARM
 
 config ADK_CPU_ARMV7A_CORTEX_A9
-        bool "cortex-a9 (armv7-a)"
+        bool "cortex-a9"
         select ADK_CPU_CORTEX_A9
 
+config ADK_CPU_ARMV7A_CORTEX_A7
+        bool "cortex-a7"
+        select ADK_CPU_CORTEX_A7
+
+config ADK_CPU_ARMV7M_CORTEX_M4
+        bool "cortex-m4"
+        select ADK_CPU_CORTEX_M4
+	select ADK_TARGET_ARCH_ARM_WITH_THUMB
+	select ADK_TARGET_UCLINUX
+
 config ADK_CPU_ARMV7M_CORTEX_M3
-        bool "cortex-m3 (armv7-m)"
+        bool "cortex-m3"
         select ADK_CPU_CORTEX_M3
 	select ADK_TARGET_ARCH_ARM_WITH_THUMB
 	select ADK_TARGET_UCLINUX
@@ -23,6 +33,10 @@ config ADK_CPU_ARMV5TE_ARM926EJ_S
         bool "arm926ej-s (armv5te)"
         select ADK_CPU_ARM926EJ_S
 
+config ADK_CPU_XSCALE
+        bool "xscale"
+        select ADK_CPU_XSCALE
+
 endchoice
 
 choice

+ 9 - 4
target/config/Config.in.cpu

@@ -22,6 +22,7 @@ config ADK_CPU_ARM1176JZF_S
 	bool
 	select ADK_TARGET_WITH_NPTL
 	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_CPU_WITH_FPU_VFP
 
 config ADK_CPU_ARM926EJ_S
 	bool
@@ -71,11 +72,13 @@ config ADK_CPU_CORTEX_A7
 	bool
 	select ADK_TARGET_WITH_NPTL
 	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_CPU_WITH_FPU_VFP4
 
 config ADK_CPU_CORTEX_A9
 	bool
 	select ADK_TARGET_WITH_NPTL
 	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_CPU_WITH_FPU_VFP3
 
 config ADK_CPU_CRIS_V10
 	bool
@@ -203,20 +206,19 @@ config ADK_TARGET_CPU_WITH_FPU
 
 config ADK_TARGET_CPU_WITH_FPU_VFP
 	bool
+	select ADK_TARGET_CPU_WITH_FPU
 	select ADK_fpu_vfp
 
 config ADK_TARGET_CPU_WITH_FPU_VFP3
 	bool
+	select ADK_TARGET_CPU_WITH_FPU
 	select ADK_fpu_vfp3
 
 config ADK_TARGET_CPU_WITH_FPU_VFP4
 	bool
+	select ADK_TARGET_CPU_WITH_FPU
 	select ADK_fpu_vfp4
 
-config ADK_TARGET_CPU_WITH_FPU_NEON
-	bool
-	select ADK_fpu_neon
-
 config ADK_TARGET_CPU_WITH_VT
 	bool
 
@@ -244,6 +246,9 @@ config ADK_TARGET_CPU_WITH_SSSE3
 config ADK_TARGET_CPU_WITH_IWMMXT
 	bool
 
+config ADK_TARGET_CPU_WITH_NEON
+	bool
+
 config ADK_TARGET_CPU_WITH_HT
 	bool
 

+ 0 - 2
target/config/Config.in.float.choice

@@ -10,10 +10,8 @@ depends on (ADK_TARGET_ARCH_ARM || \
 
 config ADK_TARGET_HARD_FLOAT
 	bool "hard-float"
-	select ADK_hard_float
 
 config ADK_TARGET_SOFT_FLOAT
 	bool "soft-float"
-	select ADK_soft_float
 
 endchoice

+ 2 - 9
target/config/Config.in.float.default

@@ -1,14 +1,7 @@
 # This file is part of the OpenADK project. OpenADK is copyrighted
 # material, please see the LICENCE file in the top-level directory.
 
-config ADK_soft_float
-	bool
-
-config ADK_hard_float
-	bool
-
 config ADK_TARGET_FLOAT
 	string
-	default "hard" if ADK_hard_float
-	default "soft" if ADK_soft_float
-
+	default "hard" if ADK_TARGET_HARD_FLOAT
+	default "soft" if ADK_TARGET_SOFT_FLOAT

+ 4 - 17
target/config/Config.in.fpu.default

@@ -1,23 +1,10 @@
 # This file is part of the OpenADK project. OpenADK is copyrighted
 # material, please see the LICENCE file in the top-level directory.
 
-config ADK_fpu_neon
-	bool
-
-config ADK_fpu_vfp
-	bool
-
-config ADK_fpu_vfp3
-	bool
-
-config ADK_fpu_vfp4
-	bool
-
 config ADK_TARGET_FPU
 	string
 	depends on ADK_TARGET_ARCH_ARM
-	default "vfp" if ADK_fpu_vfp
-	default "vfp3" if ADK_fpu_vfp3
-	default "vfp4" if ADK_fpu_vfp4
-	default "neon" if ADK_fpu_neon
-
+	default "vfp" if ADK_TARGET_CPU_WITH_FPU_VFP
+	default "vfp3" if ADK_TARGET_CPU_WITH_FPU_VFP3
+	default "vfp4" if ADK_TARGET_CPU_WITH_FPU_VFP4
+	default "neon" if ADK_TARGET_CPU_WITH_NEON

+ 8 - 13
target/config/Config.in.target

@@ -24,22 +24,17 @@ config ADK_TARGET_CFLAGS
 	default "-mcpu=v8" if ADK_CPU_SPARC_V8
 	default "-mcpu=ultrasparc -m64" if ADK_CPU_SPARC_V9
 	default "-march=loongson2f -Wa,-mfix-loongson2f-nop" if ADK_CPU_LOONGSON2F
-	default "-march=mips32" if ADK_CPU_MIPS32 && ADK_hard_float
-	default "-march=mips32r2" if ADK_CPU_MIPS32R2 && ADK_hard_float
-	default "-march=mips32 -msoft-float" if ADK_CPU_MIPS32 && ADK_soft_float
-	default "-march=mips32r2 -msoft-float" if ADK_CPU_MIPS32R2 && ADK_soft_float
+	default "-march=mips32" if ADK_CPU_MIPS32
+	default "-march=mips32r2" if ADK_CPU_MIPS32R2
 	default "-march=mips64" if ADK_CPU_MIPS64
 	default "-march=armv8-a" if ADK_CPU_ARMV8
 	default "-march=armv5te -mtune=iwmmxt" if ADK_CPU_XSCALE
-	default "-march=armv5te -mtune=arm926ej-s -mfloat-abi=soft" if ADK_CPU_ARM926EJ_S && ADK_soft_float
-	default "-march=armv5te -mtune=arm926ej-s -mfloat-abi=hard" if ADK_CPU_ARM926EJ_S && ADK_hard_float
-	default "-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=soft" if ADK_CPU_ARM1176JZF_S && ADK_soft_float
-	default "-march=armv6 -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard" if ADK_CPU_ARM1176JZF_S && ADK_hard_float
-	default "-mcpu=cortex-m3 -mfloat-abi=soft" if ADK_CPU_CORTEX_M3 && ADK_soft_float
-	default "-mcpu=cortex-a7 -mfloat-abi=soft" if ADK_CPU_CORTEX_A7 && ADK_soft_float
-	default "-mcpu=cortex-a7 -mfpu=neon -mfloat-abi=hard" if ADK_CPU_CORTEX_A7 && ADK_hard_float
-	default "-mcpu=cortex-a9 -mfloat-abi=soft" if ADK_CPU_CORTEX_A9 && ADK_soft_float
-	default "-mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard" if ADK_CPU_CORTEX_A9 && ADK_hard_float
+	default "-march=armv5te -mtune=arm926ej-s" if ADK_CPU_ARM926EJ_S
+	default "-march=armv6 -mtune=arm1176jzf-s" if ADK_CPU_ARM1176JZF_S
+	default "-mcpu=cortex-m3" if ADK_CPU_CORTEX_M3
+	default "-mcpu=cortex-m4" if ADK_CPU_CORTEX_M3
+	default "-mcpu=cortex-a7" if ADK_CPU_CORTEX_A7
+	default "-mcpu=cortex-a9" if ADK_CPU_CORTEX_A9
 	default "-march=armv5te" if ADK_CPU_ARMV5TE
 	default "-march=armv6" if ADK_CPU_ARMV6
 	default "-march=armv7-a" if ADK_CPU_ARMV7A

+ 6 - 2
target/linux/config/Config.in.kernel

@@ -186,13 +186,17 @@ config ADK_KERNEL_VFPv3
 	bool
 	default y if ADK_TARGET_CPU_WITH_FPU_VFP3
 
+config ADK_KERNEL_VFPv4
+	bool
+	default y if ADK_TARGET_CPU_WITH_FPU_VFP4
+
 config ADK_KERNEL_NEON
 	bool
-	default y if ADK_TARGET_CPU_WITH_FPU_NEON
+	default y if ADK_TARGET_CPU_WITH_NEON
 
 config ADK_KERNEL_MODE_NEON
 	bool
-	default y if ADK_TARGET_CPU_WITH_FPU_NEON
+	default y if ADK_TARGET_CPU_WITH_NEON
 
 config ADK_TARGET_NO_CMDLINE
 	bool "Do not builtin any kernel cmdline"

+ 8 - 0
toolchain/gcc/Makefile

@@ -143,6 +143,10 @@ ifeq ($(ADK_CPU_CORTEX_M3),y)
 GCC_CONFOPTS+=		--with-cpu=cortex-m3 --with-mode=thumb
 endif
 
+ifeq ($(ADK_CPU_CORTEX_M4),y)
+GCC_CONFOPTS+=		--with-cpu=cortex-m4 --with-mode=thumb
+endif
+
 ifeq ($(ADK_CPU_CORTEX_A7),y)
 GCC_CONFOPTS+=		--with-cpu=cortex-a7
 endif
@@ -151,6 +155,10 @@ ifeq ($(ADK_CPU_CORTEX_A9),y)
 GCC_CONFOPTS+=		--with-cpu=cortex-a9
 endif
 
+ifeq ($(ADK_CPU_XSCALE),y)
+GCC_CONFOPTS+=		--with-cpu=xscale
+endif
+
 ifeq ($(ADK_CPU_SPARC_V8),y)
 GCC_CONFOPTS+=		--with-cpu=v8
 endif