powerpc/85xx: select -mcpu=8540 to match -Wa, e500
PATCH 1/1 powerpc/85xx: select -mcpu=8540 to match -Wa, e500
This allows building with toolchains that by default target e6500.
When targetting e6500, GCC generates a two-operand form of mfcr which gas normally maps to mfocr. However, when we tell gas to target e500 rather than e6500, it rejects two-operand mfcr. Tell GCC to target a least-common-denominator e500 to match what we tell the assembler.
--- arch/powerpc/cpu/mpc85xx/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/cpu/mpc85xx/config.mk +1 -1
@@ -23,7 +23,7 @@ PLATFORM_RELFLAGS += -meabi -PLATFORM_CPPFLAGS += -ffixed-r2 -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -ffixed-r2 -mcpu=8540 -Wa,-me500 -msoft-float -mno-string # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC; # see "[PATCH,rs6000] make -mno-spe work as expected" on
Signature · 1 line
1.7.9.5
PATCH v2 1/1 powerpc/85xx: select -mcpu=8540 to match -Wa, e500
This allows building with toolchains that by default target e6500.
When targetting e6500, GCC generates a two-operand form of mfcr which gas normally maps to mfocr. However, when we tell gas to target e500 rather than e6500, it rejects two-operand mfcr. Tell GCC to target a least-common-denominator e500 to match what we tell the assembler.
-misel and -mno-strict-align are added to keep the code size from growing (it actually ends up shrinking a bit compared to -mcpu=603e, which was the default on my old toolchain).
---
v2: add -misel and -mno-strict-align
arch/powerpc/cpu/mpc85xx/config.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/powerpc/cpu/mpc85xx/config.mk +2 -1
@@ -23,7 +23,8 @@ PLATFORM_RELFLAGS += -meabi -PLATFORM_CPPFLAGS += -ffixed-r2 -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -ffixed-r2 -mcpu=8540 -misel -mno-strict-align \ + -Wa,-me500 -msoft-float -mno-string # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC; # see "[PATCH,rs6000] make -mno-spe work as expected" on
Signature · 1 line
1.7.9.5
PATCH v2 1/1 powerpc/85xx: select -mcpu=8540 to match -Wa, e500
Scott, I reverted this patch, and it fixed some build errors:
20001122-1.c:1:0: error: E500 and FPRs not supported 20010114-2.c:1:0: error: E500 and FPRs not supported make[2]: *** [/local/afleming/u-boot/build/P2020DS/post/lib_powerpc/fpu/20001122-1.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [/local/afleming/u-boot/build/P2020DS/post/lib_powerpc/fpu/20010114-2.o] Error 1
make[1]: *** [postdeps] Error 2
make: *** [/local/afleming/u-boot/build/P2020DS/post/libpost.o] Error 2
make: INTERNAL: Exiting with 4 jobserver tokens available; should be 3!
Similar errors were seen on all these boards:
P2041RDB_SRIO_PCIE_BOOT P5020DS
P3041DS P5020DS_NAND
P2020DS P3041DS_NAND P5020DS_SDCARD P2020DS_36BIT P3041DS_SDCARD P5020DS_SECURE_BOOT P2020DS_DDR2 P3041DS_SECURE_BOOT P5020DS_SPIFLASH P2020DS_SDCARD P3041DS_SPIFLASH P5020DS_SRIO_PCIE_BOOT P2020DS_SPIFLASH P3041DS_SRIO_PCIE_BOOT P5040DS P2041RDB P4080DS xpedite520x P2041RDB_NAND P4080DS_SDCARD xpedite537x P2041RDB_SDCARD P4080DS_SECURE_BOOT xpedite550x P2041RDB_SECURE_BOOT P4080DS_SPIFLASH P2041RDB_SPIFLASH P4080DS_SRIO_PCIE_BOOT
Quoted 37 lines · Scott Wood
This allows building with toolchains that by default target e6500.
When targetting e6500, GCC generates a two-operand form of mfcr which gas normally maps to mfocr. However, when we tell gas to target e500 rather than e6500, it rejects two-operand mfcr. Tell GCC to target a least-common-denominator e500 to match what we tell the assembler.
-misel and -mno-strict-align are added to keep the code size from growing (it actually ends up shrinking a bit compared to -mcpu=603e, which was the default on my old toolchain).
Signed-off-by Scott Wood <[email protected]>---
v2: add -misel and -mno-strict-alignarch/powerpc/cpu/mpc85xx/config.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)(quoted diff) +0
-0config.mk
index f36d823..450d511 100644arch/powerpc/cpu/mpc85xx/config.mk +2
-2@@ -23,7 +23,8 @@ PLATFORM_RELFLAGS += -meabi -PLATFORM_CPPFLAGS += -ffixed-r2 -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -ffixed-r2 -mcpu=8540 -misel -mno-strict-align \ + -Wa,-me500 -msoft-float -mno-string # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC; # see "[PATCH,rs6000] make -mno-spe work as expected" on --1.7.9.5
PATCH v2 1/1 powerpc/85xx: select -mcpu=8540 to match -Wa, e500
Quoted 16 lines · Andy Fleming
Scott, I reverted this patch, and it fixed some build errors:
20001122-1.c:1:0: error: E500 and FPRs not supported 20010114-2.c:1:0: error: E500 and FPRs not supported make[2]: *** [/local/afleming/u-boot/build/P2020DS/post/lib_powerpc/fpu/20001122-1.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [/local/afleming/u-boot/build/P2020DS/post/lib_powerpc/fpu/20010114-2.o] Error 1
make[1]: *** [postdeps] Error 2
make: *** [/local/afleming/u-boot/build/P2020DS/post/libpost.o] Error 2
make: INTERNAL: Exiting with 4 jobserver tokens available; should be 3!
Sigh. Patch coming to use -mcpu=e500mc when appropriate, but...
Quoted 4 lines
Similar errors were seen on all these boards:
P2041RDB_SRIO_PCIE_BOOTP5020DS
P3041DSP5020DS_NAND
Quoted 10 lines
P2020DS P3041DS_NAND P5020DS_SDCARD P2020DS_36BIT P3041DS_SDCARD P5020DS_SECURE_BOOT P2020DS_DDR2 P3041DS_SECURE_BOOT P5020DS_SPIFLASH P2020DS_SDCARD P3041DS_SPIFLASH P5020DS_SRIO_PCIE_BOOT P2020DS_SPIFLASH P3041DS_SRIO_PCIE_BOOT P5040DS P2041RDB P4080DS xpedite520x P2041RDB_NAND P4080DS_SDCARD xpedite537x P2041RDB_SDCARD P4080DS_SECURE_BOOT xpedite550x P2041RDB_SECURE_BOOT P4080DS_SPIFLASH P2041RDB_SPIFLASH P4080DS_SRIO_PCIE_BOOT
...not all of these are e500mc derivatives (P2020DS and xpedite). So it seems this patch found a bug in that some e500v2 boards are building normal FP code.
-Scott