[U-Boot-Users] [patch u-boot git 2/3] better ARM9 compiler options

Update some ARM9 builds to pass the exact CPU to GCC, when the compiler supports that specification. This stops pessimizing codegen, and removes voluminous warnings about (no) interworking support from EABI compilers. (Like CodeSourcery's ARM 2007q3 release.)
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
--- u-boot.orig/cpu/arm920t/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm920t/config.mk 2008-01-13 11:05:02.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
-PLATFORM_CPPFLAGS += -march=armv4 # ========================================================================= # # Supply options according to compiler version # # ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option,-mcpu=arm920t,-march=armv4) PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) --- u-boot.orig/cpu/arm926ejs/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm926ejs/config.mk 2008-01-13 11:04:56.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
-PLATFORM_CPPFLAGS += -march=armv4 # ========================================================================= # # Supply options according to compiler version # # ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option,-mcpu=arm926ej-s,-march=armv4) PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

Update some ARM9 builds to pass the exact CPU to GCC, when the compiler supports that specification. This stops pessimizing codegen, and removes voluminous warnings about (no) interworking support from EABI compilers. (Like CodeSourcery's ARM 2007q3 release.)
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
--- u-boot.orig/cpu/arm920t/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm920t/config.mk 2008-01-13 11:05:02.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
Why not remove the "-msoft-float" as well. U-Boot does not use soft float and why then the requirement to use a compiler which supports soft-float???
-PLATFORM_CPPFLAGS += -march=armv4 # ========================================================================= # # Supply options according to compiler version # # ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option,-mcpu=arm920t,-march=armv4) PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) --- u-boot.orig/cpu/arm926ejs/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm926ejs/config.mk 2008-01-13 11:04:56.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
-PLATFORM_CPPFLAGS += -march=armv4 # ========================================================================= # # Supply options according to compiler version # # ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option,-mcpu=arm926ej-s,-march=armv4) PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
Is this correct? ARM926EJ-S is ARMV5 architecture, not ARMV4.
Best Regards Ulf Samuelsson

On Monday 21 January 2008, Ulf Samuelsson wrote:
--- u-boot.orig/cpu/arm920t/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm920t/config.mk 2008-01-13 11:05:02.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
Why not remove the "-msoft-float" as well. U-Boot does not use soft float
It shouldn't use floating point of any flavor, in fact. But when some accident makes it try to do so, "soft" is the only potentially safe approach.
and why then the requirement to use a compiler which supports soft-float???
That change would be orthogonal. And potentially troublesome; I have seen build breakage in U-Boot that was fixed by disabling even the accidental use of hard-float code.
--- u-boot.orig/cpu/arm926ejs/config.mk 2008-01-13 10:42:55.000000000 -0800 +++ u-boot/cpu/arm926ejs/config.mk 2008-01-13 11:04:56.000000000 -0800 @@ -24,11 +24,11 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -msoft-float
-PLATFORM_CPPFLAGS += -march=armv4 # ========================================================================= # # Supply options according to compiler version # # ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option,-mcpu=arm926ej-s,-march=armv4) PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
Is this correct?
Sure. If that fallback is used, it's just a fallback to sub-optimal code generation. No CLZ, probably the wrong guesses about pipelines, and so on. But probably still safe on ancient compilers.
ARM926EJ-S is ARMV5 architecture, not ARMV4.
In fact it's ARMv5tej ... an ARMv4 superset.
The specific compiler warnings that annoyed me would vanish by passing an "armv4t" option ... that'd be OK on most CPUs that U-Boot supports. But I don't see much reason not to specify the actual CPU, and thus to get the benefit of smarter scheduling on newer compilers.
- Dave

On 12:50 Fri 18 Jan , David Brownell wrote:
Update some ARM9 builds to pass the exact CPU to GCC, when the compiler supports that specification. This stops pessimizing codegen, and removes voluminous warnings about (no) interworking support from EABI compilers. (Like CodeSourcery's ARM 2007q3 release.)
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
NOK
I've the following warning when I'm using it
nfs.c:1: warning: switch -mcpu=arm926ej-s conflicts with -march= switch sntp.c:1: warning: switch -mcpu=arm926ej-s conflicts with -march= switch part.c:0: warning: switch -mcpu=arm926ej-s conflicts with -march= switch
My toolchains
Using built-in specs. Target: arm-elf Configured with: ../configure --prefix=/opt/arm --target=arm-elf --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=/opt/arm/src/newlib-1.14.0/newlib/libc/include Thread model: single gcc version 4.1.1
Best Regards, J.
participants (4)
-
David Brownell
-
Jean-Christophe PLAGNIOL-VILLARD
-
Ulf Samuelsson
-
Woodruff, Richard