CONFIG_ALTIVEC is always enabled for CoreNet64. And if we
select CONFIG_E{5,6}500_CPU this may introduce -mcpu=e500mc64
into $CFLAGS. But Altivec and Spe options not allowed with
e500mc64, so :
CC arch/powerpc/lib/xor_vmx.o
arch/powerpc/lib/xor_vmx.c:1:0: error: AltiVec not supported in this target
make[1]: *** [arch/powerpc/lib/xor_vmx.o] Error 1
make: *** [arch/powerpc/lib] Error 2
Signed-off-by: Tiejun Chen <redacted>
---
arch/powerpc/lib/Makefile | 3 +++
1 file changed, 3 insertions(+)
@@ -40,5 +40,8 @@ obj-y += code-patching.oobj-y+=feature-fixups.oobj-$(CONFIG_FTR_FIXUP_SELFTEST)+=feature-fixups-test.o+# Altivec and Spe options not allowed with e500mc64 in GCC.+ifeq ($(call cc-option-yn,-mcpu=e500mc64),n)obj-$(CONFIG_ALTIVEC)+=xor_vmx.oCFLAGS_xor_vmx.o+=-maltivec-mabi=altivec+endif
@@ -40,5 +40,8 @@ obj-y += code-patching.oobj-y+=feature-fixups.oobj-$(CONFIG_FTR_FIXUP_SELFTEST)+=feature-fixups-test.o+# Altivec and Spe options not allowed with e500mc64 in GCC.+ifeq ($(call cc-option-yn,-mcpu=e500mc64),n)obj-$(CONFIG_ALTIVEC)+=xor_vmx.oCFLAGS_xor_vmx.o+=-maltivec-mabi=altivec+endif
This does not seem like the right fix. What if GCC supports both
-mcpu=e500mc64 and -mcpu=e6500, and we're using the latter? Or for that
matter, if we're using -mcpu=whatever-ibm-chip-has-this?
Plus, wouldn't you need to do something to prevent code in that file
from being called?
-Scott
obj-y +=3D feature-fixups.o
obj-$(CONFIG_FTR_FIXUP_SELFTEST) +=3D feature-fixups-test.o
=20
+# Altivec and Spe options not allowed with e500mc64 in GCC.
+ifeq ($(call cc-option-yn,-mcpu=3De500mc64),n)
obj-$(CONFIG_ALTIVEC) +=3D xor_vmx.o
CFLAGS_xor_vmx.o +=3D -maltivec -mabi=3Daltivec
+endif
=20
This does not seem like the right fix. What if GCC supports both
-mcpu=3De500mc64 and -mcpu=3De6500, and we're using the latter? Or =
for that
matter, if we're using -mcpu=3Dwhatever-ibm-chip-has-this?
=20
Plus, wouldn't you need to do something to prevent code in that file
from being called?
=20
-Scott
Why does -mcpu=3De500mc64 get you spe enabled? It shouldn=92t as no =
e500mc or greater part has spe. Can you try using -mno-spe -maltivec?
- k=
obj-y +=3D feature-fixups.o
obj-$(CONFIG_FTR_FIXUP_SELFTEST) +=3D feature-fixups-test.o
=20
+# Altivec and Spe options not allowed with e500mc64 in GCC.
+ifeq ($(call cc-option-yn,-mcpu=3De500mc64),n)
obj-$(CONFIG_ALTIVEC) +=3D xor_vmx.o
CFLAGS_xor_vmx.o +=3D -maltivec -mabi=3Daltivec
+endif
=20
This does not seem like the right fix. What if GCC supports both
-mcpu=3De500mc64 and -mcpu=3De6500, and we're using the latter? Or f=
or that
quoted
matter, if we're using -mcpu=3Dwhatever-ibm-chip-has-this?
=20
Plus, wouldn't you need to do something to prevent code in that file
from being called?
=20
-Scott
=20
Why does -mcpu=3De500mc64 get you spe enabled? It shouldn=E2=80=99t as=
no e500mc or greater part has spe. Can you try using -mno-spe -maltivec=
?
I don't think SPE is relevant. The problem is that GCC refuses to allow
-maltivec to be combined with -mcpu=3De500mc64. -mno-spe doesn't make a
difference.
-Scott
@@ -40,5 +40,8 @@ obj-y += code-patching.oobj-y+=feature-fixups.oobj-$(CONFIG_FTR_FIXUP_SELFTEST)+=feature-fixups-test.o+# Altivec and Spe options not allowed with e500mc64 in GCC.+ifeq ($(call cc-option-yn,-mcpu=e500mc64),n)obj-$(CONFIG_ALTIVEC)+=xor_vmx.oCFLAGS_xor_vmx.o+=-maltivec-mabi=altivec+endif
This does not seem like the right fix. What if GCC supports both
-mcpu=e500mc64 and -mcpu=e6500, and we're using the latter? Or for that
I can understand what you mean, but in current kernel, -mcpu=e500mc64 should be
excluded from -mcpu=e6500,
arch/powerpc/Makefile:
E5500_CPU := $(call cc-option,-mcpu=e500mc64,-mcpu=powerpc64)
CFLAGS-$(CONFIG_E5500_CPU) += $(E5500_CPU)
CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU))
But unfortunately, another place also use the same option,
lib/raid6/Makefile:
raid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o
...
ifeq ($(CONFIG_ALTIVEC),y)
altivec_flags := -maltivec -mabi=altivec
endif
Looks we have to do something in this common Makefile file as well, but it may
be a bit ugly if still judge some cpu-specific flags...
So what about this version?
@@ -127,7 +127,12 @@ CFLAGS-$(CONFIG_POWER5_CPU) += $(call cc-option,-mcpu=power5)CFLAGS-$(CONFIG_POWER6_CPU)+=$(callcc-option,-mcpu=power6)CFLAGS-$(CONFIG_POWER7_CPU)+=$(callcc-option,-mcpu=power7)+# Altivec and Spe options not allowed with e500mc64 in GCC.+ifeq ($(CONFIG_ALTIVEC),)E5500_CPU:=$(callcc-option,-mcpu=e500mc64,-mcpu=powerpc64)+else+E5500_CPU:=-mcpu=powerpc64+endifCFLAGS-$(CONFIG_E5500_CPU)+=$(E5500_CPU)CFLAGS-$(CONFIG_E6500_CPU)+=$(callcc-option,-mcpu=e6500,$(E5500_CPU))
Tiejun
matter, if we're using -mcpu=whatever-ibm-chip-has-this?
Plus, wouldn't you need to do something to prevent code in that file
from being called?
-Scott
CPU))
But your patch doesn't test what options we're actually using. You
tested what options the compiler supports.
But unfortunately, another place also use the same option,
=20
lib/raid6/Makefile:
=20
raid6_pq-$(CONFIG_ALTIVEC) +=3D altivec1.o altivec2.o altivec4.o altive=
c8.o
...
ifeq ($(CONFIG_ALTIVEC),y)
altivec_flags :=3D -maltivec -mabi=3Daltivec
endif
=20
Looks we have to do something in this common Makefile file as well, but=
it may=20
quoted hunk
be a bit ugly if still judge some cpu-specific flags...
=20
So what about this version?
=20