From 699c57d3767c9a5a5a69262a4b70a1f80e0bb2e2 Mon Sep 17 00:00:00 2001 From: WANG Xuerui Date: Fri, 13 May 2022 16:23:46 +0800 Subject: [PATCH] Fix ABI CFLAGS setting on new-world LoongArch See: https://bugs.gentoo.org/844013 --- Makefile.loongarch64 | 13 +++++++++++-- Makefile.system | 1 + c_check | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Makefile.loongarch64 b/Makefile.loongarch64 index fced1a946..d6cbe848c 100644 --- a/Makefile.loongarch64 +++ b/Makefile.loongarch64 @@ -1,4 +1,13 @@ ifeq ($(CORE), LOONGSON3R5) -CCOMMON_OPT += -march=loongarch64 -mabi=lp64 -FCOMMON_OPT += -march=loongarch64 -mabi=lp64 +CCOMMON_OPT += -march=loongarch64 +FCOMMON_OPT += -march=loongarch64 + +ifeq ($(LOONGARCH_CC_FLAVOR), NEW) +CCOMMON_OPT += -mabi=lp64d +FCOMMON_OPT += -mabi=lp64d +endif +ifeq ($(LOONGARCH_CC_FLAVOR), OLD) +CCOMMON_OPT += -mabi=lp64 +FCOMMON_OPT += -mabi=lp64 +endif endif diff --git a/Makefile.system b/Makefile.system index b86aafbdd..4360a861c 100644 --- a/Makefile.system +++ b/Makefile.system @@ -1702,6 +1702,7 @@ export TARGET_CORE export NO_AVX512 export NO_AVX2 export BUILD_BFLOAT16 +export LOONGARCH_CC_FLAVOR export NO_LASX export SBGEMM_UNROLL_M diff --git a/c_check b/c_check index a37e91f82..573f0e52f 100755 --- a/c_check +++ b/c_check @@ -240,8 +240,19 @@ if [ "$architecture" = "riscv64" ]; then rm -rf "$tmpd" fi +loongarch_cc_flavor="" no_lasx=0 if [ "$architecture" = "loongarch64" ]; then + # Currently there are only 2 flavors: new-world and old-world. + # They differ in ABI names accepted, so check it to avoid creating temp + # files. + loongarch_cc_flavor="NEW" + { + $compiler_name -mabi=lp64d -E -o - /dev/null >/dev/null 2>&1 + } || { + loongarch_cc_flavor="OLD" + } + tmpd=`mktemp -d` tmpf="$tmpd/a.c" # Old-world assembly flavor: LASX registers named "$xrNN", different @@ -260,6 +271,7 @@ if [ "$architecture" = "loongarch64" ]; then } || { no_lasx=1 } + rm -rf "$tmpd" fi @@ -377,6 +389,7 @@ done [ "$no_avx512" -eq 1 ] && printf "NO_AVX512=1\n" [ "$no_avx2" -eq 1 ] && printf "NO_AVX2=1\n" [ "$oldgcc" -eq 1 ] && printf "OLDGCC=1\n" + [ -n "$loongarch_cc_flavor" ] && printf "LOONGARCH_CC_FLAVOR=%s\n" "$loongarch_cc_flavor" exit 0 } @@ -408,6 +421,7 @@ done [ "$no_avx512" -eq 1 ] && printf "NO_AVX512=1\n" [ "$no_avx2" -eq 1 ] && printf "NO_AVX2=1\n" [ "$oldgcc" -eq 1 ] && printf "OLDGCC=1\n" + [ -n "$loongarch_cc_flavor" ] && printf "LOONGARCH_CC_FLAVOR=%s\n" "$loongarch_cc_flavor" } >> "$makefile" os=`echo "$os" | tr '[[:lower:]]' '[[:upper:]]'/ `