Skip to contentSkip to conversation

powerpc/85xx: select -mcpu=8540 to match -Wa, e500

PATCH Superseded Scott Wood 2 participants 4 messages Jan 9, 2013 – Jan 25, 2013 PowerPC

lore
Share & tools
lore

Scott Wood

author
#0 lore raw

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
index f36d823..d1765cd 100644
@@ -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
author
#1 lore raw

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
index f36d823..450d511 100644
@@ -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
#2 lore raw

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).

---
v2: add -misel and -mno-strict-align

 arch/powerpc/cpu/mpc85xx/config.mk |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
(quoted diff) +0 -0

config.mk
index f36d823..450d511 100644

arch/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

author
#3 lore raw

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_BOOT P5020DS
P3041DS P5020DS_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