Message ID | 20230407102721.14814-6-jiaxun.yang@flygoat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: LLVM toolchain support for more CPUs | expand |
On Fri, Apr 7, 2023 at 3:27 AM Jiaxun Yang <jiaxun.yang@flygoat.com> wrote: > > LLVM does not implement some of -march option. However those march > does not provide any special functionality in most cases, they just > serves as compiler's tuning target. Then should we change these then to be in the form: -cflags-$(CONFIG_CPU_R3000) += -march=r3000 +cflags-$(CONFIG_CPU_R3000) += -march=mips1 $(call cc-option,-mtune=r3000) > > Fallback -march CFLAG to ISA level if unsupported by toolchain so > we can get those kernel to build with LLVM. > > Reported-by: Nathan Chancellor <nathan@kernel.org> > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> > --- > arch/mips/Makefile | 30 +++++++++++++++++------------- > 1 file changed, 17 insertions(+), 13 deletions(-) > > diff --git a/arch/mips/Makefile b/arch/mips/Makefile > index 344fe5f00f7b..eab6abeaa45c 100644 > --- a/arch/mips/Makefile > +++ b/arch/mips/Makefile > @@ -148,10 +148,10 @@ cflags-y += $(call cc-option,-Wa$(comma)-mno-fix-loongson3-llsc,) > # > # CPU-dependent compiler/assembler options for optimization. > # > -cflags-$(CONFIG_CPU_R3000) += -march=r3000 > -cflags-$(CONFIG_CPU_R4300) += -march=r4300 -Wa,--trap > -cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap > -cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap > +cflags-$(CONFIG_CPU_R3000) += $(call cc-option,-march=r3000,-march=mips1) > +cflags-$(CONFIG_CPU_R4300) += $(call cc-option,-march=r4300,-march=mips3) -Wa,--trap > +cflags-$(CONFIG_CPU_R4X00) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap > +cflags-$(CONFIG_CPU_TX49XX) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap > cflags-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,--trap > cflags-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -Wa,--trap > cflags-$(CONFIG_CPU_MIPS32_R5) += -march=mips32r5 -Wa,--trap -modd-spreg > @@ -160,19 +160,21 @@ cflags-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,--trap > cflags-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,--trap > cflags-$(CONFIG_CPU_MIPS64_R5) += -march=mips64r5 -Wa,--trap > cflags-$(CONFIG_CPU_MIPS64_R6) += -march=mips64r6 -Wa,--trap > -cflags-$(CONFIG_CPU_P5600) += -march=p5600 -Wa,--trap -modd-spreg > -cflags-$(CONFIG_CPU_R5000) += -march=r5000 -Wa,--trap > -cflags-$(CONFIG_CPU_R5500) += $(call cc-option,-march=r5500,-march=r5000) \ > +cflags-$(CONFIG_CPU_P5600) += $(call cc-option,-march=p5600,-march=mips32r5) \ > + -Wa,--trap -modd-spreg > +cflags-$(CONFIG_CPU_R5000) += $(call cc-option,-march=r5000,-march=mips4) \ > -Wa,--trap > -cflags-$(CONFIG_CPU_NEVADA) += $(call cc-option,-march=rm5200,-march=r5000) \ > +cflags-$(CONFIG_CPU_R5500) += $(call cc-option,-march=r5500,-march=mips4) \ > -Wa,--trap > -cflags-$(CONFIG_CPU_RM7000) += $(call cc-option,-march=rm7000,-march=r5000) \ > +cflags-$(CONFIG_CPU_NEVADA) += $(call cc-option,-march=rm5200,-march=mips4) \ > -Wa,--trap > -cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-march=sb1,-march=r5000) \ > +cflags-$(CONFIG_CPU_RM7000) += $(call cc-option,-march=rm7000,-march=mips4) \ > + -Wa,--trap > +cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-march=sb1,-march=mips4) \ > -Wa,--trap > cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-mno-mdmx) > cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-mno-mips3d) > -cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=r8000) \ > +cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=mips4) \ > -Wa,--trap > cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += $(call cc-option,-march=octeon) -Wa,--trap > ifeq (,$(findstring march=octeon, $(cflags-$(CONFIG_CPU_CAVIUM_OCTEON)))) > @@ -181,8 +183,10 @@ endif > cflags-$(CONFIG_CAVIUM_CN63XXP1) += -Wa,-mfix-cn63xxp1 > cflags-$(CONFIG_CPU_BMIPS) += -march=mips32 -Wa,-mips32 -Wa,--trap > > -cflags-$(CONFIG_CPU_LOONGSON2E) += -march=loongson2e -Wa,--trap > -cflags-$(CONFIG_CPU_LOONGSON2F) += -march=loongson2f -Wa,--trap > +cflags-$(CONFIG_CPU_LOONGSON2E) += \ > + $(call cc-option,-march=loongson2e,-march=mips3) -Wa,--trap > +cflags-$(CONFIG_CPU_LOONGSON2F) += \ > + $(call cc-option,-march=loongson2f,-march=mips3) -Wa,--trap > # Some -march= flags enable MMI instructions, and GCC complains about that > # support being enabled alongside -msoft-float. Thus explicitly disable MMI. > cflags-$(CONFIG_CPU_LOONGSON2EF) += $(call cc-option,-mno-loongson-mmi) > -- > 2.39.2 (Apple Git-143) >
> 2023年4月7日 23:23,Nick Desaulniers <ndesaulniers@google.com> 写道: > > On Fri, Apr 7, 2023 at 3:27 AM Jiaxun Yang <jiaxun.yang@flygoat.com> wrote: >> >> LLVM does not implement some of -march option. However those march >> does not provide any special functionality in most cases, they just >> serves as compiler's tuning target. > > Then should we change these then to be in the form: > > -cflags-$(CONFIG_CPU_R3000) += -march=r3000 > +cflags-$(CONFIG_CPU_R3000) += -march=mips1 $(call cc-option,-mtune=r3000) Just tested with GCC and it seems like there are still some difference in generated code for -march=r4600 and -march=mips3 -mtune=r4600. As I’m unable to test on a real system I’d prefer just leave them as is. I’ll try to reword commit message. Thanks Jiaxun > > -- > Thanks, > ~Nick Desaulniers
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 344fe5f00f7b..eab6abeaa45c 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -148,10 +148,10 @@ cflags-y += $(call cc-option,-Wa$(comma)-mno-fix-loongson3-llsc,) # # CPU-dependent compiler/assembler options for optimization. # -cflags-$(CONFIG_CPU_R3000) += -march=r3000 -cflags-$(CONFIG_CPU_R4300) += -march=r4300 -Wa,--trap -cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap -cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap +cflags-$(CONFIG_CPU_R3000) += $(call cc-option,-march=r3000,-march=mips1) +cflags-$(CONFIG_CPU_R4300) += $(call cc-option,-march=r4300,-march=mips3) -Wa,--trap +cflags-$(CONFIG_CPU_R4X00) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap +cflags-$(CONFIG_CPU_TX49XX) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap cflags-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,--trap cflags-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -Wa,--trap cflags-$(CONFIG_CPU_MIPS32_R5) += -march=mips32r5 -Wa,--trap -modd-spreg @@ -160,19 +160,21 @@ cflags-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,--trap cflags-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,--trap cflags-$(CONFIG_CPU_MIPS64_R5) += -march=mips64r5 -Wa,--trap cflags-$(CONFIG_CPU_MIPS64_R6) += -march=mips64r6 -Wa,--trap -cflags-$(CONFIG_CPU_P5600) += -march=p5600 -Wa,--trap -modd-spreg -cflags-$(CONFIG_CPU_R5000) += -march=r5000 -Wa,--trap -cflags-$(CONFIG_CPU_R5500) += $(call cc-option,-march=r5500,-march=r5000) \ +cflags-$(CONFIG_CPU_P5600) += $(call cc-option,-march=p5600,-march=mips32r5) \ + -Wa,--trap -modd-spreg +cflags-$(CONFIG_CPU_R5000) += $(call cc-option,-march=r5000,-march=mips4) \ -Wa,--trap -cflags-$(CONFIG_CPU_NEVADA) += $(call cc-option,-march=rm5200,-march=r5000) \ +cflags-$(CONFIG_CPU_R5500) += $(call cc-option,-march=r5500,-march=mips4) \ -Wa,--trap -cflags-$(CONFIG_CPU_RM7000) += $(call cc-option,-march=rm7000,-march=r5000) \ +cflags-$(CONFIG_CPU_NEVADA) += $(call cc-option,-march=rm5200,-march=mips4) \ -Wa,--trap -cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-march=sb1,-march=r5000) \ +cflags-$(CONFIG_CPU_RM7000) += $(call cc-option,-march=rm7000,-march=mips4) \ + -Wa,--trap +cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-march=sb1,-march=mips4) \ -Wa,--trap cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-mno-mdmx) cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-mno-mips3d) -cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=r8000) \ +cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=mips4) \ -Wa,--trap cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += $(call cc-option,-march=octeon) -Wa,--trap ifeq (,$(findstring march=octeon, $(cflags-$(CONFIG_CPU_CAVIUM_OCTEON)))) @@ -181,8 +183,10 @@ endif cflags-$(CONFIG_CAVIUM_CN63XXP1) += -Wa,-mfix-cn63xxp1 cflags-$(CONFIG_CPU_BMIPS) += -march=mips32 -Wa,-mips32 -Wa,--trap -cflags-$(CONFIG_CPU_LOONGSON2E) += -march=loongson2e -Wa,--trap -cflags-$(CONFIG_CPU_LOONGSON2F) += -march=loongson2f -Wa,--trap +cflags-$(CONFIG_CPU_LOONGSON2E) += \ + $(call cc-option,-march=loongson2e,-march=mips3) -Wa,--trap +cflags-$(CONFIG_CPU_LOONGSON2F) += \ + $(call cc-option,-march=loongson2f,-march=mips3) -Wa,--trap # Some -march= flags enable MMI instructions, and GCC complains about that # support being enabled alongside -msoft-float. Thus explicitly disable MMI. cflags-$(CONFIG_CPU_LOONGSON2EF) += $(call cc-option,-mno-loongson-mmi)
LLVM does not implement some of -march option. However those march does not provide any special functionality in most cases, they just serves as compiler's tuning target. Fallback -march CFLAG to ISA level if unsupported by toolchain so we can get those kernel to build with LLVM. Reported-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> --- arch/mips/Makefile | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)