From 670506682ce0f023f44faa790256cbc37cf9cd1d Mon Sep 17 00:00:00 2001 From: Jacob Wang Date: Mon, 8 Dec 2025 12:09:38 +0800 Subject: [PATCH 1/3] [CVE]update to golang-1.25.3-2 to #IDBCYL update to golang-1.25.3-2 for CVE-2025-47906 CVE-2025-58183 Project: TC2024080204 Signed-off-by: Jacob Wang --- disable_static_tests_part1.patch | 63 ------------- disable_static_tests_part2.patch | 13 --- download | 5 +- golang.spec | 155 ++++++++++++++++++++----------- loongarch64.patches | 97 ------------------- loongarch64.tar.gz | Bin 170606 -> 0 bytes race_linux_loong64.syso | Bin 1776968 -> 0 bytes revert_dwarf5.patch | 42 +++++++++ 8 files changed, 145 insertions(+), 230 deletions(-) delete mode 100644 disable_static_tests_part1.patch delete mode 100644 disable_static_tests_part2.patch delete mode 100644 loongarch64.patches delete mode 100644 loongarch64.tar.gz delete mode 100644 race_linux_loong64.syso create mode 100644 revert_dwarf5.patch diff --git a/disable_static_tests_part1.patch b/disable_static_tests_part1.patch deleted file mode 100644 index ed09c39..0000000 --- a/disable_static_tests_part1.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/src/crypto/internal/backend/nobackend.go b/src/crypto/internal/backend/nobackend.go -index 95c2cdc..88df624 100644 ---- a/src/crypto/internal/backend/nobackend.go -+++ b/src/crypto/internal/backend/nobackend.go -@@ -2,8 +2,8 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build !linux || !cgo || android || cmd_go_bootstrap || msan || no_openssl || purego --// +build !linux !cgo android cmd_go_bootstrap msan no_openssl purego -+//go:build !linux || !cgo || android || cmd_go_bootstrap || msan || no_openssl || purego || static -+// +build !linux !cgo android cmd_go_bootstrap msan no_openssl purego static - - package backend - -diff --git a/src/crypto/internal/backend/openssl.go b/src/crypto/internal/backend/openssl.go -index 297c3cb..1a4fa10 100644 ---- a/src/crypto/internal/backend/openssl.go -+++ b/src/crypto/internal/backend/openssl.go -@@ -2,8 +2,8 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build linux && cgo && !android && !gocrypt && !cmd_go_bootstrap && !msan && !no_openssl && !purego --// +build linux,cgo,!android,!gocrypt,!cmd_go_bootstrap,!msan,!no_openssl,!purego -+//go:build linux && cgo && !android && !gocrypt && !cmd_go_bootstrap && !msan && !no_openssl && !purego && !static -+// +build linux,cgo,!android,!gocrypt,!cmd_go_bootstrap,!msan,!no_openssl,!purego,!static - - // Package openssl provides access to OpenSSLCrypto implementation functions. - // Check the variable Enabled to find out whether OpenSSLCrypto is available. -diff --git a/src/crypto/internal/boring/goboringcrypto.h b/src/crypto/internal/boring/goboringcrypto.h -index 2b11049..dec1cb2 100644 ---- a/src/crypto/internal/boring/goboringcrypto.h -+++ b/src/crypto/internal/boring/goboringcrypto.h -@@ -1,4 +1,5 @@ - // Copyright 2017 The Go Authors. All rights reserved. -+// +build !static - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - -diff --git a/src/crypto/internal/boring/syso/syso.go b/src/crypto/internal/boring/syso/syso.go -index b338754..db5ea1e 100644 ---- a/src/crypto/internal/boring/syso/syso.go -+++ b/src/crypto/internal/boring/syso/syso.go -@@ -2,7 +2,7 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build boringcrypto -+//go:build boringcrypto && !static - - // This package only exists with GOEXPERIMENT=boringcrypto. - // It provides the actual syso file. -diff --git a/src/vendor/github.com/golang-fips/openssl/v2/goopenssl.h b/src/vendor/github.com/golang-fips/openssl/v2/goopenssl.h -index e488bf2..e776aa4 100644 ---- a/src/vendor/github.com/golang-fips/openssl/v2/goopenssl.h -+++ b/src/vendor/github.com/golang-fips/openssl/v2/goopenssl.h -@@ -1,4 +1,5 @@ - // This header file describes the OpenSSL ABI as built for use in Go. -+// +build !static - - #include // size_t - diff --git a/disable_static_tests_part2.patch b/disable_static_tests_part2.patch deleted file mode 100644 index 494de22..0000000 --- a/disable_static_tests_part2.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go -index 36a20e8b2a..8c2dd1b44b 100644 ---- a/src/cmd/dist/test.go -+++ b/src/cmd/dist/test.go -@@ -1125,7 +1125,7 @@ func (t *tester) registerCgoTests(heading string) { - } else { - panic("unknown linkmode with static build: " + linkmode) - } -- gt.tags = append(gt.tags, "static") -+ gt.tags = append(gt.tags, "static", "no_openssl") - } - gt.ldflags = strings.Join(ldflags, " ") - diff --git a/download b/download index c5498ce..135984b 100644 --- a/download +++ b/download @@ -1,2 +1,3 @@ -dd59aabbd1bb61bff33a2240c3218a93 go1.24.6-1-openssl-fips.tar.gz -0c22bd8169e8c49f7f94d7e0fedd1034 go1.24.6.tar.gz +63bdea64f3af91ff38b3ee1b6f416d0b compiler-rt-18.1.8.src.tar.xz +94478ac15721619ef845f444d95b1cd6 go1.25.3-1-openssl-fips.tar.gz +bc5e8addeacf58cb4a66dd2fd7b69ced go1.25.3.tar.gz diff --git a/golang.spec b/golang.spec index a2fdb6b..8fdfa17 100644 --- a/golang.spec +++ b/golang.spec @@ -1,4 +1,3 @@ -%define anolis_release .0.1 %undefine _missing_build_ids_terminate_build %global bcond_with strict_fips @@ -30,20 +29,20 @@ # Define GOROOT macros %global goroot %{_prefix}/lib/%{name} %global gopath %{_datadir}/gocode -%global golang_arches x86_64 aarch64 ppc64le s390x loongarch64 +%global golang_arches x86_64 aarch64 ppc64le s390x %global golibdir %{_libdir}/%{name} # Golang build options. # Build golang using external/internal(close to cgo disabled) linking. -%ifarch x86_64 ppc64le %{arm} aarch64 s390x loongarch64 +%ifarch x86_64 ppc64le %{arm} aarch64 s390x %global external_linker 1 %else %global external_linker 0 %endif # Build golang with cgo enabled/disabled(later equals more or less to internal linking). -%ifarch x86_64 ppc64le %{arm} aarch64 s390x loongarch64 +%ifarch x86_64 ppc64le %{arm} aarch64 s390x %global cgo_enabled 1 %else %global cgo_enabled 0 @@ -57,7 +56,7 @@ %endif # Controls what ever we fail on failed tests -%ifarch %{arm} ppc64le s390x +%ifarch x86_64 %{arm} ppc64le s390x %global fail_on_tests 1 %else %global fail_on_tests 0 @@ -70,6 +69,7 @@ %global shared 0 %endif +# Pre build std lib with -race enabled # Disabled due to 1.20 new cache usage, see 1.20 upstream release notes %global race 0 @@ -92,18 +92,17 @@ %global gohostarch s390x %endif -%ifarch loongarch64 -%global gohostarch loong64 -%endif - -%global go_api 1.24 -%global version 1.24.6 +%global go_api 1.25 +%global go_version 1.25.3 +%global version %{go_version} %global pkg_release 1 +# LLVM compiler-rt version for race detector +%global llvm_compiler_rt_version 18.1.8 + Name: golang Version: %{version} -Release: 1%{anolis_release}%{?dist} - +Release: 2%{?dist} Summary: The Go Programming Language # source tree includes several copies of Mark.Twain-Tom.Sawyer.txt under Public Domain License: BSD and Public Domain @@ -115,13 +114,10 @@ Source0: https://github.com/golang/go/archive/refs/tags/go%{version}.tar. # located at https://github.com/golang-fips/openssl-fips, # And pre-genetated patches to set up the module for a given # Go release are located at https://github.com/golang-fips/go. -Source1: https://github.com/golang-fips/go/archive/refs/tags/go%{version}-%{pkg_release}-openssl-fips.tar.gz +Source1: https://github.com/golang-fips/go/archive/refs/tags/go%{version}-%{pkg_release}-openssl-fips.tar.gz # make possible to override default traceback level at build time by setting build tag rpm_crashtraceback Source2: fedora.go - -Source3: loongarch64.tar.gz -Source4: loongarch64.patches -Source5: race_linux_loong64.syso +Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{llvm_compiler_rt_version}/compiler-rt-%{llvm_compiler_rt_version}.src.tar.xz # The compiler is written in Go. Needs go(1.4+) compiler for build. # Actual Go based bootstrap compiler provided by above source. @@ -140,9 +136,14 @@ BuildRequires: openssl-devel # for tests BuildRequires: pcre-devel, glibc-static, perl +# Necessary for building llvm address sanitizer for Go race detector +BuildRequires: libstdc++-devel +BuildRequires: clang + Provides: go = %{version}-%{release} Requires: %{name}-bin = %{version}-%{release} Requires: %{name}-src = %{version}-%{release} +Requires: %{name}-race = %{version}-%{release} Requires: openssl-devel Requires: diffutils @@ -151,10 +152,10 @@ Patch221: fix_TestScript_list_std.patch Patch1939923: skip_test_rhbz1939923.patch -Patch2: disable_static_tests_part1.patch -Patch3: disable_static_tests_part2.patch -Patch5: modify_go.env.patch -Patch7: skip_TestCrashDumpsAllThreads.patch +Patch4: modify_go.env.patch +Patch6: skip_TestCrashDumpsAllThreads.patch +# Related: https://sourceware.org/bugzilla/show_bug.cgi?id=33204 +Patch7: revert_dwarf5.patch # Having documentation separate was broken Obsoletes: %{name}-docs < 1.1-4 @@ -162,9 +163,6 @@ Obsoletes: %{name}-docs < 1.1-4 # RPM can't handle symlink -> dir with subpackages, so merge back Obsoletes: %{name}-data < 1.1.1-4 -# We don't build golang-race anymore, rhbz#2230599 -Obsoletes: golang-race < 1.20.0 - # These are the only RHEL/Fedora architectures that we compile this package for ExclusiveArch: %{golang_arches} @@ -235,15 +233,23 @@ Summary: Golang shared object libraries %{summary}. %endif -%if %{race} -%package race -Summary: Golang std library with -race enabled +%package -n go-toolset +Summary: Package that installs go-toolset +Requires: %{name} = %{version}-%{release} +%ifarch x86_64 aarch64 ppc64le +Requires: delve +%endif + +%description -n go-toolset +This is the main package for go-toolset. + +%package race +Summary: Race detetector library object files. Requires: %{name} = %{version}-%{release} %description race -%{summary} -%endif +Binary library objects for Go's race detector. %prep %setup -q -n go-go%{version} @@ -255,7 +261,7 @@ patch_dir="../go-go%{version}-%{pkg_release}-openssl-fips/patches" # Add --no-backup-if-mismatch option to avoid creating .orig temp files for p in "$patch_dir"/*.patch; do echo "Applying $p" - patch -p1 --no-backup-if-mismatch < $p + patch --no-backup-if-mismatch -p1 < $p done # Configure crypto tests @@ -264,23 +270,16 @@ ln -s ../go-go%{version} go ./scripts/configure-crypto-tests.sh popd -## Apply loongarch64 patches -tar -xvf %{SOURCE3} -for p in $(cat %{SOURCE4}); do - patch -p1 -s -i loongarch64/$p -done - -## Delete loongarch64 directory -rm -rf loongarch64 - %autopatch -p1 sed -i '1s/$/ (%{?rhel:Red Hat} %{version}-%{release})/' VERSION -# Delete the boring binary blob. We use the system OpenSSL instead. -rm -rf src/crypto/internal/boring/syso cp %{SOURCE2} ./src/runtime/ -cp %{SOURCE5} ./src/runtime/race +# Delete the bundled race detector objects. +find ./src/runtime/race/ -name "race_*.syso" -exec rm {} \; + +# Delete the boring binary blob. We use the system OpenSSL instead. +rm -rf src/crypto/internal/boring/syso %build set -xe @@ -289,6 +288,40 @@ uname -a cat /proc/cpuinfo cat /proc/meminfo +# Build race detector .syso's from llvm sources +# The race detector requests a -fno-exceptions build. +%global tsan_buildflags %(rpm -D 'toolchain clang' -E '%{optflags}' | sed 's/-fexceptions//') +%global tsan_optflag -O1 +mkdir ../llvm + +tar -xf %{SOURCE3} -C ../llvm +tsan_go_dir="../llvm/compiler-rt-%{llvm_compiler_rt_version}.src/lib/tsan/go" + +# The script uses uname -a and grep to set the GOARCH. This +# is unreliable and can get the wrong architecture in +# circumstances like cross-architecture emulation. We fix it +# by just reading GOARCH directly from Go. +export GOARCH=$(go env GOARCH) + +%ifarch x86_64 +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang GOAMD64=v3 ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_amd64.syso ./src/runtime/race/internal/amd64v3/race_linux.syso + +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang GOAMD64=v1 ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_amd64.syso ./src/runtime/race/internal/amd64v1/race_linux.syso + +%else +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_%{gohostarch}.syso ./src/runtime/race/race_linux_%{gohostarch}.syso +%endif + + # bootstrap compiler GOROOT %if !%{golang_bootstrap} export GOROOT_BOOTSTRAP=/ @@ -392,7 +425,7 @@ pushd $RPM_BUILD_ROOT%{goroot} echo "%%{goroot}/$file" >> $shared_list echo "%%{golibdir}/$(basename $file)" >> $shared_list done - + find pkg/*_dynlink/ -type d -printf '%%%dir %{goroot}/%p\n' >> $shared_list find pkg/*_dynlink/ ! -type d -printf '%{goroot}/%p\n' >> $shared_list %endif @@ -466,12 +499,7 @@ export GO_TEST_RUN="" %if %{fail_on_tests} -# TestEd25519Vectors needs network connectivity but it should be cover by -# this test https://pkgs.devel.redhat.com/cgit/tests/golang/tree/Regression/internal-testsuite/runtest.sh#n127 -# Disable by Anolis OS -export DISABLE_BoringCertAlgs_TEST="-run=!^TestBoringCertAlgs$" - -./run.bash --no-rebuild -v -v -v -k $GO_TEST_RUN $DISABLE_BoringCertAlgs_TEST +./run.bash --no-rebuild -v -v -v -k $GO_TEST_RUN # Run tests with FIPS enabled. export GOLANG_FIPS=1 @@ -484,7 +512,7 @@ pushd crypto popd # Run all FIPS specific TLS tests pushd crypto/tls - go test -v -run "Boring" $DISABLE_BoringCertAlgs_TEST + go test -v -run "Boring" popd %else ./run.bash --no-rebuild -v -v -v -k || : @@ -525,8 +553,13 @@ cd .. # prelink blacklist %{_sysconfdir}/prelink.conf.d - %files -f go-src.list src +%ifarch x86_64 +%exclude %{goroot}/src/runtime/race/internal/amd64v1/race_linux.syso +%exclude %{goroot}/src/runtime/race/internal/amd64v3/race_linux.syso +%else +%exclude %{goroot}/src/runtime/race/race_linux_%{gohostarch}.syso +%endif %files -f go-docs.list docs @@ -543,10 +576,22 @@ cd .. %files -f go-shared.list shared %endif +%files -n go-toolset + +%files race +%ifarch x86_64 +%{goroot}/src/runtime/race/internal/amd64v1/race_linux.syso +%{goroot}/src/runtime/race/internal/amd64v3/race_linux.syso +%else +%{goroot}/src/runtime/race/race_linux_%{gohostarch}.syso +%endif + %changelog -* Tue Aug 19 2025 Chang Gao - 1.24.6-1.0.1 -- disable DISABLE_BoringCertAlgs_TEST test -- Add LoongArch64 support +* Wed Oct 29 2025 David Benoit - 1.25.3-1 +- Update to Go 1.25.3 (sync from CentOS Stream 9) +- Build go-toolset as a subpackage +- Preserve GOAMD64=v1 for RHEL 8 +- Resolves: RHEL-121223 * Wed Aug 13 2025 David Benoit - 1.24.6-1 - Update to Go 1.24.6 (fips-1) diff --git a/loongarch64.patches b/loongarch64.patches deleted file mode 100644 index 0cc0a1d..0000000 --- a/loongarch64.patches +++ /dev/null @@ -1,97 +0,0 @@ -0001-ABI1.0-fix-runtime-defs_linux_loong64.patch -0002-ABI1.0-cmd-internal-obj-loong64-cmd-link-internal-sw.patch -0003-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch -0004-ABI1.0-fix-mabi-to-lp64-for-loong64.patch -0005-ABI1.0-fix-test-issue11656-for-loong64.patch -0006-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch -0007-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch -0008-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch -0009-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch -0010-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch -0011-ABI1.0-cmd-internal-objabi-fix-internal-linker-missi.patch -0012-cmd-link-internal-add-support-for-internal-linking-o.patch -0013-internal-platform-cmd-dist-enable-internal-linking-s.patch -0014-cmd-link-internal-loong64-process-new-relocations-on.patch -0015-cmd-link-internal-loong64-fix-internal-liner-impleme.patch -0016-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch -0017-cmd-runtime-enable-race-detector-on-loong64.patch -0018-runtime-delete-on-register-ABI-fallback-path-for-rac.patch -0019-cmd-internal-obj-loong64-remove-unused-register-alia.patch -0020-internal-bytealg-optimize-IndexByte-and-IndexByteStr.patch -0021-internal-bytealg-optimize-memequal-and-memequal_varl.patch -0022-internal-bytealg-optimize-Index-and-IndexString-func.patch -0023-cmd-internal-obj-loong64-optimize-immediate-loading.patch -0024-math-big-optimize-addVV-function-for-loong64.patch -0025-math-big-optimize-addVW-function-for-loong64.patch -0026-math-big-optimize-subVV-function-for-loong64.patch -0027-math-big-optimize-subVW-function-for-loong64.patch -0028-math-big-optimize-shlVU-function-for-loong64.patch -0029-math-big-optimize-shrVU-function-for-loong64.patch -0030-math-big-optimize-mulAddVWW-function-for-loong64.patch -0031-math-big-optimize-addMulVVW-function-for-loong64.patch -0032-cmd-compile-fold-constant-shift-with-extension-on-lo.patch -0033-test-codegen-fix-the-matching-instructions-inside-pl.patch -0034-cmd-compile-optimize-shifts-of-int32-and-uint32-on-l.patch -0035-cmd-compile-simplify-bounded-shift-on-loong64.patch -0036-runtime-use-ABIInternal-on-syscall-and-other-sys.stu.patch -0037-runtime-use-correct-memory-barrier-in-exitThread-fun.patch -0038-cmd-internal-obj-loong64-add-V-XV-SEQI-V-XV-.-AND-OR.patch -0039-cmd-internal-obj-loong64-add-V-XV-ADD-SUB-.-B-H-W-D-.patch -0040-cmd-internal-obj-loong64-add-V-XV-ILV-L-H-.-B-H-W-D-.patch -0041-cmd-internal-obj-loong64-add-V-XV-SLL-SRL-SRA-ROTR-I.patch -0042-cmd-internal-obj-loong64-add-V-XV-FSQRT-FRECIP-FRSQR.patch -0043-cmd-internal-obj-loong64-add-V-XV-NEG-B-H-W-V-instru.patch -0044-cmd-internal-obj-loong64-add-V-XV-MUL-B-H-W-V-and-V-.patch -0045-cmd-internal-obj-loong64-add-V-XV-DIV-B-H-W-V-U-and-.patch -0046-cmd-internal-obj-loong64-add-V-XV-BITCLR-BITSET-BITR.patch -0047-crypto-chacha20-add-loong64-SIMD-implementation.patch -0048-internal-bytealg-optimize-Count-and-CountString-func.patch -0049-internal-bytealg-optimize-Count-String-in-loong64.patch -0050-cmd-internal-obj-cmd-asm-reclassify-32-bit-immediate.patch -0051-crypto-internal-poly1305-implement-function-update-i.patch -0052-runtime-optimize-the-implementation-of-memclrNoHeapP.patch -0053-runtime-race-add-the-implementation-of-atomic.-Or-An.patch -0054-cmd-internal-obj-loong64-add-F-MAXA-MINA-.-S-D-instr.patch -0055-math-implement-func-archExp-and-archExp2-in-assembly.patch -0056-math-implement-func-archLog-in-assembly-on-loong64.patch -0057-cmd-go-internal-work-allow-a-bunch-of-loong64-specif.patch -0058-runtime-cgo-use-standard-ABI-call-setg_gcc-in-crossc.patch -0059-cmd-internal-obj-add-new-32-bits-immediate-classes-o.patch -0060-crypto-internal-fips140-edwards25519-implement-func-.patch -0061-cmd-intarnal-obj-loong64-Add-optab-entry-to-omit-the.patch -0062-cmd-intarnal-obj-loong64-Add-optab-entry-to-omit-the.patch -0063-cmd-internal-obj-loong64-add-V-XV-ADD-SUB-.-B-H-W-D-.patch -0064-internal-bytealg-optimize-Count-String-in-loong64.patch -0065-cmd-link-remove-trampoline-for-plt-symbol.patch -0066-runtime-runtime-cgo-use-libc-for-sigaction-syscalls-.patch -0067-runtime-add-function-runtime.cgoSigtramp-support-on-.patch -0068-internal-cpu-use-correct-variable-when-parsing-CPU-f.patch -0069-cmd-internal-obj-loong64-add-X-VMULW-EV-OD-.-H.B-W.H.patch -0070-cmd-internal-obj-loong64-add-X-VSHUF4I.-B-H-W-D-inst.patch -0071-runtime-log-profile-when-mutex-profile-test-fails.patch -0072-runtime-optimizing-memclrNoHeapPointers-implementati.patch -0073-runtime-delete-redundant-branch-jumps-in-memclrNoHea.patch -0074-cmd-compile-set-unalignedOK-to-make-memcombine-work-.patch -0075-runtime-optimize-the-function-memmove-using-SIMD-on-.patch -0076-internal-chacha8rand-implement-func-block-in-assembl.patch -0077-cmd-internal-obj-loong64-cmd-asm-add-V-XV-SET-EQ-NE-.patch -0078-runtime-optimize-the-function-memequal-using-SIMD-on.patch -0079-cmd-internal-obj-add-new-assembly-format-for-BFPT-an.patch -0080-runtime-internal-fuzz-add-comparison-tracing-for-lib.patch -0081-crypto-sha256-improve-performance-of-loong64.patch -0082-crypto-sha512-improve-performance-of-loong64.patch -0083-cmd-internal-obj-loong64-add-X-VFRINT-RNE-RZ-RP-RM-..patch -0084-cmd-internal-obj-loong64-add-X-VF-ADD-SUB-MUL-DIV-.-.patch -0085-runtime-optimize-the-function-indexbyte-using-SIMD-o.patch -0086-internal-bytealg-optimize-the-function-compare-using.patch -0087-cmd-internal-obj-loong64-add-X-VFCLASS.-S-D-instruct.patch -0088-cmd-intarnal-obj-add-new-assembly-format-for-VANDB-o.patch -0089-cmd-compile-fold-negation-into-addition-subtraction-.patch -0090-cmd-internal-obj-loong64-Add-preld-x-instructions-su.patch -0091-cmd-compile-add-prefetch-intrinsic-support-on-loong6.patch -0092-cmd-compile-fix-the-implementation-of-NORconst-on-lo.patch -0093-crypto-subtle-optimize-function-xorBytes-using-SIMD-.patch -0094-cmd-compile-add-rules-about-ORN-and-ANDN.patch -0095-runtime-check-for-gsignal-in-racecall-on-loong64.patch -0096-crypto-sha256-use-const-table-for-key-loading-on-loo.patch -0097-crypto-sha512-use-const-table-for-key-loading-on-loo.patch diff --git a/loongarch64.tar.gz b/loongarch64.tar.gz deleted file mode 100644 index e69c041d3349753ce7cb55cd3cefeb0017f53971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170606 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%0APR)TmV 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%0Ds&4Tg!l#_%5>$)9Ep%+BBm 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 jNMxzO&)eUhpU=*Vv^PPd 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 z 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 z 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 E1NDIUZvX%Q literal 0 HcmV?d00001 -- Gitee

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 lZ2CRv3r8Q<9} +Date: Wed, 27 Aug 2025 16:18:09 +0200 +Subject: [PATCH] Revert DWARF5 as default, use DWARF4 + +--- + src/internal/buildcfg/exp.go | 13 +------------ + 1 file changed, 1 insertion(+), 12 deletions(-) + +diff --git a/src/internal/buildcfg/exp.go b/src/internal/buildcfg/exp.go +index 689ca8ce58..b2ea97481b 100644 +--- a/src/internal/buildcfg/exp.go ++++ b/src/internal/buildcfg/exp.go +@@ -67,24 +67,13 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) { + regabiSupported = true + } + +- // Older versions (anything before V16) of dsymutil don't handle +- // the .debug_rnglists section in DWARF5. See +- // https://github.com/golang/go/issues/26379#issuecomment-2677068742 +- // for more context. This disables all DWARF5 on mac, which is not +- // ideal (would be better to disable just for cases where we know +- // the build will use external linking). In the GOOS=aix case, the +- // XCOFF format (as far as can be determined) doesn't seem to +- // support the necessary section subtypes for DWARF-specific +- // things like .debug_addr (needed for DWARF 5). +- dwarf5Supported := (goos != "darwin" && goos != "ios" && goos != "aix") +- + baseline := goexperiment.Flags{ + RegabiWrappers: regabiSupported, + RegabiArgs: regabiSupported, + AliasTypeParams: true, + SwissMap: true, + SyncHashTrieMap: true, +- Dwarf5: dwarf5Supported, ++ Dwarf5: false, + } + + // Start with the statically enabled set of experiments. +-- +2.51.0 + -- Gitee From 5db66fa1bccf36d78b01ab7107a769ace2461854 Mon Sep 17 00:00:00 2001 From: liuxiaoping Date: Tue, 30 May 2023 09:48:19 +0800 Subject: [PATCH 2/3] spec:disable DISABLE_BoringCertAlgs_TEST test --- golang.spec | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/golang.spec b/golang.spec index 8fdfa17..6ed03de 100644 --- a/golang.spec +++ b/golang.spec @@ -1,3 +1,4 @@ +%define anolis_release .0.1 %undefine _missing_build_ids_terminate_build %global bcond_with strict_fips @@ -56,7 +57,7 @@ %endif # Controls what ever we fail on failed tests -%ifarch x86_64 %{arm} ppc64le s390x +%ifarch %{arm} ppc64le s390x %global fail_on_tests 1 %else %global fail_on_tests 0 @@ -102,7 +103,8 @@ Name: golang Version: %{version} -Release: 2%{?dist} +Release: 2%{anolis_release}%{?dist} + Summary: The Go Programming Language # source tree includes several copies of Mark.Twain-Tom.Sawyer.txt under Public Domain License: BSD and Public Domain @@ -499,7 +501,9 @@ export GO_TEST_RUN="" %if %{fail_on_tests} -./run.bash --no-rebuild -v -v -v -k $GO_TEST_RUN +# Disable by Anolis OS +export DISABLE_BoringCertAlgs_TEST="-run=!^TestBoringCertAlgs$" +./run.bash --no-rebuild -v -v -v -k $GO_TEST_RUN $DISABLE_BoringCertAlgs_TEST # Run tests with FIPS enabled. export GOLANG_FIPS=1 @@ -512,7 +516,7 @@ pushd crypto popd # Run all FIPS specific TLS tests pushd crypto/tls - go test -v -run "Boring" + go test -v -run "Boring" $DISABLE_BoringCertAlgs_TEST popd %else ./run.bash --no-rebuild -v -v -v -k || : @@ -587,6 +591,9 @@ cd .. %endif %changelog +* Mon Dec 08 2025 Chang Gao - 1.25.3-1.0.1 +- disable DISABLE_BoringCertAlgs_TEST test + * Wed Oct 29 2025 David Benoit - 1.25.3-1 - Update to Go 1.25.3 (sync from CentOS Stream 9) - Build go-toolset as a subpackage -- Gitee From cddec036134ddab05dc99a61ee5ccbc40dea6163 Mon Sep 17 00:00:00 2001 From: chenguoqi Date: Tue, 16 Dec 2025 19:26:05 +0800 Subject: [PATCH 3/3] Add loongarch64 re-support --- ...BI1.0-fix-runtime-defs_linux_loong64.patch | 188 ++ ...cgo-test-sigaltstack-size-on-loong64.patch | 54 + ...-ABI1.0-fix-mabi-to-lp64-for-loong64.patch | 82 + ...I1.0-fix-test-issue11656-for-loong64.patch | 27 + ...ck-growth-after-fork-in-runtime.sigf.patch | 26 + ...ix-the-vDSO-symbol-version-for-kerne.patch | 43 + ...efinition-of-members-in-the-PtraceRe.patch | 47 + ...correct-the-dynamic-linker-path-of-l.patch | 28 + ...efinition-of-members-in-the-sigconte.patch | 164 ++ ...nternal-testsanitizers-skip-tsan8-on.patch | 29 + ...ch-the-relocations-to-ABI1.0-s-style.patch | 887 ++++++++++ ...ue-to-git-unknown-option-object-form.patch | 110 ++ ...e-const-table-for-key-loading-on-loo.patch | 256 +++ ...e-const-table-for-key-loading-on-loo.patch | 277 +++ ...ntime-add-reference-to-debugPinnerV1.patch | 32 + ...-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch | 258 +++ ...-negation-into-multiplication-on-loo.patch | 160 ++ ...rand-replace-WORD-with-instruction-V.patch | 67 + ...d-extending-when-already-sufficientl.patch | 187 ++ ...-loong64-adjust-the-case-number-of-t.patch | 80 + ...-optimize-Index-IndexString-on-loong.patch | 455 +++++ ...-loong64-add-support-for-FSEL-instru.patch | 104 ++ ...rnal-ssa-fix-typo-in-LOONG64Ops.go-c.patch | 27 + ...-loong64-add-new-instructions-ALSL-W.patch | 172 ++ ...mize-multiplication-rules-on-loong64.patch | 749 ++++++++ ...rnal-ssa-optimise-more-branches-with.patch | 644 +++++++ ...rnal-ssa-use-BEQ-BNE-to-optimize-the.patch | 83 + ...rnal-ssa-eliminate-unnecessary-exten.patch | 266 +++ ...rnal-optimize-SGT-operation-using-R0.patch | 196 +++ ...rnal-optimize-multiplication-use-new.patch | 542 ++++++ ...ert-branch-with-zero-to-more-optimal.patch | 182 ++ ...rnal-optimizing-add-sll-rule-using-A.patch | 61 + ...-restore-all-fcc-registers-in-async-.patch | 104 ++ ...dd-Mul2-and-DivPow2-test-for-loong64.patch | 54 + ...est-codegen-add-Mul-test-for-loong64.patch | 62 + ...-sqrt-abs-and-copysign-test-for-loon.patch | 71 + ...mize-some-patterns-into-revb2h-revb4.patch | 611 +++++++ ...imize-rule-x-x-c-to-x-c-1-on-loong64.patch | 129 ++ ...zero-register-instead-of-specialized.patch | 1507 +++++++++++++++++ ...e-absorb-NEGV-into-branch-on-loong64.patch | 71 + ...ompile-simplify-zerorange-on-loong64.patch | 81 + ...nternal-obj-loong64-simplify-buildop.patch | 83 + ...-atomic-reset-wrong-jump-target-in-C.patch | 61 + ...-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch | 222 +++ ...lify-the-support-for-32bit-high-mult.patch | 187 ++ ...-loong64-fix-the-usage-of-offset-in-.patch | 181 ++ ...lify-memory-load-and-store-operation.patch | 212 +++ ...-loong64-add-ADDU16I.D-instruction-s.patch | 155 ++ ...-and-restore-R31-for-crosscall1-on-l.patch | 88 + ...lify-specific-addition-operations-us.patch | 154 ++ ...mize-loads-from-readonly-globals-int.patch | 231 +++ ...d-constant-in-ADDshift-op-on-loong64.patch | 93 + ...-loong64-use-the-MOVVP-instruction-t.patch | 50 + ...pile-implement-jump-table-on-loong64.patch | 236 +++ ...ernal-obj-fix-a-remote-call-failure-.patch | 63 + ...-loong64-add-MULW.D.W-U-instructions.patch | 100 ++ ...-loong64-optimize-duplicate-optab-en.patch | 127 ++ ...-loong64-add-aliases-to-32-bit-arith.patch | 262 +++ ...-loong64-remove-the-incorrect-unsign.patch | 258 +++ ...-cmd-asm-reclassify-the-offset-of-me.patch | 581 +++++++ golang.spec | 117 +- race_linux_loong64.syso | Bin 0 -> 1814096 bytes 62 files changed, 12629 insertions(+), 5 deletions(-) create mode 100644 0001-ABI1.0-fix-runtime-defs_linux_loong64.patch create mode 100644 0002-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch create mode 100644 0003-ABI1.0-fix-mabi-to-lp64-for-loong64.patch create mode 100644 0004-ABI1.0-fix-test-issue11656-for-loong64.patch create mode 100644 0005-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch create mode 100644 0006-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch create mode 100644 0007-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch create mode 100644 0008-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch create mode 100644 0009-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch create mode 100644 0010-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch create mode 100644 0011-ABI1.0-switch-the-relocations-to-ABI1.0-s-style.patch create mode 100644 0013-ABI1.0-skipped-due-to-git-unknown-option-object-form.patch create mode 100644 0014-crypto-sha256-use-const-table-for-key-loading-on-loo.patch create mode 100644 0015-crypto-sha512-use-const-table-for-key-loading-on-loo.patch create mode 100644 0016-runtime-add-reference-to-debugPinnerV1.patch create mode 100644 0017-cmd-internal-obj-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch create mode 100644 0018-cmd-compile-fold-negation-into-multiplication-on-loo.patch create mode 100644 0019-internal-chacha8rand-replace-WORD-with-instruction-V.patch create mode 100644 0020-cmd-compile-avoid-extending-when-already-sufficientl.patch create mode 100644 0021-cmd-internal-obj-loong64-adjust-the-case-number-of-t.patch create mode 100644 0022-internal-bytealg-optimize-Index-IndexString-on-loong.patch create mode 100644 0023-cmd-internal-obj-loong64-add-support-for-FSEL-instru.patch create mode 100644 0024-cmd-compile-internal-ssa-fix-typo-in-LOONG64Ops.go-c.patch create mode 100644 0025-cmd-internal-obj-loong64-add-new-instructions-ALSL-W.patch create mode 100644 0026-cmd-compile-optimize-multiplication-rules-on-loong64.patch create mode 100644 0027-cmd-compile-internal-ssa-optimise-more-branches-with.patch create mode 100644 0028-cmd-compile-internal-ssa-use-BEQ-BNE-to-optimize-the.patch create mode 100644 0029-cmd-compile-internal-ssa-eliminate-unnecessary-exten.patch create mode 100644 0030-cmd-compile-internal-optimize-SGT-operation-using-R0.patch create mode 100644 0031-cmd-compile-internal-optimize-multiplication-use-new.patch create mode 100644 0032-cmd-compile-convert-branch-with-zero-to-more-optimal.patch create mode 100644 0033-cmd-compile-internal-optimizing-add-sll-rule-using-A.patch create mode 100644 0034-runtime-save-and-restore-all-fcc-registers-in-async-.patch create mode 100644 0035-test-codegen-add-Mul2-and-DivPow2-test-for-loong64.patch create mode 100644 0036-test-codegen-add-Mul-test-for-loong64.patch create mode 100644 0037-test-codegen-add-sqrt-abs-and-copysign-test-for-loon.patch create mode 100644 0038-cmd-compile-optimize-some-patterns-into-revb2h-revb4.patch create mode 100644 0039-cmd-compile-optimize-rule-x-x-c-to-x-c-1-on-loong64.patch create mode 100644 0040-cmd-compile-use-zero-register-instead-of-specialized.patch create mode 100644 0041-cmd-compile-absorb-NEGV-into-branch-on-loong64.patch create mode 100644 0042-cmd-compile-simplify-zerorange-on-loong64.patch create mode 100644 0043-cmd-internal-obj-loong64-simplify-buildop.patch create mode 100644 0044-internal-runtime-atomic-reset-wrong-jump-target-in-C.patch create mode 100644 0045-cmd-internal-obj-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch create mode 100644 0046-cmd-compile-simplify-the-support-for-32bit-high-mult.patch create mode 100644 0047-cmd-internal-obj-loong64-fix-the-usage-of-offset-in-.patch create mode 100644 0048-cmd-compile-simplify-memory-load-and-store-operation.patch create mode 100644 0049-cmd-internal-obj-loong64-add-ADDU16I.D-instruction-s.patch create mode 100644 0050-runtime-cgo-save-and-restore-R31-for-crosscall1-on-l.patch create mode 100644 0051-cmd-compile-simplify-specific-addition-operations-us.patch create mode 100644 0052-cmd-compile-optimize-loads-from-readonly-globals-int.patch create mode 100644 0053-cmd-compile-fold-constant-in-ADDshift-op-on-loong64.patch create mode 100644 0054-cmd-internal-obj-loong64-use-the-MOVVP-instruction-t.patch create mode 100644 0055-cmd-compile-implement-jump-table-on-loong64.patch create mode 100644 0056-cmd-link-cmd-internal-obj-fix-a-remote-call-failure-.patch create mode 100644 0057-cmd-internal-obj-loong64-add-MULW.D.W-U-instructions.patch create mode 100644 0058-cmd-internal-obj-loong64-optimize-duplicate-optab-en.patch create mode 100644 0059-cmd-internal-obj-loong64-add-aliases-to-32-bit-arith.patch create mode 100644 0060-cmd-internal-obj-loong64-remove-the-incorrect-unsign.patch create mode 100644 0061-cmd-internal-obj-cmd-asm-reclassify-the-offset-of-me.patch create mode 100644 race_linux_loong64.syso diff --git a/0001-ABI1.0-fix-runtime-defs_linux_loong64.patch b/0001-ABI1.0-fix-runtime-defs_linux_loong64.patch new file mode 100644 index 0000000..c97ec74 --- /dev/null +++ b/0001-ABI1.0-fix-runtime-defs_linux_loong64.patch @@ -0,0 +1,188 @@ +From 3ec56aa0d31240e31ad79b125e5f615934c5f1a2 Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Wed, 6 Apr 2022 20:08:46 +0800 +Subject: [PATCH 01/61] ABI1.0: fix runtime defs_linux_loong64. + +Signed-off-by: Guoqi Chen +Change-Id: I8d550ab5047fe741769257200f8604b9b8839fc3 +--- + src/runtime/defs_linux_loong64.go | 82 +++++++++++++++++-------------- + src/runtime/os_linux_generic.go | 2 +- + src/runtime/os_linux_loong64.go | 27 ++++++++++ + 3 files changed, 73 insertions(+), 38 deletions(-) + +diff --git a/src/runtime/defs_linux_loong64.go b/src/runtime/defs_linux_loong64.go +index b983725160..9c85d21ed4 100644 +--- a/src/runtime/defs_linux_loong64.go ++++ b/src/runtime/defs_linux_loong64.go +@@ -28,8 +28,8 @@ const ( + + _SA_RESTART = 0x10000000 + _SA_ONSTACK = 0x8000000 ++ _SA_RESTORER = 0x0 // Only used on intel + _SA_SIGINFO = 0x4 +- _SA_RESTORER = 0x0 + + _SI_KERNEL = 0x80 + _SI_TIMER = -0x2 +@@ -122,6 +122,29 @@ type itimerval struct { + it_value timeval + } + ++type sigactiont struct { ++ sa_handler uintptr ++ sa_flags uint64 ++ sa_mask [2]uint64 ++ sa_restorer uintptr ++} ++ ++type siginfoFields struct { ++ si_signo int32 ++ si_errno int32 ++ si_code int32 ++ __pad0 [1]int32 ++ // below here is a union; si_addr is the only field we use ++ si_addr uint64 ++} ++ ++type siginfo struct { ++ siginfoFields ++ ++ // Pad struct to the max size in the kernel. ++ _ [_si_max_size - unsafe.Sizeof(siginfoFields{})]byte ++} ++ + type sigeventFields struct { + value uintptr + signo int32 +@@ -145,30 +168,6 @@ const ( + _O_CLOEXEC = 0x80000 + ) + +-type sigactiont struct { +- sa_handler uintptr +- sa_flags uint64 +- sa_mask uint64 +- // Linux on loong64 does not have the sa_restorer field, but the setsig +- // function references it (for x86). Not much harm to include it at the end. +- sa_restorer uintptr +-} +- +-type siginfoFields struct { +- si_signo int32 +- si_errno int32 +- si_code int32 +- __pad0 [1]int32 +- // below here is a union; si_addr is the only field we use +- si_addr uint64 +-} +- +-type siginfo struct { +- siginfoFields +- // Pad struct to the max size in the kernel. +- _ [_si_max_size - unsafe.Sizeof(siginfoFields{})]byte +-} +- + type usigset struct { + val [16]uint64 + } +@@ -180,20 +179,29 @@ type stackt struct { + ss_size uintptr + } + ++type user_fpregs struct { ++ fpr [32]byte ++} ++ + type sigcontext struct { +- sc_pc uint64 +- sc_regs [32]uint64 +- sc_flags uint32 +- sc_pad0 [1]uint32 +- sc_extcontext [0]uint64 ++ sc_pc uint64 ++ sc_regs [32]uint64 ++ sc_flags uint32 ++ sc_fcsr uint32 ++ sc_vcsr uint32 ++ _pad0 [4]byte ++ sc_fcc uint64 ++ sc_scr [4]uint64 ++ sc_fpregs [32]user_fpregs ++ sc_reserved [4096]byte + } + + type ucontext struct { +- uc_flags uint64 +- uc_link *ucontext +- uc_stack stackt +- uc_sigmask usigset +- uc_x_unused [0]uint8 +- uc_pad_cgo_0 [8]byte +- uc_mcontext sigcontext ++ uc_flags uint64 ++ uc_link *ucontext ++ uc_stack stackt ++ _pad0 [24]byte ++ uc_mcontext sigcontext ++ uc_sigmask uint64 ++ _pad1 [120]byte + } +diff --git a/src/runtime/os_linux_generic.go b/src/runtime/os_linux_generic.go +index 15fafc14ea..a6154c3d5b 100644 +--- a/src/runtime/os_linux_generic.go ++++ b/src/runtime/os_linux_generic.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build !mips && !mipsle && !mips64 && !mips64le && !s390x && !ppc64 && linux ++//go:build !loong64 && !mips && !mipsle && !mips64 && !mips64le && !s390x && !ppc64 && linux + + package runtime + +diff --git a/src/runtime/os_linux_loong64.go b/src/runtime/os_linux_loong64.go +index 03926feb8c..4b88a93522 100644 +--- a/src/runtime/os_linux_loong64.go ++++ b/src/runtime/os_linux_loong64.go +@@ -3,6 +3,7 @@ + // license that can be found in the LICENSE file. + + //go:build linux && loong64 ++// +build linux,loong64 + + package runtime + +@@ -16,3 +17,29 @@ func archauxv(tag, val uintptr) { + } + + func osArchInit() {} ++ ++const ( ++ _SS_DISABLE = 2 ++ _NSIG = 65 ++ _SIG_BLOCK = 0 ++ _SIG_UNBLOCK = 1 ++ _SIG_SETMASK = 2 ++) ++ ++type sigset [2]uint64 ++ ++var sigset_all = sigset{^uint64(0), ^uint64(0)} ++ ++//go:nosplit ++//go:nowritebarrierrec ++func sigaddset(mask *sigset, i int) { ++ (*mask)[(i-1)/64] |= 1 << ((uint32(i) - 1) & 63) ++} ++ ++func sigdelset(mask *sigset, i int) { ++ (*mask)[(i-1)/64] &^= 1 << ((uint32(i) - 1) & 63) ++} ++ ++func sigfillset(mask *[2]uint64) { ++ (*mask)[0], (*mask)[1] = ^uint64(0), ^uint64(0) ++} +-- +2.43.7 + diff --git a/0002-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch b/0002-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch new file mode 100644 index 0000000..81c456f --- /dev/null +++ b/0002-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch @@ -0,0 +1,54 @@ +From dcf6a9e77c738319eecff091a4fee3d244912fe5 Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Sun, 9 Jan 2022 18:30:01 +0800 +Subject: [PATCH 02/61] ABI1.0: fix misc/cgo/test sigaltstack size on loong64. + +Change-Id: I3321da33f64179b9a4b467003665067dda8105a5 +--- + src/cmd/cgo/internal/test/sigaltstack.go | 2 +- + src/cmd/cgo/internal/testcarchive/testdata/main4.c | 2 +- + src/runtime/testdata/testprogcgo/sigstack.go | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/cmd/cgo/internal/test/sigaltstack.go b/src/cmd/cgo/internal/test/sigaltstack.go +index d468cf8251..8098b7dbcd 100644 +--- a/src/cmd/cgo/internal/test/sigaltstack.go ++++ b/src/cmd/cgo/internal/test/sigaltstack.go +@@ -14,7 +14,7 @@ package cgotest + #include + #include + +-#ifdef _AIX ++#if defined(_AIX) || defined(__loongarch64) + // On AIX, SIGSTKSZ is too small to handle Go sighandler. + #define CSIGSTKSZ 0x4000 + #else +diff --git a/src/cmd/cgo/internal/testcarchive/testdata/main4.c b/src/cmd/cgo/internal/testcarchive/testdata/main4.c +index 04f774008f..ffd661249c 100644 +--- a/src/cmd/cgo/internal/testcarchive/testdata/main4.c ++++ b/src/cmd/cgo/internal/testcarchive/testdata/main4.c +@@ -14,7 +14,7 @@ + + #include "libgo4.h" + +-#ifdef _AIX ++#if defined(_AIX) || defined(__loongarch64) + // On AIX, CSIGSTKSZ is too small to handle Go sighandler. + #define CSIGSTKSZ 0x4000 + #else +diff --git a/src/runtime/testdata/testprogcgo/sigstack.go b/src/runtime/testdata/testprogcgo/sigstack.go +index 12ca661033..e2143a2f27 100644 +--- a/src/runtime/testdata/testprogcgo/sigstack.go ++++ b/src/runtime/testdata/testprogcgo/sigstack.go +@@ -18,7 +18,7 @@ package main + #include + #include + +-#ifdef _AIX ++#if defined(_AIX) || defined(__loongarch64) + // On AIX, SIGSTKSZ is too small to handle Go sighandler. + #define CSIGSTKSZ 0x4000 + #else +-- +2.43.7 + diff --git a/0003-ABI1.0-fix-mabi-to-lp64-for-loong64.patch b/0003-ABI1.0-fix-mabi-to-lp64-for-loong64.patch new file mode 100644 index 0000000..067a3f2 --- /dev/null +++ b/0003-ABI1.0-fix-mabi-to-lp64-for-loong64.patch @@ -0,0 +1,82 @@ +From 10122654e57b8b60b6ab9b8155c632c907aa7875 Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Sun, 9 Jan 2022 18:33:02 +0800 +Subject: [PATCH 03/61] ABI1.0: fix mabi to lp64 for loong64. + +Change-Id: Ie269ea4b7a11dfe179343b80f33b4678772e4b5f +--- + src/cmd/cgo/gcc.go | 2 +- + src/cmd/go/internal/work/exec.go | 2 +- + src/cmd/link/internal/ld/elf.go | 2 +- + src/cmd/link/internal/ld/lib.go | 2 +- + src/runtime/cgo/gcc_loong64.S | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go +index edb910a8da..bc0480692d 100644 +--- a/src/cmd/cgo/gcc.go ++++ b/src/cmd/cgo/gcc.go +@@ -1751,7 +1751,7 @@ func gccMachine() []string { + return []string{"-mabi=32", "-msoft-float"} + } + case "loong64": +- return []string{"-mabi=lp64d"} ++ return []string{"-mabi=lp64"} + } + return nil + } +diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go +index 63fd13f754..f058ef140c 100644 +--- a/src/cmd/go/internal/work/exec.go ++++ b/src/cmd/go/internal/work/exec.go +@@ -2604,7 +2604,7 @@ func (b *Builder) gccArchArgs() []string { + return append(args, "-msoft-float") + } + case "loong64": +- return []string{"-mabi=lp64d"} ++ return []string{"-mabi=lp64"} + case "ppc64": + if cfg.Goos == "aix" { + return []string{"-maix64"} +diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go +index 6ff1d94383..9fd6ab9c04 100644 +--- a/src/cmd/link/internal/ld/elf.go ++++ b/src/cmd/link/internal/ld/elf.go +@@ -254,7 +254,7 @@ func Elfinit(ctxt *Link) { + ehdr.Flags = 0x20000004 /* MIPS 3 CPIC */ + } + if ctxt.Arch.Family == sys.Loong64 { +- ehdr.Flags = 0x43 /* DOUBLE_FLOAT, OBJABI_V1 */ ++ ehdr.Flags = 0x3 /* LoongArch lp64 */ + } + if ctxt.Arch.Family == sys.RISCV64 { + ehdr.Flags = 0x4 /* RISCV Float ABI Double */ +diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go +index 7f22b6ba1c..75ee615086 100644 +--- a/src/cmd/link/internal/ld/lib.go ++++ b/src/cmd/link/internal/ld/lib.go +@@ -2241,7 +2241,7 @@ func hostlinkArchArgs(arch *sys.Arch) []string { + return []string{"-arch", "arm64"} + } + case sys.Loong64: +- return []string{"-mabi=lp64d"} ++ return []string{"-mabi=lp64"} + case sys.MIPS64: + return []string{"-mabi=64"} + case sys.MIPS: +diff --git a/src/runtime/cgo/gcc_loong64.S b/src/runtime/cgo/gcc_loong64.S +index c84a3715b2..fa2eddb819 100644 +--- a/src/runtime/cgo/gcc_loong64.S ++++ b/src/runtime/cgo/gcc_loong64.S +@@ -8,7 +8,7 @@ + * void crosscall1(void (*fn)(void), void (*setg_gcc)(void *g), void *g) + * + * Calling into the gc tool chain, where all registers are caller save. +- * Called from standard lp64d ABI, where $r1, $r3, $r23-$r30, and $f24-$f31 ++ * Called from standard lp64 ABI, where $r1, $r3, $r23-$r30, and $f24-$f31 + * are callee-save, so they must be saved explicitly, along with $r1 (LR). + */ + .globl crosscall1 +-- +2.43.7 + diff --git a/0004-ABI1.0-fix-test-issue11656-for-loong64.patch b/0004-ABI1.0-fix-test-issue11656-for-loong64.patch new file mode 100644 index 0000000..dcd45d3 --- /dev/null +++ b/0004-ABI1.0-fix-test-issue11656-for-loong64.patch @@ -0,0 +1,27 @@ +From 0238e77e9e5f2c6131567e505eaea270632213cf Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Thu, 7 Apr 2022 09:07:59 +0800 +Subject: [PATCH 04/61] ABI1.0: fix test issue11656 for loong64. + +Signed-off-by: Guoqi Chen +Change-Id: I54e8a99a1fb42d1938b8a3b91b80c1d6c4e5e8c2 +--- + test/fixedbugs/issue11656.dir/issue11656.go | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/fixedbugs/issue11656.dir/issue11656.go b/test/fixedbugs/issue11656.dir/issue11656.go +index a5a52df698..d7dd071772 100644 +--- a/test/fixedbugs/issue11656.dir/issue11656.go ++++ b/test/fixedbugs/issue11656.dir/issue11656.go +@@ -63,6 +63,8 @@ func f(n int) { + ill = append(ill, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24) // MOVD R0, (R0) + case "riscv64": + binary.LittleEndian.PutUint32(ill, 0x00003023) // MOV X0, (X0) ++ case "loong64": ++ binary.LittleEndian.PutUint32(ill, 0x29c00000) // MOVV R0, (R0) + default: + // Just leave it as 0 and hope for the best. + } +-- +2.43.7 + diff --git a/0005-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch b/0005-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch new file mode 100644 index 0000000..0508c2f --- /dev/null +++ b/0005-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch @@ -0,0 +1,26 @@ +From dc4bb8db4c28b28101f2012e1e8b3ae4a65c1a0a Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Tue, 5 Jul 2022 20:08:01 +0800 +Subject: [PATCH 05/61] ABI1.0: fixup stack growth after fork in + runtime.sigfillset + +Change-Id: I0e9838c4654b5fc967c240198b2e63d5eb34f637 +--- + src/runtime/os_linux_loong64.go | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/runtime/os_linux_loong64.go b/src/runtime/os_linux_loong64.go +index 4b88a93522..5331b21eac 100644 +--- a/src/runtime/os_linux_loong64.go ++++ b/src/runtime/os_linux_loong64.go +@@ -40,6 +40,7 @@ func sigdelset(mask *sigset, i int) { + (*mask)[(i-1)/64] &^= 1 << ((uint32(i) - 1) & 63) + } + ++//go:nosplit + func sigfillset(mask *[2]uint64) { + (*mask)[0], (*mask)[1] = ^uint64(0), ^uint64(0) + } +-- +2.43.7 + diff --git a/0006-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch b/0006-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch new file mode 100644 index 0000000..4113b01 --- /dev/null +++ b/0006-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch @@ -0,0 +1,43 @@ +From 4c1bb6c16abaf58d8f81a3fbaae9d8b19539e2e4 Mon Sep 17 00:00:00 2001 +From: chenguoqi +Date: Thu, 7 Sep 2023 11:40:03 +0800 +Subject: [PATCH 06/61] ABI1.0: runtime: fix the vDSO symbol version for kernel + 4.19 on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +goos: linux +goarch: loong64 +pkg: time +cpu: Loongson-3C5000 @ 2200.00MHz + │ old.bench │ new.bench │ + │ sec/op │ sec/op vs base │ +Now 301.2n ± 0% 101.9n ± 0% -66.17% (p=0.000 n=15) +NowUnixNano 306.3n ± 0% 104.6n ± 0% -65.85% (p=0.000 n=15) +NowUnixMilli 307.2n ± 0% 105.5n ± 0% -65.66% (p=0.000 n=15) +NowUnixMicro 307.3n ± 0% 105.5n ± 0% -65.67% (p=0.000 n=15) +geomean 305.5n 104.4n -65.84% + +Signed-off-by: chenguoqi +Change-Id: I60828823b9f5709b8459c0c693c1225f172f830c +--- + src/runtime/vdso_linux_loong64.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/runtime/vdso_linux_loong64.go b/src/runtime/vdso_linux_loong64.go +index 37ee02dcb0..2299b1bbba 100644 +--- a/src/runtime/vdso_linux_loong64.go ++++ b/src/runtime/vdso_linux_loong64.go +@@ -15,7 +15,7 @@ const ( + // not currently described in manpages as of May 2022, but will eventually + // appear + // when that happens, see man 7 vdso : loongarch +-var vdsoLinuxVersion = vdsoVersionKey{"LINUX_5.10", 0xae78f70} ++var vdsoLinuxVersion = vdsoVersionKey{"LINUX_2.6", 0x3ae75f6} + + var vdsoSymbolKeys = []vdsoSymbolKey{ + {"__vdso_clock_gettime", 0xd35ec75, 0x6e43a318, &vdsoClockgettimeSym}, +-- +2.43.7 + diff --git a/0007-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch b/0007-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch new file mode 100644 index 0000000..caf86f9 --- /dev/null +++ b/0007-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch @@ -0,0 +1,47 @@ +From e0f893074d551a3de5f9169f7de0cfb772289d08 Mon Sep 17 00:00:00 2001 +From: chenguoqi +Date: Tue, 12 Dec 2023 20:56:57 +0800 +Subject: [PATCH 07/61] ABI1.0: fix the definition of members in the PtraceRegs + structure + +Change-Id: Ic06ec3d405fea66e43559b83acd1acdf48fd300e +--- + src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go | 3 +-- + src/syscall/ztypes_linux_loong64.go | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +index 2f28fe26c1..a0a2db0379 100644 +--- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go ++++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +@@ -191,10 +191,9 @@ const ( + + type PtraceRegs struct { + Regs [32]uint64 +- Orig_a0 uint64 + Era uint64 + Badv uint64 +- Reserved [10]uint64 ++ Reserved [11]uint64 + } + + type FdSet struct { +diff --git a/src/syscall/ztypes_linux_loong64.go b/src/syscall/ztypes_linux_loong64.go +index b0e068d74b..23b2440b46 100644 +--- a/src/syscall/ztypes_linux_loong64.go ++++ b/src/syscall/ztypes_linux_loong64.go +@@ -538,10 +538,9 @@ const SizeofInotifyEvent = 0x10 + + type PtraceRegs struct { + Regs [32]uint64 +- Orig_a0 uint64 + Era uint64 + Badv uint64 +- Reserved [10]uint64 ++ Reserved [11]uint64 + } + + type ptracePsw struct { +-- +2.43.7 + diff --git a/0008-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch b/0008-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch new file mode 100644 index 0000000..a921d88 --- /dev/null +++ b/0008-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch @@ -0,0 +1,28 @@ +From bcb6df1e0f9ae3bc72c400e2c04a8f5c4b38973a Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 4 Jan 2024 10:06:19 +0800 +Subject: [PATCH 08/61] ABI1.0: cmd/link: correct the dynamic linker path of + linux/loong64 + +Signed-off-by: limeidan +Change-Id: I68192bf433e1f0161337b83c6bb9270a339c4ed4 +--- + src/cmd/link/internal/loong64/obj.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cmd/link/internal/loong64/obj.go b/src/cmd/link/internal/loong64/obj.go +index 5489b4c6da..e46a2a703f 100644 +--- a/src/cmd/link/internal/loong64/obj.go ++++ b/src/cmd/link/internal/loong64/obj.go +@@ -31,7 +31,7 @@ func Init() (*sys.Arch, ld.Arch) { + Trampoline: trampoline, + + ELF: ld.ELFArch{ +- Linuxdynld: "/lib64/ld-linux-loongarch-lp64d.so.1", ++ Linuxdynld: "/lib64/ld.so.1", + LinuxdynldMusl: "/lib/ld-musl-loongarch64.so.1", + Freebsddynld: "XXX", + Openbsddynld: "XXX", +-- +2.43.7 + diff --git a/0009-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch b/0009-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch new file mode 100644 index 0000000..fd788de --- /dev/null +++ b/0009-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch @@ -0,0 +1,164 @@ +From 9cca33f91c171b6057029ce390127816af6c00b9 Mon Sep 17 00:00:00 2001 +From: chenguoqi +Date: Sat, 3 Aug 2024 11:11:48 +0800 +Subject: [PATCH 09/61] ABI1.0: fix the definition of members in the sigcontext + structure + +Signed-off-by: chenguoqi +Change-Id: I8b0b1b06351b2134466a01d3948925730591c6b9 +--- + src/runtime/export_debug_loong64_test.go | 123 ++--------------------- + 1 file changed, 9 insertions(+), 114 deletions(-) + +diff --git a/src/runtime/export_debug_loong64_test.go b/src/runtime/export_debug_loong64_test.go +index eaaf359892..692d418c74 100644 +--- a/src/runtime/export_debug_loong64_test.go ++++ b/src/runtime/export_debug_loong64_test.go +@@ -93,135 +93,30 @@ func (h *debugCallHandler) restoreSigContext(ctxt *sigctxt) { + ctxt.set_sp(sp) + } + +-func getVal32(base uintptr, off uintptr) uint32 { +- return *(*uint32)(unsafe.Pointer(base + off)) +-} +- +-func getVal64(base uintptr, off uintptr) uint64 { +- return *(*uint64)(unsafe.Pointer(base + off)) +-} +- +-func setVal64(base uintptr, off uintptr, val uint64) { +- *(*uint64)(unsafe.Pointer(base + off)) = val +-} +- +-// Layout for sigcontext on linux/loong64: arch/loongarch/include/uapi/asm/sigcontext.h +-// +-// sc_extcontext | sctx_info +-// ------------------------------------------ +-// | {fpu,lsx,lasx}_context +-// --------------------------- +-// | sctx_info +-// --------------------------- +-// | lbt_context +-// +- +-const ( +- INVALID_MAGIC uint32 = 0 +- FPU_CTX_MAGIC = 0x46505501 +- LSX_CTX_MAGIC = 0x53580001 +- LASX_CTX_MAGIC = 0x41535801 +- LBT_CTX_MAGIC = 0x42540001 +-) +- +-const ( +- SCTX_INFO_SIZE = 4 + 4 + 8 +- FPU_CTX_SIZE = 8*32 + 8 + 4 // fpu context size +- LSX_CTX_SIZE = 8*64 + 8 + 4 // lsx context size +- LASX_CTX_SIZE = 8*128 + 8 + 4 // lasx context size +- LBT_CTX_SIZE = 8*4 + 4 + 4 // lbt context size +-) +- +-// storeRegArgs sets up argument registers in the signal context state +-// from an abi.RegArgs. ++// storeRegArgs sets up argument registers in the signal ++// context state from an abi.RegArgs. + // + // Both src and dst must be non-nil. + func storeRegArgs(dst *sigcontext, src *abi.RegArgs) { + // R4..R19 are used to pass int arguments in registers on loong64 +- for i := 0; i < abi.IntArgRegs; i++ { +- dst.sc_regs[i+4] = (uint64)(src.Ints[i]) ++ for i, r := range src.Ints { ++ dst.sc_regs[i+4] = uint64(r) + } + + // F0..F15 are used to pass float arguments in registers on loong64 +- offset := (uintptr)(0) +- baseAddr := (uintptr)(unsafe.Pointer(&dst.sc_extcontext)) +- +- for { +- magic := getVal32(baseAddr, offset) +- size := getVal32(baseAddr, offset+4) +- +- switch magic { +- case INVALID_MAGIC: +- return +- +- case FPU_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- setVal64(baseAddr, ((uintptr)(i*8) + offset), src.Floats[i]) +- } +- return +- +- case LSX_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- setVal64(baseAddr, ((uintptr)(i*16) + offset), src.Floats[i]) +- } +- return +- +- case LASX_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- setVal64(baseAddr, ((uintptr)(i*32) + offset), src.Floats[i]) +- } +- return +- +- case LBT_CTX_MAGIC: +- offset += uintptr(size) +- } ++ for i, r := range src.Floats { ++ *(*uint64)(unsafe.Pointer(&dst.sc_fpregs[i])) = r + } + } + + func loadRegArgs(dst *abi.RegArgs, src *sigcontext) { + // R4..R19 are used to pass int arguments in registers on loong64 +- for i := 0; i < abi.IntArgRegs; i++ { ++ for i := range dst.Ints { + dst.Ints[i] = uintptr(src.sc_regs[i+4]) + } + + // F0..F15 are used to pass float arguments in registers on loong64 +- offset := (uintptr)(0) +- baseAddr := (uintptr)(unsafe.Pointer(&src.sc_extcontext)) +- +- for { +- magic := getVal32(baseAddr, offset) +- size := getVal32(baseAddr, (offset + 4)) +- +- switch magic { +- case INVALID_MAGIC: +- return +- +- case FPU_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- dst.Floats[i] = getVal64(baseAddr, (uintptr(i*8) + offset)) +- } +- return +- +- case LSX_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- dst.Floats[i] = getVal64(baseAddr, (uintptr(i*16) + offset)) +- } +- return +- +- case LASX_CTX_MAGIC: +- offset += SCTX_INFO_SIZE +- for i := 0; i < abi.FloatArgRegs; i++ { +- dst.Floats[i] = getVal64(baseAddr, (uintptr(i*32) + offset)) +- } +- return +- +- case LBT_CTX_MAGIC: +- offset += uintptr(size) +- } ++ for i := range dst.Floats { ++ dst.Floats[i] = *(*uint64)(unsafe.Pointer(&src.sc_fpregs[i])) + } + } +-- +2.43.7 + diff --git a/0010-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch b/0010-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch new file mode 100644 index 0000000..4198979 --- /dev/null +++ b/0010-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch @@ -0,0 +1,29 @@ +From 42b2b96ff6d32d69adfbfd8b90597ee519626774 Mon Sep 17 00:00:00 2001 +From: chenguoqi +Date: Thu, 8 Aug 2024 15:36:56 +0800 +Subject: [PATCH 10/61] ABI1.0: cmd/cgo/internal/testsanitizers: skip tsan8 on + loong64 + +Note: only skip abi1.0 + +Signed-off-by: chenguoqi +Change-Id: I88f6ac5b79b4aa4a9950f29e654a04c4193efe1c +--- + src/cmd/cgo/internal/testsanitizers/tsan_test.go | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/cmd/cgo/internal/testsanitizers/tsan_test.go b/src/cmd/cgo/internal/testsanitizers/tsan_test.go +index 265c5e3605..1d98a96609 100644 +--- a/src/cmd/cgo/internal/testsanitizers/tsan_test.go ++++ b/src/cmd/cgo/internal/testsanitizers/tsan_test.go +@@ -48,7 +48,6 @@ func TestTSAN(t *testing.T) { + {src: "tsan5.go", needsRuntime: true}, + {src: "tsan6.go", needsRuntime: true}, + {src: "tsan7.go", needsRuntime: true}, +- {src: "tsan8.go"}, + {src: "tsan9.go"}, + {src: "tsan10.go", needsRuntime: true}, + {src: "tsan11.go", needsRuntime: true}, +-- +2.43.7 + diff --git a/0011-ABI1.0-switch-the-relocations-to-ABI1.0-s-style.patch b/0011-ABI1.0-switch-the-relocations-to-ABI1.0-s-style.patch new file mode 100644 index 0000000..16f34a8 --- /dev/null +++ b/0011-ABI1.0-switch-the-relocations-to-ABI1.0-s-style.patch @@ -0,0 +1,887 @@ +From fba30fcfdbd968befafe8d7476e7bafa30dd3d61 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Fri, 30 May 2025 16:28:07 +0800 +Subject: [PATCH 11/61] ABI1.0: switch the relocations to ABI1.0's style + +Change-Id: I65c9616fc92df071f5e6fb157626f1290fad6214 +--- + .../asm/internal/asm/testdata/loong64enc2.s | 36 +- + src/cmd/internal/obj/loong64/asm.go | 13 +- + src/cmd/internal/objabi/reloctype.go | 8 + + src/cmd/internal/objabi/reloctype_string.go | 38 +- + src/cmd/link/internal/ld/data.go | 3 +- + src/cmd/link/internal/ld/lib.go | 2 +- + src/cmd/link/internal/loadelf/ldelf.go | 19 + + src/cmd/link/internal/loong64/asm.go | 431 ++++++++++++++---- + 8 files changed, 429 insertions(+), 121 deletions(-) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc2.s b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +index 91aed4e2c7..3c43b0dd3a 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc2.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +@@ -59,24 +59,24 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + XOR $-1, R4 // 1efcbf0284f81500 + + // relocation instructions +- MOVW R4, name(SB) // 1e00001ac4038029 +- MOVWU R4, name(SB) // 1e00001ac4038029 +- MOVV R4, name(SB) // 1e00001ac403c029 +- MOVB R4, name(SB) // 1e00001ac4030029 +- MOVBU R4, name(SB) // 1e00001ac4030029 +- MOVF F4, name(SB) // 1e00001ac403402b +- MOVD F4, name(SB) // 1e00001ac403c02b +- MOVW name(SB), R4 // 1e00001ac4038028 +- MOVWU name(SB), R4 // 1e00001ac403802a +- MOVV name(SB), R4 // 1e00001ac403c028 +- MOVB name(SB), R4 // 1e00001ac4030028 +- MOVBU name(SB), R4 // 1e00001ac403002a +- MOVF name(SB), F4 // 1e00001ac403002b +- MOVD name(SB), F4 // 1e00001ac403802b +- MOVH R4, name(SB) // 1e00001ac4034029 +- MOVH name(SB), R4 // 1e00001ac4034028 +- MOVHU R4, name(SB) // 1e00001ac4034029 +- MOVHU name(SB), R4 // 1e00001ac403402a ++ MOVW R4, name(SB) // 1e00001cc4038029 ++ MOVWU R4, name(SB) // 1e00001cc4038029 ++ MOVV R4, name(SB) // 1e00001cc403c029 ++ MOVB R4, name(SB) // 1e00001cc4030029 ++ MOVBU R4, name(SB) // 1e00001cc4030029 ++ MOVF F4, name(SB) // 1e00001cc403402b ++ MOVD F4, name(SB) // 1e00001cc403c02b ++ MOVW name(SB), R4 // 1e00001cc4038028 ++ MOVWU name(SB), R4 // 1e00001cc403802a ++ MOVV name(SB), R4 // 1e00001cc403c028 ++ MOVB name(SB), R4 // 1e00001cc4030028 ++ MOVBU name(SB), R4 // 1e00001cc403002a ++ MOVF name(SB), F4 // 1e00001cc403002b ++ MOVD name(SB), F4 // 1e00001cc403802b ++ MOVH R4, name(SB) // 1e00001cc4034029 ++ MOVH name(SB), R4 // 1e00001cc4034028 ++ MOVHU R4, name(SB) // 1e00001cc4034029 ++ MOVHU name(SB), R4 // 1e00001cc403402a + + // MOVV C_DCON12_20S, r + MOVV $0x273fffff80000000, R4 // MOVV $2828260563841187840, R4 // 0400001584cc0903 +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 6e09930183..163930fad6 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -2520,7 +2520,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + + // relocation operations + case 50: // mov r,addr ==> pcalau12i + sw +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(REGTMP)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_ADDR_HI, + Off: int32(c.pc), +@@ -2528,6 +2528,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + Sym: p.To.Sym, + Add: p.To.Offset, + }) ++ + o2 = OP_12IRR(c.opirr(p.As), uint32(0), uint32(REGTMP), uint32(p.From.Reg)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_ADDR_LO, +@@ -2538,7 +2539,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + }) + + case 51: // mov addr,r ==> pcalau12i + lw +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(REGTMP)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_ADDR_HI, + Off: int32(c.pc), +@@ -2558,7 +2559,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + case 52: // mov $ext, r + // NOTE: this case does not use REGTMP. If it ever does, + // remove the NOTUSETMP flag in optab. +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(p.To.Reg)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(p.To.Reg)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_ADDR_HI, + Off: int32(c.pc), +@@ -2620,7 +2621,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(REGTMP), uint32(p.To.Reg)) + + case 56: // mov r, tlsvar IE model ==> (pcalau12i + ld.d)tlsvar@got + add.d + st.d +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(REGTMP)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_TLS_IE_HI, + Off: int32(c.pc), +@@ -2638,7 +2639,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 = OP_12IRR(c.opirr(p.As), uint32(0), uint32(REGTMP), uint32(p.From.Reg)) + + case 57: // mov tlsvar, r IE model ==> (pcalau12i + ld.d)tlsvar@got + add.d + ld.d +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(REGTMP)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_TLS_IE_HI, + Off: int32(c.pc), +@@ -2684,7 +2685,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = OP_RR(c.oprr(p.As), uint32(p.To.Reg), uint32(p.RegTo2)) + + case 65: // mov sym@GOT, r ==> pcalau12i + ld.d +- o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(p.To.Reg)) ++ o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(p.To.Reg)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ + Type: objabi.R_LOONG64_GOT_HI, + Off: int32(c.pc), +diff --git a/src/cmd/internal/objabi/reloctype.go b/src/cmd/internal/objabi/reloctype.go +index 9b9b4b7ee3..677e5d3a57 100644 +--- a/src/cmd/internal/objabi/reloctype.go ++++ b/src/cmd/internal/objabi/reloctype.go +@@ -347,11 +347,19 @@ const ( + R_LOONG64_GOT_HI + R_LOONG64_GOT_LO + ++ // R_LOONG64_GOT resolves a GOT-relative instruction sequence, usually an pcalau12i ++ // followed by another ld or addi instruction. ++ R_LOONG64_GOT ++ + // 64-bit in-place addition. + R_LOONG64_ADD64 + // 64-bit in-place subtraction. + R_LOONG64_SUB64 + ++ // R_LOONG64_PCREL resolves a PC-relative addresses instruction sequence, usually an pcalau12i ++ // followed by another ld or addi instruction. ++ R_LOONG64_PCREL ++ + // R_JMP16LOONG64 resolves to 18-bit PC-relative target address of a JMP instructions. + R_JMP16LOONG64 + +diff --git a/src/cmd/internal/objabi/reloctype_string.go b/src/cmd/internal/objabi/reloctype_string.go +index ae7941c441..2a02afbc7c 100644 +--- a/src/cmd/internal/objabi/reloctype_string.go ++++ b/src/cmd/internal/objabi/reloctype_string.go +@@ -91,27 +91,29 @@ func _() { + _ = x[R_LOONG64_TLS_IE_LO-81] + _ = x[R_LOONG64_GOT_HI-82] + _ = x[R_LOONG64_GOT_LO-83] +- _ = x[R_LOONG64_ADD64-84] +- _ = x[R_LOONG64_SUB64-85] +- _ = x[R_JMP16LOONG64-86] +- _ = x[R_JMP21LOONG64-87] +- _ = x[R_JMPLOONG64-88] +- _ = x[R_ADDRMIPSU-89] +- _ = x[R_ADDRMIPSTLS-90] +- _ = x[R_ADDRCUOFF-91] +- _ = x[R_WASMIMPORT-92] +- _ = x[R_XCOFFREF-93] +- _ = x[R_PEIMAGEOFF-94] +- _ = x[R_INITORDER-95] +- _ = x[R_DWTXTADDR_U1-96] +- _ = x[R_DWTXTADDR_U2-97] +- _ = x[R_DWTXTADDR_U3-98] +- _ = x[R_DWTXTADDR_U4-99] ++ _ = x[R_LOONG64_GOT-84] ++ _ = x[R_LOONG64_ADD64-85] ++ _ = x[R_LOONG64_SUB64-86] ++ _ = x[R_LOONG64_PCREL-87] ++ _ = x[R_JMP16LOONG64-88] ++ _ = x[R_JMP21LOONG64-89] ++ _ = x[R_JMPLOONG64-90] ++ _ = x[R_ADDRMIPSU-91] ++ _ = x[R_ADDRMIPSTLS-92] ++ _ = x[R_ADDRCUOFF-93] ++ _ = x[R_WASMIMPORT-94] ++ _ = x[R_XCOFFREF-95] ++ _ = x[R_PEIMAGEOFF-96] ++ _ = x[R_INITORDER-97] ++ _ = x[R_DWTXTADDR_U1-98] ++ _ = x[R_DWTXTADDR_U2-99] ++ _ = x[R_DWTXTADDR_U3-100] ++ _ = x[R_DWTXTADDR_U4-101] + } + +-const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_GOT_PCREL_ITYPER_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_LOONG64_ADDR_HIR_LOONG64_ADDR_LOR_LOONG64_TLS_LE_HIR_LOONG64_TLS_LE_LOR_CALLLOONG64R_LOONG64_TLS_IE_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_LOONG64_ADD64R_LOONG64_SUB64R_JMP16LOONG64R_JMP21LOONG64R_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDERR_DWTXTADDR_U1R_DWTXTADDR_U2R_DWTXTADDR_U3R_DWTXTADDR_U4" ++const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_GOT_PCREL_ITYPER_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_LOONG64_ADDR_HIR_LOONG64_ADDR_LOR_LOONG64_TLS_LE_HIR_LOONG64_TLS_LE_LOR_CALLLOONG64R_LOONG64_TLS_IE_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_LOONG64_GOTR_LOONG64_ADD64R_LOONG64_SUB64R_LOONG64_PCRELR_JMP16LOONG64R_JMP21LOONG64R_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDERR_DWTXTADDR_U1R_DWTXTADDR_U2R_DWTXTADDR_U3R_DWTXTADDR_U4" + +-var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 330, 341, 354, 373, 393, 413, 433, 446, 460, 474, 488, 503, 517, 531, 542, 564, 586, 600, 615, 638, 655, 673, 694, 709, 728, 739, 756, 768, 787, 806, 820, 834, 850, 873, 891, 911, 931, 945, 963, 979, 989, 1006, 1023, 1042, 1061, 1074, 1093, 1112, 1128, 1144, 1159, 1174, 1188, 1202, 1214, 1225, 1238, 1249, 1261, 1271, 1283, 1294, 1308, 1322, 1336, 1350} ++var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 330, 341, 354, 373, 393, 413, 433, 446, 460, 474, 488, 503, 517, 531, 542, 564, 586, 600, 615, 638, 655, 673, 694, 709, 728, 739, 756, 768, 787, 806, 820, 834, 850, 873, 891, 911, 931, 945, 963, 979, 989, 1006, 1023, 1042, 1061, 1074, 1093, 1112, 1128, 1144, 1157, 1172, 1187, 1202, 1216, 1230, 1242, 1253, 1266, 1277, 1289, 1299, 1311, 1322, 1336, 1350, 1364, 1378} + + func (i RelocType) String() string { + i -= 1 +diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go +index 138547a3d3..10dd52c5d0 100644 +--- a/src/cmd/link/internal/ld/data.go ++++ b/src/cmd/link/internal/ld/data.go +@@ -155,7 +155,8 @@ func isPLTCall(arch *sys.Arch, rt objabi.RelocType) bool { + return true + + // Loong64 +- case uint32(sys.Loong64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_B26))<<8: ++ case uint32(sys.Loong64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_B26))<<8, ++ uint32(sys.Loong64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_SOP_PUSH_PLT_PCREL))<<8: + return true + } + // TODO: other architectures. +diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go +index 75ee615086..29615532d1 100644 +--- a/src/cmd/link/internal/ld/lib.go ++++ b/src/cmd/link/internal/ld/lib.go +@@ -929,7 +929,7 @@ func (ctxt *Link) linksetup() { + ctxt.loader.SetAttrReachable(moduledata, true) + ctxt.Moduledata = moduledata + +- if ctxt.Arch == sys.Arch386 && ctxt.HeadType != objabi.Hwindows { ++ if (ctxt.Arch == sys.Arch386 || ctxt.Arch == sys.ArchLoong64) && ctxt.HeadType != objabi.Hwindows { + if (ctxt.BuildMode == BuildModeCArchive && ctxt.IsELF) || ctxt.BuildMode == BuildModeCShared || ctxt.BuildMode == BuildModePIE || ctxt.DynlinkingGo() { + got := ctxt.loader.LookupOrCreateSym("_GLOBAL_OFFSET_TABLE_", 0) + sb := ctxt.loader.MakeSymbolUpdater(got) +diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go +index 22c5dbc007..1d587b3670 100644 +--- a/src/cmd/link/internal/loadelf/ldelf.go ++++ b/src/cmd/link/internal/loadelf/ldelf.go +@@ -1053,6 +1053,10 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) { + return 2, 2, nil + + case LOONG64 | uint32(elf.R_LARCH_MARK_LA)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_PCREL)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_GPREL)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_ABSOLUTE)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_0_10_10_16_S2)<<16, + LOONG64 | uint32(elf.R_LARCH_MARK_PCREL)<<16, + LOONG64 | uint32(elf.R_LARCH_ADD24)<<16, + LOONG64 | uint32(elf.R_LARCH_ADD32)<<16, +@@ -1065,6 +1069,21 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) { + LOONG64 | uint32(elf.R_LARCH_PCALA_LO12)<<16, + LOONG64 | uint32(elf.R_LARCH_GOT_PC_HI20)<<16, + LOONG64 | uint32(elf.R_LARCH_GOT_PC_LO12)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_PLT_PCREL)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_TLS_GD)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_TLS_GOT)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_TLS_TPREL)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_SL)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_SR)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_ADD)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_SUB)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_AND)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_U_10_12)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_10_12)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_10_16)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_10_16_S2)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_5_20)<<16, ++ LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_0_5_10_16_S2)<<16, + LOONG64 | uint32(elf.R_LARCH_32_PCREL)<<16: + return 4, 4, nil + +diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go +index 6adafd38fc..5f8b517569 100644 +--- a/src/cmd/link/internal/loong64/asm.go ++++ b/src/cmd/link/internal/loong64/asm.go +@@ -27,29 +27,32 @@ func gentext(ctxt *ld.Link, ldr *loader.Loader) { + + // Emit the following function: + // +- // local.dso_init: +- // la.pcrel $a0, local.moduledata +- // b runtime.addmoduledata +- +- // 0000000000000000 : +- // 0: 1a000004 pcalau12i $a0, 0 +- // 0: R_LARCH_PCALA_HI20 local.moduledata +- o(0x1a000004) ++ // local.dso_init: ++ // la.pcrel $a0, local.moduledata ++ // b runtime.addmoduledata ++ ++ // 0000000000000000 : ++ // 0: 1a000004 pcaddu12i $a0, 0 ++ // ++ // 0: R_LARCH_PCALA_HI20 local.moduledata ++ o(0x1c000004) + rel, _ := initfunc.AddRel(objabi.R_LOONG64_ADDR_HI) + rel.SetOff(0) + rel.SetSiz(4) + rel.SetSym(ctxt.Moduledata) + +- // 4: 02c00084 addi.d $a0, $a0, 0 +- // 4: R_LARCH_PCALA_LO12 local.moduledata ++ // 4: 02c00084 addi.d $a0, $a0, 0 ++ // ++ // 4: R_LARCH_PCALA_LO12 local.moduledata + o(0x02c00084) + rel2, _ := initfunc.AddRel(objabi.R_LOONG64_ADDR_LO) + rel2.SetOff(4) + rel2.SetSiz(4) + rel2.SetSym(ctxt.Moduledata) + +- // 8: 50000000 b 0 +- // 8: R_LARCH_B26 runtime.addmoduledata ++ // 8: 50000000 b 0 ++ // ++ // 8: R_LARCH_B26 runtime.addmoduledata + o(0x50000000) + rel3, _ := initfunc.AddRel(objabi.R_CALLLOONG64) + rel3.SetOff(8) +@@ -99,6 +102,20 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + su.SetRelocType(rIdx, objabi.R_CALLLOONG64) + return true + ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_PLT_PCREL): ++ if targType == sym.SDYNIMPORT { ++ addpltsym(target, ldr, syms, targ) ++ su := ldr.MakeSymbolUpdater(s) ++ su.SetRelocSym(rIdx, syms.PLT) ++ su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymPlt(targ))) ++ } ++ if targType == 0 || targType == sym.SXREF { ++ ldr.Errorf(s, "unknown symbol %s in callloong64", ldr.SymName(targ)) ++ } ++ su := ldr.MakeSymbolUpdater(s) ++ su.SetRelocType(rIdx, objabi.R_CALLLOONG64) ++ return true ++ + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_GOT_PC_HI20), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_GOT_PC_LO12): + if targType != sym.SDYNIMPORT { +@@ -116,6 +133,18 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ))) + return true + ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_GPREL): ++ if targType != sym.SDYNIMPORT { ++ // TODO: turn LDR of GOT entry into ADR of symbol itself ++ } ++ ++ ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_LARCH_64)) ++ su := ldr.MakeSymbolUpdater(s) ++ su.SetRelocType(rIdx, objabi.R_LOONG64_GOT) ++ su.SetRelocSym(rIdx, syms.GOT) ++ su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ))) ++ return true ++ + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_PCALA_HI20), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_PCALA_LO12): + if targType == sym.SDYNIMPORT { +@@ -133,6 +162,19 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + } + return true + ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_PCREL): ++ if targType == sym.SDYNIMPORT { ++ ldr.Errorf(s, "unexpected relocation for dynamic symbol %s", ldr.SymName(targ)) ++ } ++ if targType == 0 || targType == sym.SXREF { ++ ldr.Errorf(s, "unknown symbol %s", ldr.SymName(targ)) ++ } ++ ++ su := ldr.MakeSymbolUpdater(s) ++ su.SetRelocType(rIdx, objabi.R_LOONG64_PCREL) ++ su.SetRelocAdd(rIdx, 0x0) ++ return true ++ + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_ADD64), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SUB64): + su := ldr.MakeSymbolUpdater(s) +@@ -161,6 +203,20 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + su.SetRelocType(rIdx, objabi.R_JMP21LOONG64) + } + return true ++ ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_ADD), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_SUB), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_AND), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_ABSOLUTE), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_SR), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_SL), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_S_5_20), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_S_10_12), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_U_10_12), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_S_10_16_S2), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_S_0_5_10_16_S2), ++ objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_POP_32_S_0_10_10_16_S2): ++ return true + } + + relocs := ldr.Relocs(s) +@@ -281,11 +337,7 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + objabi.R_LOONG64_GOT_LO: + ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_LARCH_64)) + su := ldr.MakeSymbolUpdater(s) +- if r.Type() == objabi.R_LOONG64_GOT_HI { +- su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_HI) +- } else { +- su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_LO) +- } ++ su.SetRelocType(rIdx, objabi.R_LOONG64_GOT) + su.SetRelocSym(rIdx, syms.GOT) + su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ))) + return true +@@ -295,22 +347,22 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + + func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) { + if plt.Size() == 0 { +- // pcalau12i $r14, imm ++ // pcaddu12i $r14, imm, imm represents the HI20 bits of &got.plt[0] + plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_HI, 4) +- plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x1a00000e) ++ plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x1c00000e) + + // sub.d $r13, $r13, $r15 + plt.AddUint32(ctxt.Arch, 0x0011bdad) + + // ld.d $r15, $r14, imm +- plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_LO, 4) ++ plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 4, objabi.R_LOONG64_ADDR_LO, 4) + plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x28c001cf) + + // addi.d $r13, $r13, -40 + plt.AddUint32(ctxt.Arch, 0x02ff61ad) + + // addi.d $r12, $r14, imm +- plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_LO, 4) ++ plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 12, objabi.R_LOONG64_ADDR_LO, 4) + plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x2c001cc) + + // srli.d $r13, $r13, 1 +@@ -347,9 +399,10 @@ func addpltsym(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade + panic("plt is not set up") + } + +- // pcalau12i $r15, imm +- plt.AddAddrPlus4(target.Arch, gotplt.Sym(), gotplt.Size()) +- plt.SetUint32(target.Arch, plt.Size()-4, 0x1a00000f) ++ // pcaddu12i + ld.d + pcadddu12i + jirl ++ // pcaddu12i $r15, &got.plt[0] ++ plt.AddAddrPlus4(target.Arch, gotplt.Sym(), gotplt.Size()) // add reloc to .plt sec, target is gotplt entry ++ plt.SetUint32(target.Arch, plt.Size()-4, 0x1c00000f) + relocs := plt.Relocs() + plt.SetRelocType(relocs.Count()-1, objabi.R_LOONG64_ADDR_HI) + +@@ -405,47 +458,256 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym, + } + case objabi.R_LOONG64_TLS_LE_LO: + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_TLS_LE_LO12) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_TLS_TPREL) | uint64(elfsym)<<32) + out.Write64(uint64(r.Xadd)) + ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xfff)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_AND)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_U_10_12)) ++ out.Write64(uint64(0x0)) ++ + case objabi.R_LOONG64_TLS_LE_HI: + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_TLS_LE_HI20) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_TLS_TPREL) | uint64(elfsym)<<32) + out.Write64(uint64(r.Xadd)) + ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_5_20) | uint64(0)<<32) ++ out.Write64(uint64(0x0)) ++ + case objabi.R_CALLLOONG64: + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_B26) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PLT_PCREL) | uint64(elfsym)<<32) + out.Write64(uint64(r.Xadd)) + ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_0_10_10_16_S2)) ++ out.Write64(uint64(0x0)) ++ + case objabi.R_LOONG64_TLS_IE_HI: ++ symgot := ld.ElfSymForReloc(ctxt, ldr.LookupOrCreateSym("_GLOBAL_OFFSET_TABLE_", 0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x800)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_TLS_GOT) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_TLS_IE_PC_HI20) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_5_20)) + out.Write64(uint64(0x0)) + + case objabi.R_LOONG64_TLS_IE_LO: ++ symgot := ld.ElfSymForReloc(ctxt, ldr.LookupOrCreateSym("_GLOBAL_OFFSET_TABLE_", 0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x4)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_TLS_GOT) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x804)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_TLS_GOT) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SL)) ++ out.Write64(uint64(0x0)) ++ + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_TLS_IE_PC_LO12) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_SUB)) + out.Write64(uint64(0x0)) + ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_10_12)) ++ out.Write64(uint64(0x0)) ++ ++ // The pcaddu12i + addi.d instructions is used to obtain address of a symbol on Loong64. ++ // The low 12-bit of the symbol address need to be added. The addi.d instruction have ++ // signed 12-bit immediate operand. The 0x800 (addr+U12 <=> addr+0x800+S12) is introduced ++ // to do sign extending from 12 bits. The 0x804 is 0x800 + 4, 4 is instruction bit ++ // width on Loong64 and is used to correct the PC of the addi.d instruction. + case objabi.R_LOONG64_ADDR_LO: + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_PCALA_LO12) | uint64(elfsym)<<32) +- out.Write64(uint64(r.Xadd)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(r.Xadd + 0x4)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(r.Xadd + 0x804)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SL)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SUB)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_10_12)) ++ out.Write64(uint64(0x0)) + + case objabi.R_LOONG64_ADDR_HI: + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_PCALA_HI20) | uint64(elfsym)<<32) +- out.Write64(uint64(r.Xadd)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(r.Xadd + 0x800)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_5_20) | uint64(0)<<32) ++ out.Write64(uint64(0x0)) + + case objabi.R_LOONG64_GOT_HI: ++ symgot := ld.ElfSymForReloc(ctxt, ldr.LookupOrCreateSym("_GLOBAL_OFFSET_TABLE_", 0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x800)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_GPREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_GOT_PC_HI20) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_5_20)) + out.Write64(uint64(0x0)) + + case objabi.R_LOONG64_GOT_LO: ++ symgot := ld.ElfSymForReloc(ctxt, ldr.LookupOrCreateSym("_GLOBAL_OFFSET_TABLE_", 0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x4)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_GPREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_PCREL) | uint64(symgot)<<32) ++ out.Write64(uint64(0x804)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_GPREL) | uint64(elfsym)<<32) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_ADD)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SR)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_PUSH_ABSOLUTE)) ++ out.Write64(uint64(0xc)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_SL)) ++ out.Write64(uint64(0x0)) ++ + out.Write64(uint64(sectoff)) +- out.Write64(uint64(elf.R_LARCH_GOT_PC_LO12) | uint64(elfsym)<<32) ++ out.Write64(uint64(elf.R_LARCH_SOP_SUB)) ++ out.Write64(uint64(0x0)) ++ ++ out.Write64(uint64(sectoff)) ++ out.Write64(uint64(elf.R_LARCH_SOP_POP_32_S_10_12)) + out.Write64(uint64(0x0)) + } + +@@ -459,6 +721,7 @@ func machoreloc1(*sys.Arch, *ld.OutBuf, *loader.Loader, loader.Sym, loader.ExtRe + func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) { + rs := r.Sym() + if target.IsExternal() { ++ nExtReloc := 0 + switch r.Type() { + default: + return val, 0, false +@@ -470,16 +733,30 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade + if rst != sym.SHOSTOBJ && rst != sym.SDYNIMPORT && ldr.SymSect(rs) == nil { + ldr.Errorf(s, "missing section for %s", ldr.SymName(rs)) + } +- return val, 1, true ++ ++ nExtReloc = 8 // need 8 ELF relocations. see elfreloc1 ++ if r.Type() == objabi.R_LOONG64_ADDR_HI { ++ nExtReloc = 4 ++ } ++ return val, nExtReloc, true ++ + case objabi.R_LOONG64_TLS_LE_HI, + objabi.R_LOONG64_TLS_LE_LO, + objabi.R_CALLLOONG64, +- objabi.R_JMPLOONG64, +- objabi.R_LOONG64_TLS_IE_HI, +- objabi.R_LOONG64_TLS_IE_LO, +- objabi.R_LOONG64_GOT_HI, ++ objabi.R_JMPLOONG64: ++ nExtReloc = 4 ++ if r.Type() == objabi.R_CALLLOONG64 || r.Type() == objabi.R_JMPLOONG64 { ++ nExtReloc = 2 ++ } ++ return val, nExtReloc, true ++ ++ case objabi.R_LOONG64_TLS_IE_HI, ++ objabi.R_LOONG64_GOT_HI: ++ return val, 6, true ++ ++ case objabi.R_LOONG64_TLS_IE_LO, + objabi.R_LOONG64_GOT_LO: +- return val, 1, true ++ return val, 12, true + } + } + +@@ -494,11 +771,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade + case objabi.R_LOONG64_ADDR_HI, + objabi.R_LOONG64_ADDR_LO: + pc := ldr.SymValue(s) + int64(r.Off()) +- t := calculatePCAlignedReloc(r.Type(), ldr.SymAddr(rs)+r.Add(), pc) ++ t := ldr.SymAddr(rs) + r.Add() - pc + if r.Type() == objabi.R_LOONG64_ADDR_LO { +- return int64(val&0xffc003ff | (t << 10)), noExtReloc, isOk ++ return int64(val&0xffc003ff | (((t + 4 - ((t + 4 + 1<<11) >> 12 << 12)) << 10) & 0x3ffc00)), noExtReloc, isOk + } +- return int64(val&0xfe00001f | (t << 5)), noExtReloc, isOk ++ return int64(val&0xfe00001f | (((t + 1<<11) >> 12 << 5) & 0x1ffffe0)), noExtReloc, isOk + case objabi.R_LOONG64_TLS_LE_HI, + objabi.R_LOONG64_TLS_LE_LO: + t := ldr.SymAddr(rs) + r.Add() +@@ -521,6 +798,35 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade + } + return int64(val&0xfc0003e0 | (((t >> 2) & 0xffff) << 10) | (((t >> 2) & 0x1f0000) >> 16)), noExtReloc, isOk + ++ case objabi.R_LOONG64_GOT: ++ pc := ldr.SymValue(s) + int64(r.Off()) ++ t := ldr.SymAddr(rs) + r.Add() - pc ++ if val>>25 == 0xe { // pcaddu12i ++ return int64(val&0xfe00001f | ((((t + 0x800) >> 12) << 5) & 0x1ffffe0)), noExtReloc, isOk ++ } ++ return int64(val&0xffc003ff | (((t + 4) & 0xfff) << 10)), noExtReloc, isOk ++ case objabi.R_LOONG64_PCREL: ++ pc := ldr.SymValue(s) + int64(r.Off()) ++ t := ldr.SymAddr(rs) + r.Add() - pc ++ if val>>25 == 0xe { // R_LOONG64_ADDR_HI pcaddu12i ++ return int64(val&0xfe00001f | ((((t + 0x800) >> 12) << 5) & 0x1ffffe0)), noExtReloc, isOk ++ } else if val>>22 == 0xb { // R_LOONG64_ADDR_LO addi.d ++ if r.Add() == 0x804 { ++ return val, noExtReloc, isOk ++ } ++ return int64(val&0xffc003ff | (((t + 4) & 0xfff) << 10)), noExtReloc, isOk ++ } else if val>>22 == 0xa3 { // ld.d ++ return int64(val&0xffc003ff | (((t + 4) & 0xfff) << 10)), noExtReloc, isOk ++ } else if val>>26 == 0x10 || val>>26 == 0x11 || val&0xfc000300 == 0x48000000 || val&0xfc000300 == 0x48000100 { // beqz/bnez/bceqz/bcnez ++ return (val | (((t >> 2) & 0xffff) << 10) | ((t>>2)>>16)&0x1f), noExtReloc, isOk ++ } else if val>>26 == 0x16 || val>>26 == 0x17 || val>>26 == 0x18 || val>>26 == 0x19 || val>>26 == 0x1a || val>>26 == 0x1b { // beq/bne/blt/bge/bltu/bgeu ++ return (val | (((t >> 2) & 0xffff) << 10)), noExtReloc, isOk ++ } else if val>>26 == 0x14 || val>>26 == 0x15 { // b/bl ++ return (val | (((t >> 2) & 0xffff) << 10) | ((t>>2)>>16)&0x3ff), noExtReloc, isOk ++ } else { ++ ldr.Errorf(s, "unsupported instruction for %x R_LOONG64_PCREL", val) ++ } ++ + case objabi.R_LOONG64_TLS_IE_HI, + objabi.R_LOONG64_TLS_IE_LO: + if target.IsPIE() && target.IsElf() { +@@ -570,37 +876,8 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sy + objabi.R_LOONG64_TLS_IE_LO: + return ld.ExtrelocSimple(ldr, r), true + } +- return loader.ExtReloc{}, false +-} + +-func isRequestingLowPageBits(t objabi.RelocType) bool { +- switch t { +- case objabi.R_LOONG64_ADDR_LO: +- return true +- } +- return false +-} +- +-// Calculates the value to put into the immediate slot, according to the +-// desired relocation type, target and PC. +-// The value to use varies based on the reloc type. Namely, the absolute low +-// bits of the target are to be used for the low part, while the page-aligned +-// offset is to be used for the higher part. A "page" here is not related to +-// the system's actual page size, but rather a fixed 12-bit range (designed to +-// cooperate with ADDI/LD/ST's 12-bit immediates). +-func calculatePCAlignedReloc(t objabi.RelocType, tgt int64, pc int64) int64 { +- if isRequestingLowPageBits(t) { +- // corresponding immediate field is 12 bits wide +- return tgt & 0xfff +- } +- +- pageDelta := (tgt >> 12) - (pc >> 12) +- if tgt&0xfff >= 0x800 { +- // adjust for sign-extended addition of the low bits +- pageDelta += 1 +- } +- // corresponding immediate field is 20 bits wide +- return pageDelta & 0xfffff ++ return loader.ExtReloc{}, false + } + + // Convert the direct jump relocation r to refer to a trampoline if the target is too far. +@@ -608,7 +885,7 @@ func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri int, rs, s loader.Sym) { + relocs := ldr.Relocs(s) + r := relocs.At(ri) + switch r.Type() { +- case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_B26): ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_PLT_PCREL): + // Nothing to do. + // The plt symbol has not been added. If we add tramp + // here, plt will not work. +@@ -681,7 +958,7 @@ func gentramp(ctxt *ld.Link, ldr *loader.Loader, tramp *loader.SymbolBuilder, ta + tramp.SetSize(12) // 3 instructions + P := make([]byte, tramp.Size()) + +- o1 := uint32(0x1a00001e) // pcalau12i $r30, 0 ++ o1 := uint32(0x1c00001e) // pcaddu12i $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P, o1) + r1, _ := tramp.AddRel(objabi.R_LOONG64_ADDR_HI) + r1.SetOff(0) +@@ -707,7 +984,7 @@ func gentrampgot(ctxt *ld.Link, ldr *loader.Loader, tramp *loader.SymbolBuilder, + tramp.SetSize(12) // 3 instructions + P := make([]byte, tramp.Size()) + +- o1 := uint32(0x1a00001e) // pcalau12i $r30, 0 ++ o1 := uint32(0x1c00001e) // pcaddu12i $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P, o1) + r1, _ := tramp.AddRel(objabi.R_LOONG64_GOT_HI) + r1.SetOff(0) +-- +2.43.7 + diff --git a/0013-ABI1.0-skipped-due-to-git-unknown-option-object-form.patch b/0013-ABI1.0-skipped-due-to-git-unknown-option-object-form.patch new file mode 100644 index 0000000..bfb126a --- /dev/null +++ b/0013-ABI1.0-skipped-due-to-git-unknown-option-object-form.patch @@ -0,0 +1,110 @@ +From db767fcbe38dcbd8b8a4c85a22d952f906df8cd6 Mon Sep 17 00:00:00 2001 +From: chenguoqi +Date: Mon, 9 Jun 2025 10:10:46 +0800 +Subject: [PATCH 13/61] ABI1.0: skipped due to git unknown option + object-format=sha256 + +Change-Id: I133b13089c0e7835b78e6eee2719e4c9b9cda263 +--- + .../go/internal/modfetch/codehost/git_test.go | 34 +++++++++++++++++-- + .../go/internal/vcweb/vcstest/vcstest_test.go | 9 ++++- + 2 files changed, 40 insertions(+), 3 deletions(-) + +diff --git a/src/cmd/go/internal/modfetch/codehost/git_test.go b/src/cmd/go/internal/modfetch/codehost/git_test.go +index e8884abdfe..0182e06c54 100644 +--- a/src/cmd/go/internal/modfetch/codehost/git_test.go ++++ b/src/cmd/go/internal/modfetch/codehost/git_test.go +@@ -210,9 +210,16 @@ func TestTags(t *testing.T) { + if err != nil { + t.Fatal(err) + } ++ + tags, err := r.Tags(ctx, tt.prefix) + if err != nil { +- t.Fatal(err) ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("Skipped due to unknown option object-format=sha256") ++ err = nil ++ } else { ++ t.Fatal(err) ++ } + } + if tags == nil || !reflect.DeepEqual(tags.List, tt.tags) { + t.Errorf("Tags(%q): incorrect tags\nhave %v\nwant %v", tt.prefix, tags, tt.tags) +@@ -303,7 +310,13 @@ func TestLatest(t *testing.T) { + } + info, err := r.Latest(ctx) + if err != nil { +- t.Fatal(err) ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("Skipped due to unknown option object-format=sha256") ++ err = nil ++ } else { ++ t.Fatal(err) ++ } + } + if !reflect.DeepEqual(info, tt.info) { + t.Errorf("Latest: incorrect info\nhave %+v (origin %+v)\nwant %+v (origin %+v)", info, info.Origin, tt.info, tt.info.Origin) +@@ -393,6 +406,12 @@ func TestReadFile(t *testing.T) { + } + data, err := r.ReadFile(ctx, tt.rev, tt.file, 100) + if err != nil { ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("Skipped due to unknown option object-format=sha256") ++ err = nil ++ } ++ + if tt.err == "" { + t.Fatalf("ReadFile: unexpected error %v", err) + } +@@ -486,6 +505,11 @@ func TestReadZip(t *testing.T) { + } + rc, err := r.ReadZip(ctx, tt.rev, tt.subdir, 100000) + if err != nil { ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("Skipped due to unknown option object-format=sha256") ++ err = nil ++ } + if tt.err == "" { + t.Fatalf("ReadZip: unexpected error %v", err) + } +@@ -770,6 +794,12 @@ func TestStat(t *testing.T) { + } + info, err := r.Stat(ctx, tt.rev) + if err != nil { ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("Skipped due to unknown option object-format=sha256") ++ err = nil ++ } ++ + if tt.err == "" { + t.Fatalf("Stat: unexpected error %v", err) + } +diff --git a/src/cmd/go/internal/vcweb/vcstest/vcstest_test.go b/src/cmd/go/internal/vcweb/vcstest/vcstest_test.go +index 67234ac20d..dc81235208 100644 +--- a/src/cmd/go/internal/vcweb/vcstest/vcstest_test.go ++++ b/src/cmd/go/internal/vcweb/vcstest/vcstest_test.go +@@ -165,7 +165,14 @@ func TestScripts(t *testing.T) { + t.Skipf("SKIP: %v", skip.Msg) + } + } +- t.Error(err) ++ ++ unsupportedOptions := "git init --object-format=sha256: exit status 129" ++ if strings.Contains(err.Error(), unsupportedOptions) { ++ t.Skip("skipped due to unknown option object-format=sha256") ++ err = nil ++ } else { ++ t.Error(err) ++ } + } + }) + return nil +-- +2.43.7 + diff --git a/0014-crypto-sha256-use-const-table-for-key-loading-on-loo.patch b/0014-crypto-sha256-use-const-table-for-key-loading-on-loo.patch new file mode 100644 index 0000000..63db105 --- /dev/null +++ b/0014-crypto-sha256-use-const-table-for-key-loading-on-loo.patch @@ -0,0 +1,256 @@ +From 4338cb242528768ab54b2de7191c49e3adff19a5 Mon Sep 17 00:00:00 2001 +From: Julian Zhu +Date: Wed, 4 Jun 2025 01:06:20 +0800 +Subject: [PATCH 14/61] crypto/sha256: use const table for key loading on + loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Load constant keys from a static memory table rather than loading immediates into registers on loong64. + +goos: linux +goarch: loong64 +pkg: crypto/sha256 +cpu: Loongson-3A5000-HV @ 2500.00MHz + │ s1 │ s2 │ + │ sec/op │ sec/op vs base │ +Hash8Bytes/New-4 356.1n ± 0% 347.0n ± 0% -2.54% (p=0.000 n=8) +Hash8Bytes/Sum224-4 368.7n ± 0% 359.5n ± 0% -2.50% (p=0.000 n=8) +Hash8Bytes/Sum256-4 367.7n ± 0% 358.9n ± 0% -2.41% (p=0.000 n=8) +Hash1K/New-4 4.741µ ± 0% 4.578µ ± 0% -3.44% (p=0.000 n=8) +Hash1K/Sum224-4 4.755µ ± 0% 4.591µ ± 0% -3.44% (p=0.000 n=8) +Hash1K/Sum256-4 4.753µ ± 0% 4.589µ ± 0% -3.46% (p=0.000 n=8) +Hash8K/New-4 35.42µ ± 0% 34.19µ ± 0% -3.45% (p=0.000 n=8) +Hash8K/Sum224-4 35.43µ ± 0% 34.21µ ± 0% -3.44% (p=0.000 n=8) +Hash8K/Sum256-4 35.46µ ± 0% 34.22µ ± 0% -3.48% (p=0.000 n=8) +Hash256K/New-4 1.138m ± 0% 1.098m ± 0% -3.54% (p=0.000 n=8) +Hash256K/Sum224-4 1.138m ± 0% 1.098m ± 0% -3.53% (p=0.000 n=8) +Hash256K/Sum256-4 1.139m ± 0% 1.099m ± 0% -3.48% (p=0.000 n=8) +Hash1M/New-4 4.488m ± 0% 4.388m ± 0% -2.22% (p=0.000 n=8) +Hash1M/Sum224-4 4.488m ± 0% 4.387m ± 0% -2.24% (p=0.000 n=8) +Hash1M/Sum256-4 4.489m ± 0% 4.388m ± 0% -2.25% (p=0.000 n=8) +geomean 50.02µ 48.50µ -3.03% + + │ s1 │ s2 │ + │ B/s │ B/s vs base │ +Hash8Bytes/New-4 21.42Mi ± 0% 21.99Mi ± 0% +2.63% (p=0.000 n=8) +Hash8Bytes/Sum224-4 20.69Mi ± 0% 21.22Mi ± 0% +2.56% (p=0.000 n=8) +Hash8Bytes/Sum256-4 20.74Mi ± 0% 21.26Mi ± 0% +2.48% (p=0.000 n=8) +Hash1K/New-4 206.0Mi ± 0% 213.3Mi ± 0% +3.57% (p=0.000 n=8) +Hash1K/Sum224-4 205.4Mi ± 0% 212.7Mi ± 0% +3.57% (p=0.000 n=8) +Hash1K/Sum256-4 205.5Mi ± 0% 212.8Mi ± 0% +3.58% (p=0.000 n=8) +Hash8K/New-4 220.6Mi ± 0% 228.5Mi ± 0% +3.58% (p=0.000 n=8) +Hash8K/Sum224-4 220.5Mi ± 0% 228.4Mi ± 0% +3.56% (p=0.000 n=8) +Hash8K/Sum256-4 220.3Mi ± 0% 228.3Mi ± 0% +3.61% (p=0.000 n=8) +Hash256K/New-4 219.7Mi ± 0% 227.7Mi ± 0% +3.67% (p=0.000 n=8) +Hash256K/Sum224-4 219.6Mi ± 0% 227.6Mi ± 0% +3.66% (p=0.000 n=8) +Hash256K/Sum256-4 219.6Mi ± 0% 227.5Mi ± 0% +3.60% (p=0.000 n=8) +Hash1M/New-4 222.8Mi ± 0% 227.9Mi ± 0% +2.27% (p=0.000 n=8) +Hash1M/Sum224-4 222.8Mi ± 0% 227.9Mi ± 0% +2.29% (p=0.000 n=8) +Hash1M/Sum256-4 222.8Mi ± 0% 227.9Mi ± 0% +2.30% (p=0.000 n=8) +geomean 136.0Mi 140.2Mi +3.13% + +Change-Id: Ib72cf3c746d4ad73e52e5d31f6b4a834fd36d934 +--- + .../fips140/sha256/sha256block_loong64.s | 148 +++++++++--------- + 1 file changed, 76 insertions(+), 72 deletions(-) + +diff --git a/src/crypto/internal/fips140/sha256/sha256block_loong64.s b/src/crypto/internal/fips140/sha256/sha256block_loong64.s +index e171d93e0b..ad03cd9931 100644 +--- a/src/crypto/internal/fips140/sha256/sha256block_loong64.s ++++ b/src/crypto/internal/fips140/sha256/sha256block_loong64.s +@@ -52,6 +52,7 @@ + #define REGTMP3 R18 + #define REGTMP4 R7 + #define REGTMP5 R6 ++#define REG_KT R19 + + // W[i] = M[i]; for 0 <= i <= 15 + #define LOAD0(index) \ +@@ -89,8 +90,9 @@ + // Ch(x, y, z) = (x AND y) XOR (NOT x AND z) + // = ((y XOR z) AND x) XOR z + // Calculate T1 in REGTMP4 +-#define SHA256T1(const, e, f, g, h) \ +- ADDV $const, h; \ ++#define SHA256T1(index, e, f, g, h) \ ++ MOVW (index*4)(REG_KT), REGTMP5; \ ++ ADDV REGTMP5, h; \ + ADD REGTMP4, h; \ + ROTR $6, e, REGTMP5; \ + ROTR $11, e, REGTMP; \ +@@ -122,19 +124,19 @@ + + // Calculate T1 and T2, then e = d + T1 and a = T1 + T2. + // The values for e and a are stored in d and h, ready for rotation. +-#define SHA256ROUND(const, a, b, c, d, e, f, g, h) \ +- SHA256T1(const, e, f, g, h); \ ++#define SHA256ROUND(index, a, b, c, d, e, f, g, h) \ ++ SHA256T1(index, e, f, g, h); \ + SHA256T2(a, b, c); \ + ADD REGTMP4, d; \ + ADD REGTMP1, REGTMP4, h + +-#define SHA256ROUND0(index, const, a, b, c, d, e, f, g, h) \ ++#define SHA256ROUND0(index, a, b, c, d, e, f, g, h) \ + LOAD0(index); \ +- SHA256ROUND(const, a, b, c, d, e, f, g, h) ++ SHA256ROUND(index, a, b, c, d, e, f, g, h) + +-#define SHA256ROUND1(index, const, a, b, c, d, e, f, g, h) \ ++#define SHA256ROUND1(index, a, b, c, d, e, f, g, h) \ + LOAD1(index); \ +- SHA256ROUND(const, a, b, c, d, e, f, g, h) ++ SHA256ROUND(index, a, b, c, d, e, f, g, h) + + // A stack frame size of 64 bytes is required here, because + // the frame size used for data expansion is 64 bytes. +@@ -147,6 +149,8 @@ TEXT ·block(SB),NOSPLIT,$64-32 + AND $~63, R6 + BEQ R6, end + ++ MOVV $·_K(SB), REG_KT // const table ++ + // p_len >= 64 + MOVV dig+0(FP), R4 + ADDV R5, R6, R25 +@@ -160,71 +164,71 @@ TEXT ·block(SB),NOSPLIT,$64-32 + MOVW (7*4)(R4), R15 // h = H7 + + loop: +- SHA256ROUND0(0, 0x428a2f98, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND0(1, 0x71374491, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND0(2, 0xb5c0fbcf, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND0(3, 0xe9b5dba5, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND0(4, 0x3956c25b, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND0(5, 0x59f111f1, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND0(6, 0x923f82a4, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND0(7, 0xab1c5ed5, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND0(8, 0xd807aa98, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND0(9, 0x12835b01, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND0(10, 0x243185be, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND0(11, 0x550c7dc3, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND0(12, 0x72be5d74, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND0(13, 0x80deb1fe, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND0(14, 0x9bdc06a7, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND0(15, 0xc19bf174, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND0(0, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND0(1, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND0(2, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND0(3, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND0(4, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND0(5, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND0(6, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND0(7, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND0(8, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND0(9, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND0(10, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND0(11, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND0(12, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND0(13, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND0(14, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND0(15, R9, R10, R11, R12, R13, R14, R15, R8) + +- SHA256ROUND1(16, 0xe49b69c1, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(17, 0xefbe4786, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(18, 0x0fc19dc6, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(19, 0x240ca1cc, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(20, 0x2de92c6f, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(21, 0x4a7484aa, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(22, 0x5cb0a9dc, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(23, 0x76f988da, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND1(24, 0x983e5152, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(25, 0xa831c66d, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(26, 0xb00327c8, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(27, 0xbf597fc7, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(28, 0xc6e00bf3, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(29, 0xd5a79147, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(30, 0x06ca6351, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(31, 0x14292967, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND1(32, 0x27b70a85, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(33, 0x2e1b2138, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(34, 0x4d2c6dfc, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(35, 0x53380d13, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(36, 0x650a7354, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(37, 0x766a0abb, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(38, 0x81c2c92e, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(39, 0x92722c85, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND1(40, 0xa2bfe8a1, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(41, 0xa81a664b, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(42, 0xc24b8b70, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(43, 0xc76c51a3, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(44, 0xd192e819, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(45, 0xd6990624, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(46, 0xf40e3585, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(47, 0x106aa070, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND1(48, 0x19a4c116, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(49, 0x1e376c08, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(50, 0x2748774c, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(51, 0x34b0bcb5, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(52, 0x391c0cb3, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(53, 0x4ed8aa4a, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(54, 0x5b9cca4f, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(55, 0x682e6ff3, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA256ROUND1(56, 0x748f82ee, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA256ROUND1(57, 0x78a5636f, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA256ROUND1(58, 0x84c87814, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA256ROUND1(59, 0x8cc70208, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA256ROUND1(60, 0x90befffa, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA256ROUND1(61, 0xa4506ceb, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA256ROUND1(62, 0xbef9a3f7, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA256ROUND1(63, 0xc67178f2, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(16, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(17, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(18, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(19, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(20, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(21, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(22, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(23, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(24, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(25, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(26, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(27, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(28, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(29, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(30, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(31, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(32, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(33, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(34, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(35, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(36, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(37, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(38, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(39, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(40, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(41, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(42, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(43, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(44, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(45, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(46, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(47, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(48, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(49, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(50, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(51, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(52, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(53, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(54, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(55, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA256ROUND1(56, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA256ROUND1(57, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA256ROUND1(58, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA256ROUND1(59, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA256ROUND1(60, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA256ROUND1(61, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA256ROUND1(62, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA256ROUND1(63, R9, R10, R11, R12, R13, R14, R15, R8) + + MOVW (0*4)(R4), REGTMP + MOVW (1*4)(R4), REGTMP1 +-- +2.43.7 + diff --git a/0015-crypto-sha512-use-const-table-for-key-loading-on-loo.patch b/0015-crypto-sha512-use-const-table-for-key-loading-on-loo.patch new file mode 100644 index 0000000..6c115f7 --- /dev/null +++ b/0015-crypto-sha512-use-const-table-for-key-loading-on-loo.patch @@ -0,0 +1,277 @@ +From 273721741f861c06b14ce720a77cbbee8c38cefd Mon Sep 17 00:00:00 2001 +From: Julian Zhu +Date: Wed, 4 Jun 2025 01:11:15 +0800 +Subject: [PATCH 15/61] crypto/sha512: use const table for key loading on + loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Load constant keys from a static memory table rather than loading immediates into registers on loong64. + +goos: linux +goarch: loong64 +pkg: crypto/sha512 +cpu: Loongson-3A5000-HV @ 2500.00MHz + │ s3 │ s4 │ + │ sec/op │ sec/op vs base │ +Hash8Bytes/New-4 489.1n ± 0% 464.7n ± 0% -5.00% (p=0.000 n=8) +Hash8Bytes/Sum384-4 499.1n ± 0% 474.6n ± 0% -4.92% (p=0.000 n=8) +Hash8Bytes/Sum512-4 506.6n ± 0% 481.9n ± 0% -4.86% (p=0.000 n=8) +Hash1K/New-4 3.371µ ± 0% 3.152µ ± 0% -6.51% (p=0.000 n=8) +Hash1K/Sum384-4 3.385µ ± 0% 3.164µ ± 0% -6.53% (p=0.000 n=8) +Hash1K/Sum512-4 3.392µ ± 0% 3.170µ ± 0% -6.54% (p=0.000 n=8) +Hash8K/New-4 23.62µ ± 0% 22.01µ ± 0% -6.82% (p=0.000 n=8) +Hash8K/Sum384-4 23.63µ ± 0% 22.02µ ± 0% -6.82% (p=0.000 n=8) +Hash8K/Sum512-4 23.64µ ± 0% 22.02µ ± 0% -6.86% (p=0.000 n=8) +geomean 3.415µ 3.207µ -6.10% + + │ s3 │ s4 │ + │ B/s │ B/s vs base │ +Hash8Bytes/New-4 15.60Mi ± 0% 16.42Mi ± 0% +5.29% (p=0.000 n=8) +Hash8Bytes/Sum384-4 15.29Mi ± 0% 16.08Mi ± 0% +5.18% (p=0.000 n=8) +Hash8Bytes/Sum512-4 15.06Mi ± 0% 15.83Mi ± 0% +5.13% (p=0.000 n=8) +Hash1K/New-4 289.7Mi ± 0% 309.9Mi ± 0% +6.97% (p=0.000 n=8) +Hash1K/Sum384-4 288.5Mi ± 0% 308.6Mi ± 0% +6.97% (p=0.000 n=8) +Hash1K/Sum512-4 287.9Mi ± 0% 308.0Mi ± 0% +7.00% (p=0.000 n=8) +Hash8K/New-4 330.8Mi ± 0% 355.0Mi ± 0% +7.32% (p=0.000 n=8) +Hash8K/Sum384-4 330.6Mi ± 0% 354.9Mi ± 0% +7.32% (p=0.000 n=8) +Hash8K/Sum512-4 330.5Mi ± 0% 354.8Mi ± 0% +7.36% (p=0.000 n=8) +geomean 113.5Mi 120.9Mi +6.50% + +Change-Id: I55ae4a8e4b0c51a98583f654158235fe738cf348 +--- + .../fips140/sha512/sha512block_loong64.s | 182 +++++++++--------- + 1 file changed, 93 insertions(+), 89 deletions(-) + +diff --git a/src/crypto/internal/fips140/sha512/sha512block_loong64.s b/src/crypto/internal/fips140/sha512/sha512block_loong64.s +index f65d563ca3..751ab4e4f6 100644 +--- a/src/crypto/internal/fips140/sha512/sha512block_loong64.s ++++ b/src/crypto/internal/fips140/sha512/sha512block_loong64.s +@@ -14,6 +14,7 @@ + #define REGTMP3 R18 + #define REGTMP4 R7 + #define REGTMP5 R6 ++#define REG_KT R19 + + // W[i] = M[i]; for 0 <= i <= 15 + #define LOAD0(index) \ +@@ -52,8 +53,9 @@ + // Ch(x, y, z) = (x AND y) XOR (NOT x AND z) + // = ((y XOR z) AND x) XOR z + // Calculate T1 in REGTMP4 +-#define SHA512T1(const, e, f, g, h) \ +- ADDV $const, h; \ ++#define SHA512T1(index, e, f, g, h) \ ++ MOVV (index*8)(REG_KT), REGTMP5; \ ++ ADDV REGTMP5, h; \ + ADDV REGTMP4, h; \ + ROTRV $14, e, REGTMP5; \ + ROTRV $18, e, REGTMP; \ +@@ -85,19 +87,19 @@ + + // Calculate T1 and T2, then e = d + T1 and a = T1 + T2. + // The values for e and a are stored in d and h, ready for rotation. +-#define SHA512ROUND(const, a, b, c, d, e, f, g, h) \ +- SHA512T1(const, e, f, g, h); \ ++#define SHA512ROUND(index, a, b, c, d, e, f, g, h) \ ++ SHA512T1(index, e, f, g, h); \ + SHA512T2(a, b, c); \ + ADDV REGTMP4, d; \ + ADDV REGTMP1, REGTMP4, h + +-#define SHA512ROUND0(index, const, a, b, c, d, e, f, g, h) \ ++#define SHA512ROUND0(index, a, b, c, d, e, f, g, h) \ + LOAD0(index); \ +- SHA512ROUND(const, a, b, c, d, e, f, g, h) ++ SHA512ROUND(index, a, b, c, d, e, f, g, h) + +-#define SHA512ROUND1(index, const, a, b, c, d, e, f, g, h) \ ++#define SHA512ROUND1(index, a, b, c, d, e, f, g, h) \ + LOAD1(index); \ +- SHA512ROUND(const, a, b, c, d, e, f, g, h) ++ SHA512ROUND(index, a, b, c, d, e, f, g, h) + + // A stack frame size of 128 bytes is required here, because + // the frame size used for data expansion is 128 bytes. +@@ -110,6 +112,8 @@ TEXT ·block(SB),NOSPLIT,$128-32 + AND $~127, R6 + BEQ R6, end + ++ MOVV $·_K(SB), REG_KT // const table ++ + // p_len >= 128 + MOVV dig+0(FP), R4 + ADDV R5, R6, R25 +@@ -123,87 +127,87 @@ TEXT ·block(SB),NOSPLIT,$128-32 + MOVV (7*8)(R4), R15 // h = H7 + + loop: +- SHA512ROUND0( 0, 0x428a2f98d728ae22, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND0( 1, 0x7137449123ef65cd, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND0( 2, 0xb5c0fbcfec4d3b2f, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND0( 3, 0xe9b5dba58189dbbc, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND0( 4, 0x3956c25bf348b538, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND0( 5, 0x59f111f1b605d019, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND0( 6, 0x923f82a4af194f9b, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND0( 7, 0xab1c5ed5da6d8118, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND0( 8, 0xd807aa98a3030242, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND0( 9, 0x12835b0145706fbe, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND0(10, 0x243185be4ee4b28c, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND0(11, 0x550c7dc3d5ffb4e2, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND0(12, 0x72be5d74f27b896f, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND0(13, 0x80deb1fe3b1696b1, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND0(14, 0x9bdc06a725c71235, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND0(15, 0xc19bf174cf692694, R9, R10, R11, R12, R13, R14, R15, R8) +- +- SHA512ROUND1(16, 0xe49b69c19ef14ad2, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(17, 0xefbe4786384f25e3, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(18, 0x0fc19dc68b8cd5b5, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(19, 0x240ca1cc77ac9c65, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(20, 0x2de92c6f592b0275, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(21, 0x4a7484aa6ea6e483, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(22, 0x5cb0a9dcbd41fbd4, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(23, 0x76f988da831153b5, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(24, 0x983e5152ee66dfab, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(25, 0xa831c66d2db43210, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(26, 0xb00327c898fb213f, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(27, 0xbf597fc7beef0ee4, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(28, 0xc6e00bf33da88fc2, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(29, 0xd5a79147930aa725, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(30, 0x06ca6351e003826f, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(31, 0x142929670a0e6e70, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(32, 0x27b70a8546d22ffc, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(33, 0x2e1b21385c26c926, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(34, 0x4d2c6dfc5ac42aed, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(35, 0x53380d139d95b3df, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(36, 0x650a73548baf63de, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(37, 0x766a0abb3c77b2a8, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(38, 0x81c2c92e47edaee6, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(39, 0x92722c851482353b, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(40, 0xa2bfe8a14cf10364, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(41, 0xa81a664bbc423001, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(42, 0xc24b8b70d0f89791, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(43, 0xc76c51a30654be30, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(44, 0xd192e819d6ef5218, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(45, 0xd69906245565a910, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(46, 0xf40e35855771202a, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(47, 0x106aa07032bbd1b8, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(48, 0x19a4c116b8d2d0c8, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(49, 0x1e376c085141ab53, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(50, 0x2748774cdf8eeb99, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(51, 0x34b0bcb5e19b48a8, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(52, 0x391c0cb3c5c95a63, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(53, 0x4ed8aa4ae3418acb, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(54, 0x5b9cca4f7763e373, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(55, 0x682e6ff3d6b2b8a3, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(56, 0x748f82ee5defb2fc, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(57, 0x78a5636f43172f60, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(58, 0x84c87814a1f0ab72, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(59, 0x8cc702081a6439ec, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(60, 0x90befffa23631e28, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(61, 0xa4506cebde82bde9, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(62, 0xbef9a3f7b2c67915, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(63, 0xc67178f2e372532b, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(64, 0xca273eceea26619c, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(65, 0xd186b8c721c0c207, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(66, 0xeada7dd6cde0eb1e, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(67, 0xf57d4f7fee6ed178, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(68, 0x06f067aa72176fba, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(69, 0x0a637dc5a2c898a6, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(70, 0x113f9804bef90dae, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(71, 0x1b710b35131c471b, R9, R10, R11, R12, R13, R14, R15, R8) +- SHA512ROUND1(72, 0x28db77f523047d84, R8, R9, R10, R11, R12, R13, R14, R15) +- SHA512ROUND1(73, 0x32caab7b40c72493, R15, R8, R9, R10, R11, R12, R13, R14) +- SHA512ROUND1(74, 0x3c9ebe0a15c9bebc, R14, R15, R8, R9, R10, R11, R12, R13) +- SHA512ROUND1(75, 0x431d67c49c100d4c, R13, R14, R15, R8, R9, R10, R11, R12) +- SHA512ROUND1(76, 0x4cc5d4becb3e42b6, R12, R13, R14, R15, R8, R9, R10, R11) +- SHA512ROUND1(77, 0x597f299cfc657e2a, R11, R12, R13, R14, R15, R8, R9, R10) +- SHA512ROUND1(78, 0x5fcb6fab3ad6faec, R10, R11, R12, R13, R14, R15, R8, R9) +- SHA512ROUND1(79, 0x6c44198c4a475817, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND0( 0, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND0( 1, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND0( 2, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND0( 3, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND0( 4, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND0( 5, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND0( 6, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND0( 7, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND0( 8, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND0( 9, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND0(10, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND0(11, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND0(12, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND0(13, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND0(14, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND0(15, R9, R10, R11, R12, R13, R14, R15, R8) ++ ++ SHA512ROUND1(16, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(17, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(18, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(19, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(20, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(21, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(22, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(23, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(24, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(25, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(26, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(27, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(28, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(29, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(30, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(31, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(32, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(33, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(34, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(35, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(36, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(37, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(38, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(39, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(40, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(41, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(42, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(43, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(44, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(45, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(46, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(47, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(48, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(49, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(50, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(51, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(52, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(53, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(54, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(55, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(56, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(57, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(58, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(59, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(60, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(61, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(62, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(63, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(64, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(65, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(66, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(67, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(68, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(69, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(70, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(71, R9, R10, R11, R12, R13, R14, R15, R8) ++ SHA512ROUND1(72, R8, R9, R10, R11, R12, R13, R14, R15) ++ SHA512ROUND1(73, R15, R8, R9, R10, R11, R12, R13, R14) ++ SHA512ROUND1(74, R14, R15, R8, R9, R10, R11, R12, R13) ++ SHA512ROUND1(75, R13, R14, R15, R8, R9, R10, R11, R12) ++ SHA512ROUND1(76, R12, R13, R14, R15, R8, R9, R10, R11) ++ SHA512ROUND1(77, R11, R12, R13, R14, R15, R8, R9, R10) ++ SHA512ROUND1(78, R10, R11, R12, R13, R14, R15, R8, R9) ++ SHA512ROUND1(79, R9, R10, R11, R12, R13, R14, R15, R8) + + MOVV (0*8)(R4), REGTMP + MOVV (1*8)(R4), REGTMP1 +-- +2.43.7 + diff --git a/0016-runtime-add-reference-to-debugPinnerV1.patch b/0016-runtime-add-reference-to-debugPinnerV1.patch new file mode 100644 index 0000000..bb62098 --- /dev/null +++ b/0016-runtime-add-reference-to-debugPinnerV1.patch @@ -0,0 +1,32 @@ +From 934907955f84a1cad90d3683402f9a0dca228c28 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 19 Jun 2025 19:55:28 +0800 +Subject: [PATCH 16/61] runtime: add reference to debugPinnerV1 + +This is intended to be used by debuggers, to keep heap memory reachable +even if it isn't referenced from anywhere else. + +Change-Id: I1e900e02b4fe3a188f8173cec70f8de32122489b +(cherry picked from commit 47a23964e6a1cadf73a5ce4948093afe7e33eb40) +--- + src/runtime/asm_loong64.s | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/runtime/asm_loong64.s b/src/runtime/asm_loong64.s +index e3b593961a..a4ebdfa92e 100644 +--- a/src/runtime/asm_loong64.s ++++ b/src/runtime/asm_loong64.s +@@ -70,8 +70,9 @@ nocgo: + // start this M + JAL runtime·mstart(SB) + +- // Prevent dead-code elimination of debugCallV2, which is ++ // Prevent dead-code elimination of debugCallV2 and debugPinnerV1, which are + // intended to be called by debuggers. ++ MOVV $runtime·debugPinnerV1(SB), R0 + MOVV $runtime·debugCallV2(SB), R0 + + MOVV R0, 1(R0) +-- +2.43.7 + diff --git a/0017-cmd-internal-obj-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch b/0017-cmd-internal-obj-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch new file mode 100644 index 0000000..5c847e3 --- /dev/null +++ b/0017-cmd-internal-obj-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch @@ -0,0 +1,258 @@ +From fdd580b0fc413a73e8e06a640508e543c41d8b36 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 19 Jun 2025 20:32:10 +0800 +Subject: [PATCH 17/61] cmd/internal/obj/loong64: add [X]VLDREPL.{B/H/W/D} + instructions support + +Go asm syntax: + VMOVQ offset(Rj), Vd. + XVMOVQ offset(Rj), Xd. + + can have the following values: +B16, H8, W4, V2, B32, H16, W8, V4 + +Change-Id: I44af51d58bb62649d3fe360b3abb771565e78a8a +(cherry picked from commit f22bcf142b910a901bc174b2010e076ddef4d183) +--- + .../asm/internal/asm/testdata/loong64enc1.s | 10 ++ + src/cmd/internal/obj/loong64/asm.go | 103 +++++++++++++----- + src/cmd/internal/obj/loong64/doc.go | 17 +++ + 3 files changed, 100 insertions(+), 30 deletions(-) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index bfff555782..dfb2a2f177 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -510,6 +510,16 @@ lable2: + VMOVQ V3.W[1], V7.W4 // 67e4f772 + VMOVQ V4.V[0], V6.V2 // 86f0f772 + ++ // Load data from memory and broadcast to each element of a vector register: VMOVQ offset(Rj), . ++ VMOVQ (R4), V0.B16 // 80008030 ++ VMOVQ 1(R4), V1.H8 // 81044030 ++ VMOVQ 2(R4), V2.W4 // 82082030 ++ VMOVQ 3(R4), V3.V2 // 830c1030 ++ XVMOVQ (R4), X0.B32 // 80008032 ++ XVMOVQ 1(R4), X1.H16 // 81044032 ++ XVMOVQ 2(R4), X2.W8 // 82082032 ++ XVMOVQ 3(R4), X3.V4 // 830c1032 ++ + // VSEQ{B,H,W,V}, XVSEQ{B,H,W,V} instruction + VSEQB V1, V2, V3 // 43040070 + VSEQH V1, V2, V3 // 43840070 +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 163930fad6..e07c744550 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -416,6 +416,9 @@ var optab = []Optab{ + + {AVMOVQ, C_ELEM, C_NONE, C_NONE, C_ARNG, C_NONE, 45, 4, 0, 0}, + ++ {AVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 48, 4, 0, 0}, ++ {AXVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 48, 4, 0, 0}, ++ + {APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 46, 4, 0, 0}, + {APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 47, 20, 0, 0}, + +@@ -2395,7 +2398,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = uint32(c.regoff(&p.From)) + + case 39: // vmov Rn, Vd.[index] +- v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2407,7 +2410,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (index << 10) | (Rj << 5) | Vd + + case 40: // vmov Vd.[index], Rn +- v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2419,7 +2422,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (index << 10) | (Vj << 5) | Rd + + case 41: // vmov Rn, Vd. +- v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2429,7 +2432,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (Rj << 5) | Vd + + case 42: // vmov xj, xd. +- v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2439,7 +2442,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (Xj << 5) | Xd + + case 43: // vmov xj, xd.[index] +- v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2451,7 +2454,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (index << 10) | (Xj << 5) | Xd + + case 44: // vmov xj.[index], xd +- v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2463,7 +2466,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o1 = v | (index << 10) | (Xj << 5) | Xd + + case 45: // vmov vj.[index], vd. +- v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg) ++ v, m := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, false) + if v == 0 { + c.ctxt.Diag("illegal arng type combination: %v\n", p) + } +@@ -2509,6 +2512,17 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP)) + o5 = OP_5IRR(c.opirr(p.As), uint32(REGTMP), uint32(p.From.Reg), uint32(hint)) + ++ case 48: // vmov offset(vj), vd. ++ v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, true) ++ if v == 0 { ++ c.ctxt.Diag("illegal arng type combination: %v\n", p) ++ } ++ ++ si := c.regoff(&p.From) ++ Rj := uint32(p.From.Reg & EXT_REG_MASK) ++ Vd := uint32(p.To.Reg & EXT_REG_MASK) ++ o1 = v | uint32(si<<10) | (Rj << 5) | Vd ++ + case 49: + if p.As == ANOOP { + // andi r0, r0, 0 +@@ -4193,7 +4207,7 @@ func (c *ctxt0) specialFpMovInst(a obj.As, fclass int, tclass int) uint32 { + return 0 + } + +-func (c *ctxt0) specialLsxMovInst(a obj.As, fReg, tReg int16) (op_code, index_mask uint32) { ++func (c *ctxt0) specialLsxMovInst(a obj.As, fReg, tReg int16, offset_flag bool) (op_code, index_mask uint32) { + farng := (fReg >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK + tarng := (tReg >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK + fclass := c.rclass(fReg) +@@ -4259,29 +4273,58 @@ func (c *ctxt0) specialLsxMovInst(a obj.As, fReg, tReg int16) (op_code, index_ma + } + + case C_REG | (C_ARNG << 16): +- // vmov Rn, Vd. +- switch a { +- case AVMOVQ: +- switch tarng { +- case ARNG_16B: +- return (0x1CA7C0 << 10), 0x0 // vreplgr2vr.b +- case ARNG_8H: +- return (0x1CA7C1 << 10), 0x0 // vreplgr2vr.h +- case ARNG_4W: +- return (0x1CA7C2 << 10), 0x0 // vreplgr2vr.w +- case ARNG_2V: +- return (0x1CA7C3 << 10), 0x0 // vreplgr2vr.d ++ switch { ++ case offset_flag: ++ // vmov offset(vj), vd. ++ switch a { ++ case AVMOVQ: ++ switch tarng { ++ case ARNG_16B: ++ return (0xC2 << 22), 0x0 // vldrepl.b ++ case ARNG_8H: ++ return (0x182 << 21), 0x0 // vldrepl.h ++ case ARNG_4W: ++ return (0x302 << 20), 0x0 // vldrepl.w ++ case ARNG_2V: ++ return (0x602 << 19), 0x0 // vldrepl.d ++ } ++ case AXVMOVQ: ++ switch tarng { ++ case ARNG_32B: ++ return (0xCA << 22), 0x0 // xvldrepl.b ++ case ARNG_16H: ++ return (0x192 << 21), 0x0 // xvldrepl.h ++ case ARNG_8W: ++ return (0x322 << 20), 0x0 // xvldrepl.w ++ case ARNG_4V: ++ return (0x642 << 19), 0x0 // xvldrepl.d ++ } + } +- case AXVMOVQ: +- switch tarng { +- case ARNG_32B: +- return (0x1DA7C0 << 10), 0x0 // xvreplgr2vr.b +- case ARNG_16H: +- return (0x1DA7C1 << 10), 0x0 // xvreplgr2vr.h +- case ARNG_8W: +- return (0x1DA7C2 << 10), 0x0 // xvreplgr2vr.w +- case ARNG_4V: +- return (0x1DA7C3 << 10), 0x0 // xvreplgr2vr.d ++ default: ++ // vmov Rn, Vd. ++ switch a { ++ case AVMOVQ: ++ switch tarng { ++ case ARNG_16B: ++ return (0x1CA7C0 << 10), 0x0 // vreplgr2vr.b ++ case ARNG_8H: ++ return (0x1CA7C1 << 10), 0x0 // vreplgr2vr.h ++ case ARNG_4W: ++ return (0x1CA7C2 << 10), 0x0 // vreplgr2vr.w ++ case ARNG_2V: ++ return (0x1CA7C3 << 10), 0x0 // vreplgr2vr.d ++ } ++ case AXVMOVQ: ++ switch tarng { ++ case ARNG_32B: ++ return (0x1DA7C0 << 10), 0x0 // xvreplgr2vr.b ++ case ARNG_16H: ++ return (0x1DA7C1 << 10), 0x0 // xvreplgr2vr.h ++ case ARNG_8W: ++ return (0x1DA7C2 << 10), 0x0 // xvreplgr2vr.w ++ case ARNG_4V: ++ return (0x1DA7C3 << 10), 0x0 // xvreplgr2vr.d ++ } + } + } + +diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go +index 0818389c8d..a990b23089 100644 +--- a/src/cmd/internal/obj/loong64/doc.go ++++ b/src/cmd/internal/obj/loong64/doc.go +@@ -203,6 +203,23 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate) + VMOVQ Vj.W[index], Vd.W4 | vreplvei.w vd, vj, ui2 | for i in range(4) : VR[vd].w[i] = VR[vj].w[ui2] + VMOVQ Vj.V[index], Vd.V2 | vreplvei.d vd, vj, ui1 | for i in range(2) : VR[vd].d[i] = VR[vj].d[ui1] + ++3.7 Load data from memory and broadcast to each element of a vector register. ++ ++ Instruction format: ++ VMOVQ offset(Rj), . ++ ++ Mapping between Go and platform assembly: ++ Go assembly | platform assembly | semantics ++ ------------------------------------------------------------------------------------------------------------------------------------------------------- ++ VMOVQ offset(Rj), Vd.B16 | vldrepl.b Vd, Rj, si12 | for i in range(16): VR[vd].b[i] = load 8 bit memory data from (GR[rj]+SignExtend(si12)) ++ VMOVQ offset(Rj), Vd.H8 | vldrepl.h Vd, Rj, si11 | for i in range(8) : VR[vd].h[i] = load 16 bit memory data from (GR[rj]+SignExtend(si11<<1)) ++ VMOVQ offset(Rj), Vd.W4 | vldrepl.w Vd, Rj, si10 | for i in range(4) : VR[vd].w[i] = load 32 bit memory data from (GR[rj]+SignExtend(si10<<2)) ++ VMOVQ offset(Rj), Vd.V2 | vldrepl.d Vd, Rj, si9 | for i in range(2) : VR[vd].d[i] = load 64 bit memory data from (GR[rj]+SignExtend(si9<<3)) ++ XVMOVQ offset(Rj), Xd.B32 | xvldrepl.b Xd, Rj, si12 | for i in range(32): XR[xd].b[i] = load 8 bit memory data from (GR[rj]+SignExtend(si12)) ++ XVMOVQ offset(Rj), Xd.H16 | xvldrepl.h Xd, Rj, si11 | for i in range(16): XR[xd].h[i] = load 16 bit memory data from (GR[rj]+SignExtend(si11<<1)) ++ XVMOVQ offset(Rj), Xd.W8 | xvldrepl.w Xd, Rj, si10 | for i in range(8) : XR[xd].w[i] = load 32 bit memory data from (GR[rj]+SignExtend(si10<<2)) ++ XVMOVQ offset(Rj), Xd.V4 | xvldrepl.d Xd, Rj, si9 | for i in range(4) : XR[xd].d[i] = load 64 bit memory data from (GR[rj]+SignExtend(si9<<3)) ++ + # Special instruction encoding definition and description on LoongArch + + 1. DBAR hint encoding for LA664(Loongson 3A6000) and later micro-architectures, paraphrased +-- +2.43.7 + diff --git a/0018-cmd-compile-fold-negation-into-multiplication-on-loo.patch b/0018-cmd-compile-fold-negation-into-multiplication-on-loo.patch new file mode 100644 index 0000000..99c22e1 --- /dev/null +++ b/0018-cmd-compile-fold-negation-into-multiplication-on-loo.patch @@ -0,0 +1,160 @@ +From f7497498631e2f355facc4e0e53d5f522df01915 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 17 Jun 2025 19:30:03 +0800 +Subject: [PATCH 18/61] cmd/compile: fold negation into multiplication on + loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add corresponding benchmark tests and codegen tests. +The performance improvement on CPU Loongson-3A6000-HV is as follows: + +goos: linux +goarch: loong64 +pkg: cmd/compile/internal/test +cpu: Loongson-3A6000-HV @ 2500.00MHz + | bench.old | bench.new | + | sec/op | sec/op vs base | +MulNeg 828.4n ± 0% 655.9n ± 0% -20.82% (p=0.000 n=10) +Mul2Neg 1062.0n ± 0% 826.8n ± 0% -22.15% (p=0.000 n=10) +geomean 938.0n 736.4n -21.49% + +Change-Id: Ia4a2b9bd18600f9b6b1e0c1aa49d10ca0be8d76e +(cherry picked from commit 39174d79254d8dae533d4641e119b452188c8ba2) +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 3 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 40 +++++++++++++++++++ + src/cmd/compile/internal/test/bench_test.go | 23 +++++++++++ + test/codegen/arithmetic.go | 12 ++++++ + 4 files changed, 78 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index cab63a503f..ce7c13c94c 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -753,6 +753,9 @@ + (MULV x (MOVVconst [1])) => x + (MULV x (MOVVconst [c])) && isPowerOfTwo(c) => (SLLVconst [log64(c)] x) + ++(MULV (NEGV x) (MOVVconst [c])) => (MULV x (MOVVconst [-c])) ++(MULV (NEGV x) (NEGV y)) => (MULV x y) ++ + // div by constant + (DIVVU x (MOVVconst [1])) => x + (DIVVU x (MOVVconst [c])) && isPowerOfTwo(c) => (SRLVconst [log64(c)] x) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 7c46ed7727..ffeb46eea5 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -5360,6 +5360,8 @@ func rewriteValueLOONG64_OpLOONG64MOVWstorezeroidx(v *Value) bool { + func rewriteValueLOONG64_OpLOONG64MULV(v *Value) bool { + v_1 := v.Args[1] + v_0 := v.Args[0] ++ b := v.Block ++ typ := &b.Func.Config.Types + // match: (MULV x (MOVVconst [-1])) + // result: (NEGV x) + for { +@@ -5420,6 +5422,44 @@ func rewriteValueLOONG64_OpLOONG64MULV(v *Value) bool { + } + break + } ++ // match: (MULV (NEGV x) (MOVVconst [c])) ++ // result: (MULV x (MOVVconst [-c])) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64NEGV { ++ continue ++ } ++ x := v_0.Args[0] ++ if v_1.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c := auxIntToInt64(v_1.AuxInt) ++ v.reset(OpLOONG64MULV) ++ v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64) ++ v0.AuxInt = int64ToAuxInt(-c) ++ v.AddArg2(x, v0) ++ return true ++ } ++ break ++ } ++ // match: (MULV (NEGV x) (NEGV y)) ++ // result: (MULV x y) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64NEGV { ++ continue ++ } ++ x := v_0.Args[0] ++ if v_1.Op != OpLOONG64NEGV { ++ continue ++ } ++ y := v_1.Args[0] ++ v.reset(OpLOONG64MULV) ++ v.AddArg2(x, y) ++ return true ++ } ++ break ++ } + // match: (MULV (MOVVconst [c]) (MOVVconst [d])) + // result: (MOVVconst [c*d]) + for { +diff --git a/src/cmd/compile/internal/test/bench_test.go b/src/cmd/compile/internal/test/bench_test.go +index 4724600091..4e7b17d5bc 100644 +--- a/src/cmd/compile/internal/test/bench_test.go ++++ b/src/cmd/compile/internal/test/bench_test.go +@@ -122,3 +122,26 @@ func BenchmarkBitToggleConst(b *testing.B) { + } + } + } ++ ++func BenchmarkMulNeg(b *testing.B) { ++ x := make([]int64, 1024) ++ for i := 0; i < b.N; i++ { ++ var s int64 ++ for i := range x { ++ s = (-x[i]) * 10 ++ } ++ globl = s ++ } ++} ++ ++func BenchmarkMul2Neg(b *testing.B) { ++ x := make([]int64, 1024) ++ y := make([]int64, 1024) ++ for i := 0; i < b.N; i++ { ++ var s int64 ++ for i := range x { ++ s = (-x[i]) * (-y[i]) ++ } ++ globl = s ++ } ++} +diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go +index bd5540ec4b..8249139e13 100644 +--- a/test/codegen/arithmetic.go ++++ b/test/codegen/arithmetic.go +@@ -310,6 +310,18 @@ func MergeMuls5(a, n int) int { + return a*n - 19*n // (a-19)n + } + ++// Multiplications folded negation ++ ++func FoldNegMul(a int) int { ++ // loong64:"MULV","MOVV\t[$]-10",-"SUBVU\tR[0-9], R0," ++ return (-a) * 10 ++} ++ ++func Fold2NegMul(a, b int) int { ++ // loong64:"MULV",-"SUBVU\tR[0-9], R0," ++ return (-a) * (-b) ++} ++ + // -------------- // + // Division // + // -------------- // +-- +2.43.7 + diff --git a/0019-internal-chacha8rand-replace-WORD-with-instruction-V.patch b/0019-internal-chacha8rand-replace-WORD-with-instruction-V.patch new file mode 100644 index 0000000..12c4836 --- /dev/null +++ b/0019-internal-chacha8rand-replace-WORD-with-instruction-V.patch @@ -0,0 +1,67 @@ +From 8f204b8da3f0c56683abf890ed8f727732f7e21e Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 19 Jun 2025 21:03:27 +0800 +Subject: [PATCH 19/61] internal/chacha8rand: replace WORD with instruction + VMOVQ + +Change-Id: I5d05af4d071b4b0ee60fafbd2a39494128bdf3f1 +(cherry picked from commit 633421e87bc7d12fc579b7a6b72661a76f9f9401) +--- + src/internal/chacha8rand/chacha8_loong64.s | 36 ++++++++-------------- + 1 file changed, 12 insertions(+), 24 deletions(-) + +diff --git a/src/internal/chacha8rand/chacha8_loong64.s b/src/internal/chacha8rand/chacha8_loong64.s +index caa1426a05..5e6857ed3a 100644 +--- a/src/internal/chacha8rand/chacha8_loong64.s ++++ b/src/internal/chacha8rand/chacha8_loong64.s +@@ -49,35 +49,23 @@ lsx_chacha8: + MOVV $·chachaIncRot(SB), R11 + + // load contants +- // VLDREPL.W $0, R10, V0 +- WORD $0x30200140 +- // VLDREPL.W $1, R10, V1 +- WORD $0x30200541 +- // VLDREPL.W $2, R10, V2 +- WORD $0x30200942 +- // VLDREPL.W $3, R10, V3 +- WORD $0x30200d43 ++ VMOVQ (R10), V0.W4 ++ VMOVQ 1(R10), V1.W4 ++ VMOVQ 2(R10), V2.W4 ++ VMOVQ 3(R10), V3.W4 + + // load 4-32bit data from incRotMatrix added to counter + VMOVQ (R11), V30 + + // load seed +- // VLDREPL.W $0, R4, V4 +- WORD $0x30200084 +- // VLDREPL.W $1, R4, V5 +- WORD $0x30200485 +- // VLDREPL.W $2, R4, V6 +- WORD $0x30200886 +- // VLDREPL.W $3, R4, V7 +- WORD $0x30200c87 +- // VLDREPL.W $4, R4, V8 +- WORD $0x30201088 +- // VLDREPL.W $5, R4, V9 +- WORD $0x30201489 +- // VLDREPL.W $6, R4, V10 +- WORD $0x3020188a +- // VLDREPL.W $7, R4, V11 +- WORD $0x30201c8b ++ VMOVQ (R4), V4.W4 ++ VMOVQ 1(R4), V5.W4 ++ VMOVQ 2(R4), V6.W4 ++ VMOVQ 3(R4), V7.W4 ++ VMOVQ 4(R4), V8.W4 ++ VMOVQ 5(R4), V9.W4 ++ VMOVQ 6(R4), V10.W4 ++ VMOVQ 7(R4), V11.W4 + + // load counter and update counter + VMOVQ R6, V12.W4 +-- +2.43.7 + diff --git a/0020-cmd-compile-avoid-extending-when-already-sufficientl.patch b/0020-cmd-compile-avoid-extending-when-already-sufficientl.patch new file mode 100644 index 0000000..dbc0728 --- /dev/null +++ b/0020-cmd-compile-avoid-extending-when-already-sufficientl.patch @@ -0,0 +1,187 @@ +From 396f7f54f1ab37febf09fe6a6f4eb27b4992c017 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 24 Jun 2025 09:40:13 +0800 +Subject: [PATCH 20/61] cmd/compile: avoid extending when already sufficiently + masked on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Reduce the number of go toolchain instructions on loong64 as follows. + + file before after Δ % + asm 562400 561348 -1052 -0.1871% + cgo 488268 487932 -336 -0.0688% + compile 2505750 2503710 -2040 -0.0814% + cover 525874 525506 -368 -0.0700% + link 714162 713562 -600 -0.0840% + preprofile 240250 240054 -196 -0.0816% + vet 794074 793742 -332 -0.0418% + go 1598284 1597680 -604 -0.0378% + gofmt 324126 323926 -200 -0.0617% + total 7753188 7747460 -5728 -0.0739% + +Change-Id: I64034f4db47e1dae88f5f3d1c404bc1c8934375c +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 8 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 90 +++++++++++++++++++ + 2 files changed, 98 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index ce7c13c94c..d67fc900b5 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -846,6 +846,14 @@ + + (MOVBUreg (ANDconst [c] x)) => (ANDconst [c&0xff] x) + ++// Avoid extending when already sufficiently masked. ++(MOVBreg x:(ANDconst [c] y)) && c >= 0 && int64(int8(c)) == c => x ++(MOVHreg x:(ANDconst [c] y)) && c >= 0 && int64(int16(c)) == c => x ++(MOVWreg x:(ANDconst [c] y)) && c >= 0 && int64(int32(c)) == c => x ++(MOVBUreg x:(ANDconst [c] y)) && c >= 0 && int64(uint8(c)) == c => x ++(MOVHUreg x:(ANDconst [c] y)) && c >= 0 && int64(uint16(c)) == c => x ++(MOVWUreg x:(ANDconst [c] y)) && c >= 0 && int64(uint32(c)) == c => x ++ + // Prefetch instructions (hint specified using aux field) + // For PRELD{,X} A value of hint indicates: + // hint=0 is defined as load prefetch to L1-cache +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index ffeb46eea5..3e57fc9500 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -2378,6 +2378,21 @@ func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVBUreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(uint8(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(uint8(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { +@@ -2526,6 +2541,21 @@ func rewriteValueLOONG64_OpLOONG64MOVBreg(v *Value) bool { + v.AuxInt = int64ToAuxInt(int64(int8(c))) + return true + } ++ // match: (MOVBreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(int8(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(int8(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { +@@ -3614,6 +3644,21 @@ func rewriteValueLOONG64_OpLOONG64MOVHUreg(v *Value) bool { + v.AuxInt = int64ToAuxInt(int64(uint16(c))) + return true + } ++ // match: (MOVHUreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(uint16(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(uint16(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { +@@ -3806,6 +3851,21 @@ func rewriteValueLOONG64_OpLOONG64MOVHreg(v *Value) bool { + v.AuxInt = int64ToAuxInt(int64(int16(c))) + return true + } ++ // match: (MOVHreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(int16(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(int16(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { +@@ -4821,6 +4881,21 @@ func rewriteValueLOONG64_OpLOONG64MOVWUreg(v *Value) bool { + v.AuxInt = int64ToAuxInt(int64(uint32(c))) + return true + } ++ // match: (MOVWUreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(uint32(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(uint32(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { +@@ -5046,6 +5121,21 @@ func rewriteValueLOONG64_OpLOONG64MOVWreg(v *Value) bool { + v.AuxInt = int64ToAuxInt(int64(int32(c))) + return true + } ++ // match: (MOVWreg x:(ANDconst [c] y)) ++ // cond: c >= 0 && int64(int32(c)) == c ++ // result: x ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64ANDconst { ++ break ++ } ++ c := auxIntToInt64(x.AuxInt) ++ if !(c >= 0 && int64(int32(c)) == c) { ++ break ++ } ++ v.copyOf(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { +-- +2.43.7 + diff --git a/0021-cmd-internal-obj-loong64-adjust-the-case-number-of-t.patch b/0021-cmd-internal-obj-loong64-adjust-the-case-number-of-t.patch new file mode 100644 index 0000000..8881419 --- /dev/null +++ b/0021-cmd-internal-obj-loong64-adjust-the-case-number-of-t.patch @@ -0,0 +1,80 @@ +From f77081b0037eea22fb717f5a73552961bff0be52 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 31 Jul 2025 20:14:58 +0800 +Subject: [PATCH 21/61] cmd/internal/obj/loong64: adjust the case number of the + Optab entry + +Place [X]VMOVQ entries together, with their case numbers in order. + +Change-Id: Ice10c53259b6e81951829e5219766c4f6e7592c4 +--- + src/cmd/internal/obj/loong64/asm.go | 34 ++++++++++++++--------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index e07c744550..da14bcc0f9 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -416,11 +416,11 @@ var optab = []Optab{ + + {AVMOVQ, C_ELEM, C_NONE, C_NONE, C_ARNG, C_NONE, 45, 4, 0, 0}, + +- {AVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 48, 4, 0, 0}, +- {AXVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 48, 4, 0, 0}, ++ {AVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, ++ {AXVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, + +- {APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 46, 4, 0, 0}, +- {APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 47, 20, 0, 0}, ++ {APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 47, 4, 0, 0}, ++ {APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 48, 20, 0, 0}, + + {obj.APCALIGN, C_U12CON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, + {obj.APCDATA, C_32CON, C_NONE, C_NONE, C_32CON, C_NONE, 0, 0, 0, 0}, +@@ -2477,12 +2477,23 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + c.checkindex(p, index, m) + o1 = v | (index << 10) | (vj << 5) | vd + +- case 46: // preld offset(Rbase), $hint ++ case 46: // vmov offset(vj), vd. ++ v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, true) ++ if v == 0 { ++ c.ctxt.Diag("illegal arng type combination: %v\n", p) ++ } ++ ++ si := c.regoff(&p.From) ++ Rj := uint32(p.From.Reg & EXT_REG_MASK) ++ Vd := uint32(p.To.Reg & EXT_REG_MASK) ++ o1 = v | uint32(si<<10) | (Rj << 5) | Vd ++ ++ case 47: // preld offset(Rbase), $hint + offs := c.regoff(&p.From) + hint := p.GetFrom3().Offset + o1 = OP_12IR_5I(c.opiir(p.As), uint32(offs), uint32(p.From.Reg), uint32(hint)) + +- case 47: // preldx offset(Rbase), $n, $hint ++ case 48: // preldx offset(Rbase), $n, $hint + offs := c.regoff(&p.From) + hint := p.RestArgs[1].Offset + n := uint64(p.GetFrom3().Offset) +@@ -2512,17 +2523,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP)) + o5 = OP_5IRR(c.opirr(p.As), uint32(REGTMP), uint32(p.From.Reg), uint32(hint)) + +- case 48: // vmov offset(vj), vd. +- v, _ := c.specialLsxMovInst(p.As, p.From.Reg, p.To.Reg, true) +- if v == 0 { +- c.ctxt.Diag("illegal arng type combination: %v\n", p) +- } +- +- si := c.regoff(&p.From) +- Rj := uint32(p.From.Reg & EXT_REG_MASK) +- Vd := uint32(p.To.Reg & EXT_REG_MASK) +- o1 = v | uint32(si<<10) | (Rj << 5) | Vd +- + case 49: + if p.As == ANOOP { + // andi r0, r0, 0 +-- +2.43.7 + diff --git a/0022-internal-bytealg-optimize-Index-IndexString-on-loong.patch b/0022-internal-bytealg-optimize-Index-IndexString-on-loong.patch new file mode 100644 index 0000000..72420be --- /dev/null +++ b/0022-internal-bytealg-optimize-Index-IndexString-on-loong.patch @@ -0,0 +1,455 @@ +From a45dbf6dedeb7c03a74f6156833b5f991dd1bbca Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 7 Aug 2025 11:34:28 +0800 +Subject: [PATCH 22/61] internal/bytealg: optimize Index/IndexString on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +goos: linux +goarch: loong64 +pkg: bytes +cpu: Loongson-3A6000 @ 2500.00MHz + | 3a6000.old.txt | 3a6000.new.txt | + | sec/op | sec/op vs base | +IndexRune/10 23.56n ± 1% 20.42n ± 0% -13.33% (p=0.000 n=10) +IndexRune/32 29.91n ± 1% 22.46n ± 0% -24.90% (p=0.000 n=10) +IndexRune/4K 102.45n ± 2% 72.66n ± 0% -29.08% (p=0.000 n=10) +IndexRune/4M 111.96µ ± 1% 52.50µ ± 1% -53.11% (p=0.000 n=10) +IndexRune/64M 3.653m ± 30% 3.633m ± 0% ~ (p=0.143 n=10) +IndexRuneASCII/10 8.736n ± 2% 7.206n ± 0% -17.51% (p=0.000 n=10) +IndexRuneASCII/32 10.195n ± 2% 8.008n ± 0% -21.45% (p=0.000 n=10) +IndexRuneASCII/4K 70.27n ± 2% 52.84n ± 0% -24.80% (p=0.000 n=10) +IndexRuneASCII/4M 98.15µ ± 1% 87.87µ ± 1% -10.47% (p=0.000 n=10) +IndexRuneASCII/64M 2.028m ± 0% 1.918m ± 2% -5.41% (p=0.000 n=10) +IndexRuneUnicode/Latin/10 18.80n ± 1% 13.61n ± 0% -27.59% (p=0.000 n=10) +IndexRuneUnicode/Latin/32 28.09n ± 2% 20.82n ± 0% -25.88% (p=0.000 n=10) +IndexRuneUnicode/Latin/4K 373.8n ± 1% 357.1n ± 0% -4.47% (p=0.000 n=10) +IndexRuneUnicode/Latin/4M 395.8µ ± 0% 381.0µ ± 0% -3.74% (p=0.000 n=10) +IndexRuneUnicode/Latin/64M 8.056m ± 0% 7.614m ± 0% -5.49% (p=0.000 n=10) +IndexRuneUnicode/Cyrillic/10 23.72n ± 1% 20.42n ± 0% -13.91% (p=0.000 n=10) +IndexRuneUnicode/Cyrillic/32 30.20n ± 1% 22.42n ± 0% -25.77% (p=0.000 n=10) +IndexRuneUnicode/Cyrillic/4K 1.134µ ± 1% 1.122µ ± 0% -1.06% (p=0.000 n=10) +IndexRuneUnicode/Cyrillic/4M 1.160m ± 1% 1.152m ± 0% -0.72% (p=0.005 n=10) +IndexRuneUnicode/Cyrillic/64M 20.26m ± 1% 19.61m ± 0% -3.24% (p=0.000 n=10) +IndexRuneUnicode/Han/10 30.11n ± 2% 24.82n ± 0% -17.57% (p=0.000 n=10) +IndexRuneUnicode/Han/32 36.16n ± 2% 27.20n ± 0% -24.78% (p=0.000 n=10) +IndexRuneUnicode/Han/4K 548.1n ± 0% 524.8n ± 0% -4.25% (p=0.000 n=10) +IndexRuneUnicode/Han/4M 706.7µ ± 1% 624.0µ ± 0% -11.70% (p=0.000 n=10) +IndexRuneUnicode/Han/64M 12.50m ± 1% 10.84m ± 1% -13.24% (p=0.000 n=10) +Index/10 42.03n ± 2% 10.01n ± 0% -76.18% (p=0.000 n=10) +Index/32 133.15n ± 1% 40.03n ± 0% -69.94% (p=0.000 n=10) +Index/4K 11.647µ ± 1% 2.493µ ± 0% -78.60% (p=0.000 n=10) +Index/4M 11.536m ± 0% 2.519m ± 0% -78.16% (p=0.000 n=10) +Index/64M 184.60m ± 1% 40.42m ± 0% -78.10% (p=0.000 n=10) +IndexEasy/10 17.290n ± 2% 9.608n ± 0% -44.43% (p=0.000 n=10) +IndexEasy/32 23.71n ± 2% 16.61n ± 0% -29.95% (p=0.000 n=10) +IndexEasy/4K 95.64n ± 2% 68.25n ± 0% -28.64% (p=0.000 n=10) +IndexEasy/4M 105.04µ ± 1% 91.94µ ± 0% -12.47% (p=0.000 n=10) +IndexEasy/64M 4.280m ± 0% 4.264m ± 0% -0.38% (p=0.002 n=10) +Count/10 53.09n ± 1% 16.81n ± 0% -68.33% (p=0.000 n=10) +Count/32 142.20n ± 2% 46.44n ± 0% -67.34% (p=0.000 n=10) +Count/4K 11.428µ ± 1% 2.500µ ± 1% -78.12% (p=0.000 n=10) +Count/4M 11.536m ± 1% 2.520m ± 0% -78.16% (p=0.000 n=10) +Count/64M 183.80m ± 1% 40.42m ± 0% -78.01% (p=0.000 n=10) +IndexHard1 2906.4µ ± 1% 420.4µ ± 0% -85.54% (p=0.000 n=10) +IndexHard2 2918.0µ ± 1% 421.1µ ± 1% -85.57% (p=0.000 n=10) +IndexHard3 2912.8µ ± 1% 440.2µ ± 0% -84.89% (p=0.000 n=10) +IndexHard4 2909.6µ ± 1% 840.4µ ± 0% -71.12% (p=0.000 n=10) +LastIndexHard1 2.939m ± 1% 2.621m ± 0% -10.83% (p=0.000 n=10) +LastIndexHard2 2.924m ± 1% 2.624m ± 0% -10.26% (p=0.000 n=10) +LastIndexHard3 2.936m ± 1% 2.580m ± 1% -12.12% (p=0.000 n=10) +CountHard1 2900.4µ ± 1% 420.0µ ± 0% -85.52% (p=0.000 n=10) +CountHard2 2915.6µ ± 1% 420.0µ ± 0% -85.59% (p=0.000 n=10) +CountHard3 2905.0µ ± 0% 440.0µ ± 0% -84.85% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic2 181.95µ ± 1% 26.28µ ± 0% -85.56% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic4 182.59µ ± 1% 26.29µ ± 0% -85.60% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic8 183.9µ ± 1% 108.2µ ± 0% -41.14% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic16 58.24µ ± 0% 56.58µ ± 0% -2.86% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic32 30.82µ ± 0% 29.62µ ± 0% -3.92% (p=0.000 n=10) +IndexPeriodic/IndexPeriodic64 16.59µ ± 0% 15.00µ ± 0% -9.62% (p=0.000 n=10) +geomean 22.69µ 11.59µ -48.92% + +Change-Id: Iacc9e686027f99bb0413b566cfc8ee6cd873d2d9 +--- + src/internal/bytealg/index_generic.go | 2 +- + src/internal/bytealg/index_loong64.go | 29 +++ + src/internal/bytealg/index_loong64.s | 303 ++++++++++++++++++++++++++ + src/internal/bytealg/index_native.go | 2 +- + 4 files changed, 334 insertions(+), 2 deletions(-) + create mode 100644 src/internal/bytealg/index_loong64.go + create mode 100644 src/internal/bytealg/index_loong64.s + +diff --git a/src/internal/bytealg/index_generic.go b/src/internal/bytealg/index_generic.go +index a59e32938e..643bb59ab1 100644 +--- a/src/internal/bytealg/index_generic.go ++++ b/src/internal/bytealg/index_generic.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build !amd64 && !arm64 && !s390x && !ppc64le && !ppc64 ++//go:build !amd64 && !arm64 && !loong64 && !s390x && !ppc64le && !ppc64 + + package bytealg + +diff --git a/src/internal/bytealg/index_loong64.go b/src/internal/bytealg/index_loong64.go +new file mode 100644 +index 0000000000..fa7832ddf2 +--- /dev/null ++++ b/src/internal/bytealg/index_loong64.go +@@ -0,0 +1,29 @@ ++// Copyright 2025 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++package bytealg ++ ++import "internal/cpu" ++ ++// Empirical data shows that using Index can get better ++// performance when len(s) <= 16. ++const MaxBruteForce = 16 ++ ++func init() { ++ // Optimize cases where the length of the substring is less than 32 bytes ++ if cpu.Loong64.HasLASX || cpu.Loong64.HasLSX { ++ MaxLen = 64 ++ } else { ++ MaxLen = 32 ++ } ++} ++ ++// Cutover reports the number of failures of IndexByte we should tolerate ++// before switching over to Index. ++// n is the number of bytes processed so far. ++// See the bytes.Index implementation for details. ++func Cutover(n int) int { ++ // 1 error per 8 characters, plus a few slop to start. ++ return (n + 16) / 8 ++} +diff --git a/src/internal/bytealg/index_loong64.s b/src/internal/bytealg/index_loong64.s +new file mode 100644 +index 0000000000..1016db738d +--- /dev/null ++++ b/src/internal/bytealg/index_loong64.s +@@ -0,0 +1,303 @@ ++// Copyright 2025 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++#include "go_asm.h" ++#include "textflag.h" ++ ++TEXT ·Index(SB),NOSPLIT,$0-56 ++ MOVV R7, R6 // R6 = separator pointer ++ MOVV R8, R7 // R7 = separator length ++ JMP indexbody<>(SB) ++ ++TEXT ·IndexString(SB),NOSPLIT,$0-40 ++ JMP indexbody<>(SB) ++ ++// input: ++// R4 = string ++// R5 = length ++// R6 = separator pointer ++// R7 = separator length (2 <= len <= 64) ++TEXT indexbody<>(SB),NOSPLIT,$0 ++ // main idea is to load 'sep' into separate register(s) ++ // to avoid repeatedly re-load it again and again ++ // for sebsequent substring comparisons ++ SUBV R7, R5, R8 ++ ADDV R4, R8 // R8 contains the start of last substring for comparison ++ ADDV $1, R4, R9 // store base for later ++ ++ MOVV $8, R5 ++ BGE R7, R5, len_gt_or_eq_8 ++len_2_7: ++ AND $0x4, R7, R5 ++ BNE R5, len_4_7 ++ ++len_2_3: ++ AND $0x1, R7, R5 ++ BNE R5, len_3 ++ ++len_2: ++ MOVHU (R6), R10 ++loop_2: ++ BLT R8, R4, not_found ++ MOVHU (R4), R11 ++ ADDV $1, R4 ++ BNE R10, R11, loop_2 ++ JMP found ++ ++len_3: ++ MOVHU (R6), R10 ++ MOVBU 2(R6), R11 ++loop_3: ++ BLT R8, R4, not_found ++ MOVHU (R4), R12 ++ ADDV $1, R4 ++ BNE R10, R12, loop_3 ++ MOVBU 1(R4), R13 ++ BNE R11, R13, loop_3 ++ JMP found ++ ++len_4_7: ++ AND $0x2, R7, R5 ++ BNE R5, len_6_7 ++ AND $0x1, R7, R5 ++ BNE R5, len_5 ++len_4: ++ MOVWU (R6), R10 ++loop_4: ++ BLT R8, R4, not_found ++ MOVWU (R4), R11 ++ ADDV $1, R4 ++ BNE R10, R11, loop_4 ++ JMP found ++ ++len_5: ++ MOVWU (R6), R10 ++ MOVBU 4(R6), R11 ++loop_5: ++ BLT R8, R4, not_found ++ MOVWU (R4), R12 ++ ADDV $1, R4 ++ BNE R10, R12, loop_5 ++ MOVBU 3(R4), R13 ++ BNE R11, R13, loop_5 ++ JMP found ++ ++len_6_7: ++ AND $0x1, R7, R5 ++ BNE R5, len_7 ++len_6: ++ MOVWU (R6), R10 ++ MOVHU 4(R6), R11 ++loop_6: ++ BLT R8, R4, not_found ++ MOVWU (R4), R12 ++ ADDV $1, R4 ++ BNE R10, R12, loop_6 ++ MOVHU 3(R4), R13 ++ BNE R11, R13, loop_6 ++ JMP found ++ ++len_7: ++ MOVWU (R6), R10 ++ MOVWU 3(R6), R11 ++loop_7: ++ BLT R8, R4, not_found ++ MOVWU (R4), R12 ++ ADDV $1, R4 ++ BNE R10, R12, loop_7 ++ MOVWU 2(R4), R13 ++ BNE R11, R13, loop_7 ++ JMP found ++ ++len_gt_or_eq_8: ++ BEQ R5, R7, len_8 ++ MOVV $17, R5 ++ BGE R7, R5, len_gt_or_eq_17 ++ JMP len_9_16 ++len_8: ++ MOVV (R6), R10 ++loop_8: ++ BLT R8, R4, not_found ++ MOVV (R4), R11 ++ ADDV $1, R4 ++ BNE R10, R11, loop_8 ++ JMP found ++ ++len_9_16: ++ MOVV (R6), R10 ++ SUBV $8, R7 ++ MOVV (R6)(R7), R11 ++ SUBV $1, R7 ++loop_9_16: ++ BLT R8, R4, not_found ++ MOVV (R4), R12 ++ ADDV $1, R4 ++ BNE R10, R12, loop_9_16 ++ MOVV (R4)(R7), R13 ++ BNE R11, R13, loop_9_16 ++ JMP found ++ ++len_gt_or_eq_17: ++ MOVV $25, R5 ++ BGE R7, R5, len_gt_or_eq_25 ++len_17_24: ++ MOVV 0(R6), R10 ++ MOVV 8(R6), R11 ++ SUBV $8, R7 ++ MOVV (R6)(R7), R12 ++ SUBV $1, R7 ++loop_17_24: ++ BLT R8, R4, not_found ++ MOVV (R4), R13 ++ ADDV $1, R4 ++ BNE R10, R13, loop_17_24 ++ MOVV 7(R4), R14 ++ BNE R11, R14, loop_17_24 ++ MOVV (R4)(R7), R15 ++ BNE R12, R15, loop_17_24 ++ JMP found ++ ++len_gt_or_eq_25: ++ MOVV $33, R5 ++ BGE R7, R5, len_gt_or_eq_33 ++ MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLSX(SB), R10 ++ BNE R10, lsx_len_25_32 ++len_25_32: ++ MOVV 0(R6), R10 ++ MOVV 8(R6), R11 ++ MOVV 16(R6), R12 ++ SUBV $8, R7 ++ MOVV (R6)(R7), R13 ++ SUBV $1, R7 ++loop_25_32: ++ BLT R8, R4, not_found ++ MOVV (R4), R14 ++ ADDV $1, R4 ++ BNE R10, R14, loop_25_32 ++ MOVV 7(R4), R15 ++ BNE R11, R15, loop_25_32 ++ MOVV 15(R4), R16 ++ BNE R12, R16, loop_25_32 ++ MOVV (R4)(R7), R17 ++ BNE R13, R17, loop_25_32 ++ JMP found ++ ++ // On loong64, LSX is included if LASX is supported. ++lasx_len_25_32: ++lsx_len_25_32: ++ VMOVQ 0(R6), V0 ++ SUBV $16, R7 ++ VMOVQ (R6)(R7), V1 ++ SUBV $1, R7 ++lsx_loop_25_32: ++ BLT R8, R4, not_found ++ VMOVQ (R4), V2 ++ ADDV $1, R4 ++ VSEQV V0, V2, V2 ++ VSETANYEQV V2, FCC0 ++ BFPT FCC0, lsx_loop_25_32 ++ ++ VMOVQ (R4)(R7), V3 ++ VSEQV V1, V3, V3 ++ VSETANYEQV V3, FCC1 ++ BFPT FCC1, lsx_loop_25_32 ++ JMP found ++ ++len_gt_or_eq_33: ++ MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLASX(SB), R10 ++ MOVV $49, R5 ++ BGE R7, R5, len_gt_or_eq_49 ++len_33_48: ++ BNE R10, lasx_len_33_48 ++ JMP lsx_len_33_48 ++ ++len_gt_or_eq_49: ++len_49_64: ++ BNE R10, lasx_len_49_64 ++ JMP lsx_len_49_64 ++ ++lsx_len_33_48: ++ VMOVQ 0(R6), V0 ++ VMOVQ 16(R6), V1 ++ SUBV $16, R7 ++ VMOVQ (R6)(R7), V2 ++ SUBV $1, R7 ++lsx_loop_33_48: ++ BLT R8, R4, not_found ++ VMOVQ 0(R4), V3 ++ ADDV $1, R4 ++ VSEQV V0, V3, V3 ++ VSETANYEQV V3, FCC0 ++ BFPT FCC0, lsx_loop_33_48 ++ ++ VMOVQ 15(R4), V4 ++ VSEQV V1, V4, V4 ++ VSETANYEQV V4, FCC1 ++ BFPT FCC1, lsx_loop_33_48 ++ ++ VMOVQ (R4)(R7), V5 ++ VSEQV V2, V5, V5 ++ VSETANYEQV V5, FCC2 ++ BFPT FCC2, lsx_loop_33_48 ++ JMP found ++ ++lsx_len_49_64: ++ VMOVQ 0(R6), V0 ++ VMOVQ 16(R6), V1 ++ VMOVQ 32(R6), V2 ++ SUBV $16, R7 ++ VMOVQ (R6)(R7), V3 ++ SUBV $1, R7 ++lsx_loop_49_64: ++ BLT R8, R4, not_found ++ VMOVQ 0(R4), V4 ++ ADDV $1, R4 ++ VSEQV V0, V4, V4 ++ VSETANYEQV V4, FCC0 ++ BFPT FCC0, lsx_loop_49_64 ++ ++ VMOVQ 15(R4), V5 ++ VSEQV V1, V5, V5 ++ VSETANYEQV V5, FCC1 ++ BFPT FCC1, lsx_loop_49_64 ++ ++ VMOVQ 31(R4), V6 ++ VSEQV V2, V6, V6 ++ VSETANYEQV V6, FCC2 ++ BFPT FCC2, lsx_loop_49_64 ++ ++ VMOVQ (R4)(R7), V7 ++ VSEQV V3, V7, V7 ++ VSETANYEQV V7, FCC3 ++ BFPT FCC3, lsx_loop_49_64 ++ JMP found ++ ++lasx_len_33_48: ++lasx_len_49_64: ++lasx_len_33_64: ++ XVMOVQ (R6), X0 ++ SUBV $32, R7 ++ XVMOVQ (R6)(R7), X1 ++ SUBV $1, R7 ++lasx_loop_33_64: ++ BLT R8, R4, not_found ++ XVMOVQ (R4), X2 ++ ADDV $1, R4 ++ XVSEQV X0, X2, X3 ++ XVSETANYEQV X3, FCC0 ++ BFPT FCC0, lasx_loop_33_64 ++ ++ XVMOVQ (R4)(R7), X4 ++ XVSEQV X1, X4, X5 ++ XVSETANYEQV X5, FCC1 ++ BFPT FCC1, lasx_loop_33_64 ++ JMP found ++ ++found: ++ SUBV R9, R4 ++ RET ++ ++not_found: ++ MOVV $-1, R4 ++ RET +diff --git a/src/internal/bytealg/index_native.go b/src/internal/bytealg/index_native.go +index 59c93f9d12..f917c7a92a 100644 +--- a/src/internal/bytealg/index_native.go ++++ b/src/internal/bytealg/index_native.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build amd64 || arm64 || s390x || ppc64le || ppc64 ++//go:build amd64 || arm64 || loong64 || s390x || ppc64le || ppc64 + + package bytealg + +-- +2.43.7 + diff --git a/0023-cmd-internal-obj-loong64-add-support-for-FSEL-instru.patch b/0023-cmd-internal-obj-loong64-add-support-for-FSEL-instru.patch new file mode 100644 index 0000000..df3cebf --- /dev/null +++ b/0023-cmd-internal-obj-loong64-add-support-for-FSEL-instru.patch @@ -0,0 +1,104 @@ +From bfef972cdd5a36bff0e822c9bc6155df45e19fdc Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Mon, 4 Aug 2025 09:12:21 +0800 +Subject: [PATCH 23/61] cmd/internal/obj/loong64: add support for FSEL + instruction + +Go asm syntax: + FSEL FCC, FK, FJ, FD + +Equivalent platform assembler syntax: + fsel fd, fj, fk, ca + +Change-Id: Idcbc4f276e02d3609b7cd50645a321fea5739777 +(cherry picked from commit c6b2487e2a9247af10931199cbf804b9e32c992a) +--- + src/cmd/asm/internal/asm/testdata/loong64enc1.s | 4 ++++ + src/cmd/internal/obj/loong64/a.out.go | 3 +++ + src/cmd/internal/obj/loong64/anames.go | 1 + + src/cmd/internal/obj/loong64/asm.go | 14 ++++++++++++++ + 4 files changed, 22 insertions(+) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index dfb2a2f177..d1a565244c 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -376,6 +376,10 @@ lable2: + FTINTRNEVF F0, F2 // 02e41a01 + FTINTRNEVD F0, F2 // 02e81a01 + ++ // FSEL instruction ++ FSEL FCC0, F1, F2, F3 // 4304000d ++ FSEL FCC1, F1, F2 // 4284000d ++ + // LDX.{B,BU,H,HU,W,WU,D} instructions + MOVB (R14)(R13), R12 // cc350038 + MOVBU (R14)(R13), R12 // cc352038 +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index 193993ec4d..861ec8a06e 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -743,6 +743,9 @@ const ( + AFTINTRNEVF + AFTINTRNEVD + ++ // 3.2.4.2 ++ AFSEL ++ + // LSX and LASX memory access instructions + AVMOVQ + AXVMOVQ +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index bf9b0722cc..7b788d23a9 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -261,6 +261,7 @@ var Anames = []string{ + "FTINTRNEWD", + "FTINTRNEVF", + "FTINTRNEVD", ++ "FSEL", + "VMOVQ", + "XVMOVQ", + "VADDB", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index da14bcc0f9..b4176574ef 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -154,6 +154,9 @@ var optab = []Optab{ + {AFMADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 37, 4, 0, 0}, + {AFMADDF, C_FREG, C_FREG, C_FREG, C_FREG, C_NONE, 37, 4, 0, 0}, + ++ {AFSEL, C_FCCREG, C_FREG, C_FREG, C_FREG, C_NONE, 33, 4, 0, 0}, ++ {AFSEL, C_FCCREG, C_FREG, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, ++ + {AMOVW, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, + {AMOVWU, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, +@@ -1515,6 +1518,7 @@ func buildop(ctxt *obj.Link) { + AWORD, + APRELD, + APRELDX, ++ AFSEL, + obj.ANOP, + obj.ATEXT, + obj.AFUNCDATA, +@@ -2357,6 +2361,16 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + } + o1 = OP_6IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.To.Reg)) + ++ case 33: // fsel ca, fk, [fj], fd ++ ca := uint32(p.From.Reg) ++ fk := uint32(p.Reg) ++ fd := uint32(p.To.Reg) ++ fj := fd ++ if len(p.RestArgs) > 0 { ++ fj = uint32(p.GetFrom3().Reg) ++ } ++ o1 = 0x340<<18 | (ca&0x7)<<15 | (fk&0x1F)<<10 | (fj&0x1F)<<5 | (fd & 0x1F) ++ + case 34: // mov $con,fr + v := c.regoff(&p.From) + a := AADDU +-- +2.43.7 + diff --git a/0024-cmd-compile-internal-ssa-fix-typo-in-LOONG64Ops.go-c.patch b/0024-cmd-compile-internal-ssa-fix-typo-in-LOONG64Ops.go-c.patch new file mode 100644 index 0000000..9fd2c6e --- /dev/null +++ b/0024-cmd-compile-internal-ssa-fix-typo-in-LOONG64Ops.go-c.patch @@ -0,0 +1,27 @@ +From 3143c546ec5af310d44260f4031ad1f880436f90 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 5 Aug 2025 20:55:14 +0800 +Subject: [PATCH 24/61] cmd/compile/internal/ssa: fix typo in LOONG64Ops.go + comment + +Change-Id: Ic9878b5357f531ecf24355d885cd079df0abbf4d +--- + src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index 5ef304b4f9..cef0a2d602 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -589,7 +589,7 @@ func init() { + {name: "FPT", controls: 1}, // FP flag is true + {name: "FPF", controls: 1}, // FP flag is false + {name: "BEQ", controls: 2}, // controls[0] == controls[1] +- {name: "BNE", controls: 2}, // controls[0] == controls[1] ++ {name: "BNE", controls: 2}, // controls[0] != controls[1] + {name: "BGE", controls: 2}, // controls[0] >= controls[1] + {name: "BLT", controls: 2}, // controls[0] < controls[1] + {name: "BGEU", controls: 2}, // controls[0] >= controls[1], unsigned +-- +2.43.7 + diff --git a/0025-cmd-internal-obj-loong64-add-new-instructions-ALSL-W.patch b/0025-cmd-internal-obj-loong64-add-new-instructions-ALSL-W.patch new file mode 100644 index 0000000..55ba57d --- /dev/null +++ b/0025-cmd-internal-obj-loong64-add-new-instructions-ALSL-W.patch @@ -0,0 +1,172 @@ +From 67a2e3dbc23f450330c90e8004400d0a6ac7dee9 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 10 Jul 2025 14:30:31 +0800 +Subject: [PATCH 25/61] cmd/internal/obj/loong64: add new instructions + ALSL{W/WU/V} for loong64 + +Go asm syntax: + ALSL{W/WU/V} $3, R4, R5, R6 + +Equivalent platform assembler syntax: + alsl.{w/wu/d} $r6, $r4, $r5, 3 + +When executing the alsl.w/wu/d family of instructions, the actual shift amount is the immediate value +in the instruction encoding plus one. + +Change-Id: Ic8364dfe2753bcea7de6cffe656ca0dde6875766 +--- + .../asm/internal/asm/testdata/loong64enc1.s | 5 +++ + src/cmd/internal/obj/loong64/a.out.go | 5 +++ + src/cmd/internal/obj/loong64/anames.go | 3 ++ + src/cmd/internal/obj/loong64/asm.go | 31 +++++++++++++++++++ + src/cmd/internal/obj/loong64/doc.go | 21 +++++++++++++ + 5 files changed, 65 insertions(+) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index d1a565244c..ce953e72c6 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -1049,3 +1049,8 @@ lable2: + PRELD (R4), $0 // 8000c02a + PRELD -1(R4), $8 // 88fcff2a + PRELD 8(R4), $31 // 9f20c02a ++ ++ // ALSL{W/WU/D} ++ ALSLW $4, R4, R5, R6 // 86940500 ++ ALSLWU $4, R4, R5, R6 // 86940700 ++ ALSLV $4, R4, R5, R6 // 86942d00 +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index 861ec8a06e..ae1048636e 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -567,6 +567,11 @@ const ( + AMOVVF + AMOVVD + ++ // 2.2.1.3 ++ AALSLW ++ AALSLWU ++ AALSLV ++ + // 2.2.1.8 + AORN + AANDN +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index 7b788d23a9..0770f80ce8 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -125,6 +125,9 @@ var Anames = []string{ + "MOVDV", + "MOVVF", + "MOVVD", ++ "ALSLW", ++ "ALSLWU", ++ "ALSLV", + "ORN", + "ANDN", + "AMSWAPB", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index b4176574ef..e4ba1f2d8d 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -425,6 +425,8 @@ var optab = []Optab{ + {APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 47, 4, 0, 0}, + {APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 48, 20, 0, 0}, + ++ {AALSLV, C_U3CON, C_REG, C_REG, C_REG, C_NONE, 64, 4, 0, 0}, ++ + {obj.APCALIGN, C_U12CON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, + {obj.APCDATA, C_32CON, C_NONE, C_NONE, C_32CON, C_NONE, 0, 0, 0, 0}, + {obj.APCDATA, C_DCON, C_NONE, C_NONE, C_DCON, C_NONE, 0, 0, 0, 0}, +@@ -1499,6 +1501,10 @@ func buildop(ctxt *obj.Link) { + case ABFPT: + opset(ABFPF, r0) + ++ case AALSLV: ++ opset(AALSLW, r0) ++ opset(AALSLWU, r0) ++ + case AMOVW, + AMOVD, + AMOVF, +@@ -1932,6 +1938,10 @@ func OP_RR(op uint32, r2 uint32, r3 uint32) uint32 { + return op | (r2&0x1F)<<5 | (r3&0x1F)<<0 + } + ++func OP_2IRRR(op uint32, i uint32, r2 uint32, r3 uint32, r4 uint32) uint32 { ++ return op | (i&0x3)<<15 | (r2&0x1F)<<10 | (r3&0x1F)<<5 | (r4&0x1F)<<0 ++} ++ + func OP_16IR_5I(op uint32, i uint32, r2 uint32) uint32 { + return op | (i&0xFFFF)<<10 | (r2&0x1F)<<5 | ((i >> 16) & 0x1F) + } +@@ -2712,6 +2722,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + case 62: // rdtimex rd, rj + o1 = OP_RR(c.oprr(p.As), uint32(p.To.Reg), uint32(p.RegTo2)) + ++ case 64: // alsl rd, rj, rk, sa2 ++ sa := p.From.Offset - 1 ++ if sa > 3 { ++ c.ctxt.Diag("The shift amount is too large.") ++ } ++ r := p.GetFrom3().Reg ++ o1 = OP_2IRRR(c.opirrr(p.As), uint32(sa), uint32(r), uint32(p.Reg), uint32(p.To.Reg)) ++ + case 65: // mov sym@GOT, r ==> pcalau12i + ld.d + o1 = OP_IR(c.opir(APCADDU12I), uint32(0), uint32(p.To.Reg)) + c.cursym.AddRel(c.ctxt, obj.Reloc{ +@@ -4143,6 +4161,19 @@ func (c *ctxt0) opirr(a obj.As) uint32 { + return 0 + } + ++func (c *ctxt0) opirrr(a obj.As) uint32 { ++ switch a { ++ case AALSLW: ++ return 0x2 << 17 // alsl.w ++ case AALSLWU: ++ return 0x3 << 17 // alsl.wu ++ case AALSLV: ++ return 0x16 << 17 // alsl.d ++ } ++ ++ return 0 ++} ++ + func (c *ctxt0) opirir(a obj.As) uint32 { + switch a { + case ABSTRINSW: +diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go +index a990b23089..64bb41ae5a 100644 +--- a/src/cmd/internal/obj/loong64/doc.go ++++ b/src/cmd/internal/obj/loong64/doc.go +@@ -268,6 +268,27 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate) + bits[11:1]: block size, the value range is [16, 1024], and it must be an integer multiple of 16 + bits[20:12]: block num, the value range is [1, 256] + bits[36:21]: stride, the value range is [0, 0xffff] ++ ++4. ShiftAdd instructions ++ Mapping between Go and platform assembly: ++ Go assembly | platform assembly ++ ALSL.W/WU/V $Imm, Rj, Rk, Rd | alsl.w/wu/d rd, rj, rk, $imm ++ ++ Instruction encoding format is as follows: ++ ++ | 31 ~ 17 | 16 ~ 15 | 14 ~ 10 | 9 ~ 5 | 4 ~ 0 | ++ | opcode | sa2 | rk | rj | rd | ++ ++ The alsl.w/wu/v series of instructions shift the data in rj left by sa+1, add the value ++ in rk, and write the result to rd. ++ ++ To allow programmers to directly write the desired shift amount in assembly code, we actually write ++ the value of sa2+1 in the assembly code and then include the value of sa2 in the instruction encoding. ++ ++ For example: ++ ++ Go assembly | instruction Encoding ++ ALSLV $4, r4, r5, R6 | 002d9486 + */ + + package loong64 +-- +2.43.7 + diff --git a/0026-cmd-compile-optimize-multiplication-rules-on-loong64.patch b/0026-cmd-compile-optimize-multiplication-rules-on-loong64.patch new file mode 100644 index 0000000..f4d8a87 --- /dev/null +++ b/0026-cmd-compile-optimize-multiplication-rules-on-loong64.patch @@ -0,0 +1,749 @@ +From fb194e1cd9f7cbd7f63d2d4c74f32021463a55a9 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 22 May 2025 16:21:10 +0800 +Subject: [PATCH 26/61] cmd/compile: optimize multiplication rules on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Improve multiplication strength reduction, refer to CL 626998, +add additional 3 linear combination instructions for loong64. + +goos: linux +goarch: loong64 +pkg: cmd/compile/internal/test +cpu: Loongson-3A6000-HV @ 2500.00MHz + | bench.old | bench.new | + | sec/op | sec/op vs base | +MulconstI32/3 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstI32/5 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstI32/12 1.601n ± 0% 1.201n ± 0% -24.98% (p=0.000 n=10) +MulconstI32/120 1.6010n ± 0% 0.8130n ± 0% -49.22% (p=0.000 n=10) +MulconstI32/-120 1.6010n ± 0% 0.8109n ± 0% -49.35% (p=0.000 n=10) +MulconstI32/65537 1.6275n ± 0% 0.8005n ± 0% -50.81% (p=0.000 n=10) +MulconstI32/65538 1.6290n ± 0% 0.8004n ± 0% -50.87% (p=0.000 n=10) +MulconstI64/3 1.6010n ± 0% 0.8004n ± 0% -50.01% (p=0.000 n=10) +MulconstI64/5 1.6010n ± 0% 0.8004n ± 0% -50.01% (p=0.000 n=10) +MulconstI64/12 1.601n ± 0% 1.201n ± 0% -24.98% (p=0.000 n=10) +MulconstI64/120 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstI64/-120 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstI64/65537 1.6270n ± 0% 0.8005n ± 0% -50.80% (p=0.000 n=10) +MulconstI64/65538 1.6290n ± 0% 0.8071n ± 1% -50.45% (p=0.000 n=10) +MulconstU32/3 1.6010n ± 0% 0.8004n ± 0% -50.01% (p=0.000 n=10) +MulconstU32/5 1.6010n ± 0% 0.8004n ± 0% -50.01% (p=0.000 n=10) +MulconstU32/12 1.601n ± 0% 1.201n ± 0% -24.98% (p=0.000 n=10) +MulconstU32/120 1.6010n ± 0% 0.8066n ± 0% -49.62% (p=0.000 n=10) +MulconstU32/65537 1.6290n ± 0% 0.8005n ± 0% -50.86% (p=0.000 n=10) +MulconstU32/65538 1.6280n ± 0% 0.8005n ± 0% -50.83% (p=0.000 n=10) +MulconstU64/3 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstU64/5 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstU64/12 1.601n ± 0% 1.201n ± 0% -24.98% (p=0.000 n=10) +MulconstU64/120 1.6010n ± 0% 0.8005n ± 0% -50.00% (p=0.000 n=10) +MulconstU64/65537 1.6290n ± 0% 0.8005n ± 0% -50.86% (p=0.000 n=10) +MulconstU64/65538 1.6300n ± 0% 0.8067n ± 0% -50.51% (p=0.000 n=10) +geomean 1.609n 0.8537n -46.95% + +goos: linux +goarch: loong64 +pkg: cmd/compile/internal/test +cpu: Loongson-3A5000 @ 2500.00MHz + | bench.old | bench.new | + | sec/op | sec/op vs base | +MulconstI32/3 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstI32/5 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstI32/12 1.601n ± 0% 1.202n ± 0% -24.92% (p=0.000 n=10) +MulconstI32/120 1.6020n ± 0% 0.8012n ± 0% -49.99% (p=0.000 n=10) +MulconstI32/-120 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstI32/65537 1.6020n ± 0% 0.8007n ± 0% -50.02% (p=0.000 n=10) +MulconstI32/65538 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstI64/3 1.6015n ± 0% 0.8007n ± 0% -50.00% (p=0.000 n=10) +MulconstI64/5 1.6020n ± 0% 0.8007n ± 0% -50.02% (p=0.000 n=10) +MulconstI64/12 1.602n ± 0% 1.202n ± 0% -25.00% (p=0.000 n=10) +MulconstI64/120 1.6030n ± 0% 0.8011n ± 0% -50.02% (p=0.000 n=10) +MulconstI64/-120 1.6020n ± 0% 0.8007n ± 0% -50.02% (p=0.000 n=10) +MulconstI64/65537 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstI64/65538 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstU32/3 1.6010n ± 0% 0.8006n ± 0% -49.99% (p=0.000 n=10) +MulconstU32/5 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstU32/12 1.601n ± 0% 1.202n ± 0% -24.92% (p=0.000 n=10) +MulconstU32/120 1.6010n ± 0% 0.8006n ± 0% -49.99% (p=0.000 n=10) +MulconstU32/65537 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstU32/65538 1.6020n ± 0% 0.8009n ± 0% -50.01% (p=0.000 n=10) +MulconstU64/3 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstU64/5 1.6010n ± 0% 0.8007n ± 0% -49.98% (p=0.000 n=10) +MulconstU64/12 1.601n ± 0% 1.201n ± 0% -24.98% (p=0.000 n=10) +MulconstU64/120 1.6020n ± 0% 0.8007n ± 0% -50.02% (p=0.000 n=10) +MulconstU64/65537 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +MulconstU64/65538 1.6010n ± 0% 0.8007n ± 0% -49.99% (p=0.000 n=10) +geomean 1.601n 0.8523n -46.77% + +Change-Id: I9fb0e47ca57875da171a347bf4828adfab41b875 +Reviewed-on: https://go-review.googlesource.com/c/go/+/675455 +Reviewed-by: Mark Freeman +Reviewed-by: abner chenc +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +Auto-Submit: Keith Randall +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 4 +- + .../internal/ssa/_gen/LOONG64latelower.rules | 6 ++ + src/cmd/compile/internal/ssa/config.go | 86 ++++++++++++++++++- + .../compile/internal/ssa/rewriteLOONG64.go | 25 ++---- + .../internal/ssa/rewriteLOONG64latelower.go | 29 +++++++ + test/codegen/arithmetic.go | 8 +- + test/codegen/multiply.go | 60 +++++++++++++ + 7 files changed, 191 insertions(+), 27 deletions(-) + create mode 100644 src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules + create mode 100644 src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index d67fc900b5..d205311ef6 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -748,10 +748,10 @@ + (SRLVconst [rc] (MOVBUreg x)) && rc >= 8 => (MOVVconst [0]) + + // mul by constant +-(MULV x (MOVVconst [-1])) => (NEGV x) + (MULV _ (MOVVconst [0])) => (MOVVconst [0]) + (MULV x (MOVVconst [1])) => x +-(MULV x (MOVVconst [c])) && isPowerOfTwo(c) => (SLLVconst [log64(c)] x) ++ ++(MULV x (MOVVconst [c])) && canMulStrengthReduce(config, c) => {mulStrengthReduce(v, x, c)} + + (MULV (NEGV x) (MOVVconst [c])) => (MULV x (MOVVconst [-c])) + (MULV (NEGV x) (NEGV y)) => (MULV x y) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +new file mode 100644 +index 0000000000..95844381c2 +--- /dev/null ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +@@ -0,0 +1,6 @@ ++// Copyright 2025 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// Prefer addition when shifting left by one. ++(SLLVconst [1] x) => (ADDV x x) +diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go +index d4cd32a0d7..50ec2ec177 100644 +--- a/src/cmd/compile/internal/ssa/config.go ++++ b/src/cmd/compile/internal/ssa/config.go +@@ -283,6 +283,8 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo + c.RegSize = 8 + c.lowerBlock = rewriteBlockLOONG64 + c.lowerValue = rewriteValueLOONG64 ++ c.lateLowerBlock = rewriteBlockLOONG64latelower ++ c.lateLowerValue = rewriteValueLOONG64latelower + c.registers = registersLOONG64[:] + c.gpRegMask = gpRegMaskLOONG64 + c.fpRegMask = fpRegMaskLOONG64 +@@ -562,6 +564,43 @@ func (c *Config) buildRecipes(arch string) { + return m.Block.NewValue2I(m.Pos, OpARM64SUBshiftLL, m.Type, int64(i), x, y) + }) + } ++ case "loong64": ++ // - multiply is 4 cycles. ++ // - add/sub/shift are 1 cycle. ++ // On loong64, using a multiply also needs to load the constant into a register. ++ // TODO: figure out a happy medium. ++ mulCost = 45 ++ ++ // add ++ r(1, 1, 10, ++ func(m, x, y *Value) *Value { ++ return m.Block.NewValue2(m.Pos, OpLOONG64ADDV, m.Type, x, y) ++ }) ++ // neg ++ r(-1, 0, 10, ++ func(m, x, y *Value) *Value { ++ return m.Block.NewValue1(m.Pos, OpLOONG64NEGV, m.Type, x) ++ }) ++ // sub ++ r(1, -1, 10, ++ func(m, x, y *Value) *Value { ++ return m.Block.NewValue2(m.Pos, OpLOONG64SUBV, m.Type, x, y) ++ }) ++ ++ // regular shifts ++ for i := 1; i < 64; i++ { ++ c := 10 ++ if i == 1 { ++ // Prefer x<<1 over x+x. ++ // Note that we eventually reverse this decision in LOONG64latelower.rules, ++ // but this makes shift combining rules in LOONG64.rules simpler. ++ c-- ++ } ++ r(1< +Date: Tue, 5 Aug 2025 20:50:06 +0800 +Subject: [PATCH 27/61] cmd/compile/internal/ssa: optimise more branches with + SGTconst/SGTUconst on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add branches to convert EQZ/NEZ into more optimal branch conditions. +This reduces 720 instructions from the go toolchain binary on loong64. + + file before after Δ % + asm 555306 555082 -224 -0.0403% + cgo 481814 481742 -72 -0.0149% + compile 2475686 2475710 +24 +0.0010% + cover 516854 516770 -84 -0.0163% + link 702566 702530 -36 -0.0051% + preprofile 238612 238548 -64 -0.0268% + vet 793140 793060 -80 -0.0101% + go 1573466 1573346 -120 -0.0076% + gofmt 320560 320496 -64 -0.0200% + total 7658004 7657284 -720 -0.0094% + +Additionally, rename EQ/NE to EQZ/NEZ to enhance readability. + +Change-Id: I688b4404da80fe9c12e73548aa923e04e7260fc6 +--- + src/cmd/compile/internal/loong64/ssa.go | 8 +- + .../compile/internal/ssa/_gen/LOONG64.rules | 73 ++++---- + .../compile/internal/ssa/_gen/LOONG64Ops.go | 4 +- + src/cmd/compile/internal/ssa/opGen.go | 8 +- + .../compile/internal/ssa/rewriteLOONG64.go | 172 +++++++++++------- + 5 files changed, 157 insertions(+), 108 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index a71a5c3e43..4492299d68 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -994,8 +994,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + var blockJump = map[ssa.BlockKind]struct { + asm, invasm obj.As + }{ +- ssa.BlockLOONG64EQ: {loong64.ABEQ, loong64.ABNE}, +- ssa.BlockLOONG64NE: {loong64.ABNE, loong64.ABEQ}, ++ ssa.BlockLOONG64EQZ: {loong64.ABEQ, loong64.ABNE}, ++ ssa.BlockLOONG64NEZ: {loong64.ABNE, loong64.ABEQ}, + ssa.BlockLOONG64LTZ: {loong64.ABLTZ, loong64.ABGEZ}, + ssa.BlockLOONG64GEZ: {loong64.ABGEZ, loong64.ABLTZ}, + ssa.BlockLOONG64LEZ: {loong64.ABLEZ, loong64.ABGTZ}, +@@ -1021,7 +1021,7 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) { + case ssa.BlockExit, ssa.BlockRetJmp: + case ssa.BlockRet: + s.Prog(obj.ARET) +- case ssa.BlockLOONG64EQ, ssa.BlockLOONG64NE, ++ case ssa.BlockLOONG64EQZ, ssa.BlockLOONG64NEZ, + ssa.BlockLOONG64LTZ, ssa.BlockLOONG64GEZ, + ssa.BlockLOONG64LEZ, ssa.BlockLOONG64GTZ, + ssa.BlockLOONG64BEQ, ssa.BlockLOONG64BNE, +@@ -1051,7 +1051,7 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) { + p.From.Type = obj.TYPE_REG + p.From.Reg = b.Controls[0].Reg() + p.Reg = b.Controls[1].Reg() +- case ssa.BlockLOONG64EQ, ssa.BlockLOONG64NE, ++ case ssa.BlockLOONG64EQZ, ssa.BlockLOONG64NEZ, + ssa.BlockLOONG64LTZ, ssa.BlockLOONG64GEZ, + ssa.BlockLOONG64LEZ, ssa.BlockLOONG64GTZ, + ssa.BlockLOONG64FPT, ssa.BlockLOONG64FPF: +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index d205311ef6..2c57e6fa9b 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -517,7 +517,7 @@ + (GetCallerSP ...) => (LoweredGetCallerSP ...) + (GetCallerPC ...) => (LoweredGetCallerPC ...) + +-(If cond yes no) => (NE (MOVBUreg cond) yes no) ++(If cond yes no) => (NEZ (MOVBUreg cond) yes no) + (MOVBUreg x:((SGT|SGTU) _ _)) => x + (MOVBUreg x:(XOR (MOVVconst [1]) ((SGT|SGTU) _ _))) => x + +@@ -900,41 +900,46 @@ + // Optimizations + + // Absorb boolean tests into block +-(NE (FPFlagTrue cmp) yes no) => (FPT cmp yes no) +-(NE (FPFlagFalse cmp) yes no) => (FPF cmp yes no) +-(EQ (FPFlagTrue cmp) yes no) => (FPF cmp yes no) +-(EQ (FPFlagFalse cmp) yes no) => (FPT cmp yes no) +-(NE (XORconst [1] cmp:(SGT _ _)) yes no) => (EQ cmp yes no) +-(NE (XORconst [1] cmp:(SGTU _ _)) yes no) => (EQ cmp yes no) +-(NE (XORconst [1] cmp:(SGTconst _)) yes no) => (EQ cmp yes no) +-(NE (XORconst [1] cmp:(SGTUconst _)) yes no) => (EQ cmp yes no) +-(EQ (XORconst [1] cmp:(SGT _ _)) yes no) => (NE cmp yes no) +-(EQ (XORconst [1] cmp:(SGTU _ _)) yes no) => (NE cmp yes no) +-(EQ (XORconst [1] cmp:(SGTconst _)) yes no) => (NE cmp yes no) +-(EQ (XORconst [1] cmp:(SGTUconst _)) yes no) => (NE cmp yes no) +-(NE (SGTUconst [1] x) yes no) => (EQ x yes no) +-(EQ (SGTUconst [1] x) yes no) => (NE x yes no) +-(NE (SGTU x (MOVVconst [0])) yes no) => (NE x yes no) +-(EQ (SGTU x (MOVVconst [0])) yes no) => (EQ x yes no) +-(NE (SGTconst [0] x) yes no) => (LTZ x yes no) +-(EQ (SGTconst [0] x) yes no) => (GEZ x yes no) +-(NE (SGT x (MOVVconst [0])) yes no) => (GTZ x yes no) +-(EQ (SGT x (MOVVconst [0])) yes no) => (LEZ x yes no) +- +-(EQ (SGTU (MOVVconst [c]) y) yes no) && c >= -2048 && c <= 2047 => (EQ (SGTUconst [c] y) yes no) +-(NE (SGTU (MOVVconst [c]) y) yes no) && c >= -2048 && c <= 2047 => (NE (SGTUconst [c] y) yes no) +-(EQ (SUBV x y) yes no) => (BEQ x y yes no) +-(NE (SUBV x y) yes no) => (BNE x y yes no) +-(EQ (SGT x y) yes no) => (BGE y x yes no) +-(NE (SGT x y) yes no) => (BLT y x yes no) +-(EQ (SGTU x y) yes no) => (BGEU y x yes no) +-(NE (SGTU x y) yes no) => (BLTU y x yes no) ++(NEZ (FPFlagTrue cmp) yes no) => (FPT cmp yes no) ++(NEZ (FPFlagFalse cmp) yes no) => (FPF cmp yes no) ++(EQZ (FPFlagTrue cmp) yes no) => (FPF cmp yes no) ++(EQZ (FPFlagFalse cmp) yes no) => (FPT cmp yes no) ++(NEZ (XORconst [1] cmp:(SGT _ _)) yes no) => (EQZ cmp yes no) ++(NEZ (XORconst [1] cmp:(SGTU _ _)) yes no) => (EQZ cmp yes no) ++(NEZ (XORconst [1] cmp:(SGTconst _)) yes no) => (EQZ cmp yes no) ++(NEZ (XORconst [1] cmp:(SGTUconst _)) yes no) => (EQZ cmp yes no) ++(EQZ (XORconst [1] cmp:(SGT _ _)) yes no) => (NEZ cmp yes no) ++(EQZ (XORconst [1] cmp:(SGTU _ _)) yes no) => (NEZ cmp yes no) ++(EQZ (XORconst [1] cmp:(SGTconst _)) yes no) => (NEZ cmp yes no) ++(EQZ (XORconst [1] cmp:(SGTUconst _)) yes no) => (NEZ cmp yes no) ++(NEZ (SGTUconst [1] x) yes no) => (EQZ x yes no) ++(EQZ (SGTUconst [1] x) yes no) => (NEZ x yes no) ++(NEZ (SGTU x (MOVVconst [0])) yes no) => (NEZ x yes no) ++(EQZ (SGTU x (MOVVconst [0])) yes no) => (EQZ x yes no) ++(NEZ (SGTconst [0] x) yes no) => (LTZ x yes no) ++(EQZ (SGTconst [0] x) yes no) => (GEZ x yes no) ++(NEZ (SGT x (MOVVconst [0])) yes no) => (GTZ x yes no) ++(EQZ (SGT x (MOVVconst [0])) yes no) => (LEZ x yes no) ++ ++// Convert EQZ/NEZ into more optimal branch conditions. ++(EQZ (SGTU (MOVVconst [c]) y) yes no) && c >= -2048 && c <= 2047 => (EQZ (SGTUconst [c] y) yes no) ++(NEZ (SGTU (MOVVconst [c]) y) yes no) && c >= -2048 && c <= 2047 => (NEZ (SGTUconst [c] y) yes no) ++(EQZ (SUBV x y) yes no) => (BEQ x y yes no) ++(NEZ (SUBV x y) yes no) => (BNE x y yes no) ++(EQZ (SGT x y) yes no) => (BGE y x yes no) ++(NEZ (SGT x y) yes no) => (BLT y x yes no) ++(EQZ (SGTU x y) yes no) => (BGEU y x yes no) ++(NEZ (SGTU x y) yes no) => (BLTU y x yes no) ++(EQZ (SGTconst [c] y) yes no) => (BGE y (MOVVconst [c]) yes no) ++(NEZ (SGTconst [c] y) yes no) => (BLT y (MOVVconst [c]) yes no) ++(EQZ (SGTUconst [c] y) yes no) => (BGEU y (MOVVconst [c]) yes no) ++(NEZ (SGTUconst [c] y) yes no) => (BLTU y (MOVVconst [c]) yes no) + + // absorb constants into branches +-(EQ (MOVVconst [0]) yes no) => (First yes no) +-(EQ (MOVVconst [c]) yes no) && c != 0 => (First no yes) +-(NE (MOVVconst [0]) yes no) => (First no yes) +-(NE (MOVVconst [c]) yes no) && c != 0 => (First yes no) ++(EQZ (MOVVconst [0]) yes no) => (First yes no) ++(EQZ (MOVVconst [c]) yes no) && c != 0 => (First no yes) ++(NEZ (MOVVconst [0]) yes no) => (First no yes) ++(NEZ (MOVVconst [c]) yes no) && c != 0 => (First yes no) + (LTZ (MOVVconst [c]) yes no) && c < 0 => (First yes no) + (LTZ (MOVVconst [c]) yes no) && c >= 0 => (First no yes) + (LEZ (MOVVconst [c]) yes no) && c <= 0 => (First yes no) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index cef0a2d602..6454a198da 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -580,8 +580,8 @@ func init() { + } + + blocks := []blockData{ +- {name: "EQ", controls: 1}, +- {name: "NE", controls: 1}, ++ {name: "EQZ", controls: 1}, // = 0 ++ {name: "NEZ", controls: 1}, // != 0 + {name: "LTZ", controls: 1}, // < 0 + {name: "LEZ", controls: 1}, // <= 0 + {name: "GTZ", controls: 1}, // > 0 +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index 5d13f81841..1a195a5e5d 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -94,8 +94,8 @@ const ( + BlockARM64GEnoov + BlockARM64JUMPTABLE + +- BlockLOONG64EQ +- BlockLOONG64NE ++ BlockLOONG64EQZ ++ BlockLOONG64NEZ + BlockLOONG64LTZ + BlockLOONG64LEZ + BlockLOONG64GTZ +@@ -250,8 +250,8 @@ var blockString = [...]string{ + BlockARM64GEnoov: "GEnoov", + BlockARM64JUMPTABLE: "JUMPTABLE", + +- BlockLOONG64EQ: "EQ", +- BlockLOONG64NE: "NE", ++ BlockLOONG64EQZ: "EQZ", ++ BlockLOONG64NEZ: "NEZ", + BlockLOONG64LTZ: "LTZ", + BlockLOONG64LEZ: "LEZ", + BlockLOONG64GTZ: "GTZ", +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 36d333c625..7c4f519683 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -11446,8 +11446,8 @@ func rewriteValueLOONG64_OpZero(v *Value) bool { + func rewriteBlockLOONG64(b *Block) bool { + typ := &b.Func.Config.Types + switch b.Kind { +- case BlockLOONG64EQ: +- // match: (EQ (FPFlagTrue cmp) yes no) ++ case BlockLOONG64EQZ: ++ // match: (EQZ (FPFlagTrue cmp) yes no) + // result: (FPF cmp yes no) + for b.Controls[0].Op == OpLOONG64FPFlagTrue { + v_0 := b.Controls[0] +@@ -11455,7 +11455,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64FPF, cmp) + return true + } +- // match: (EQ (FPFlagFalse cmp) yes no) ++ // match: (EQZ (FPFlagFalse cmp) yes no) + // result: (FPT cmp yes no) + for b.Controls[0].Op == OpLOONG64FPFlagFalse { + v_0 := b.Controls[0] +@@ -11463,8 +11463,8 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64FPT, cmp) + return true + } +- // match: (EQ (XORconst [1] cmp:(SGT _ _)) yes no) +- // result: (NE cmp yes no) ++ // match: (EQZ (XORconst [1] cmp:(SGT _ _)) yes no) ++ // result: (NEZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11474,11 +11474,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGT { + break + } +- b.resetWithControl(BlockLOONG64NE, cmp) ++ b.resetWithControl(BlockLOONG64NEZ, cmp) + return true + } +- // match: (EQ (XORconst [1] cmp:(SGTU _ _)) yes no) +- // result: (NE cmp yes no) ++ // match: (EQZ (XORconst [1] cmp:(SGTU _ _)) yes no) ++ // result: (NEZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11488,11 +11488,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTU { + break + } +- b.resetWithControl(BlockLOONG64NE, cmp) ++ b.resetWithControl(BlockLOONG64NEZ, cmp) + return true + } +- // match: (EQ (XORconst [1] cmp:(SGTconst _)) yes no) +- // result: (NE cmp yes no) ++ // match: (EQZ (XORconst [1] cmp:(SGTconst _)) yes no) ++ // result: (NEZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11502,11 +11502,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTconst { + break + } +- b.resetWithControl(BlockLOONG64NE, cmp) ++ b.resetWithControl(BlockLOONG64NEZ, cmp) + return true + } +- // match: (EQ (XORconst [1] cmp:(SGTUconst _)) yes no) +- // result: (NE cmp yes no) ++ // match: (EQZ (XORconst [1] cmp:(SGTUconst _)) yes no) ++ // result: (NEZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11516,22 +11516,22 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTUconst { + break + } +- b.resetWithControl(BlockLOONG64NE, cmp) ++ b.resetWithControl(BlockLOONG64NEZ, cmp) + return true + } +- // match: (EQ (SGTUconst [1] x) yes no) +- // result: (NE x yes no) ++ // match: (EQZ (SGTUconst [1] x) yes no) ++ // result: (NEZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTUconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { + break + } + x := v_0.Args[0] +- b.resetWithControl(BlockLOONG64NE, x) ++ b.resetWithControl(BlockLOONG64NEZ, x) + return true + } +- // match: (EQ (SGTU x (MOVVconst [0])) yes no) +- // result: (EQ x yes no) ++ // match: (EQZ (SGTU x (MOVVconst [0])) yes no) ++ // result: (EQZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] + _ = v_0.Args[1] +@@ -11540,10 +11540,10 @@ func rewriteBlockLOONG64(b *Block) bool { + if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 { + break + } +- b.resetWithControl(BlockLOONG64EQ, x) ++ b.resetWithControl(BlockLOONG64EQZ, x) + return true + } +- // match: (EQ (SGTconst [0] x) yes no) ++ // match: (EQZ (SGTconst [0] x) yes no) + // result: (GEZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTconst { + v_0 := b.Controls[0] +@@ -11554,7 +11554,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64GEZ, x) + return true + } +- // match: (EQ (SGT x (MOVVconst [0])) yes no) ++ // match: (EQZ (SGT x (MOVVconst [0])) yes no) + // result: (LEZ x yes no) + for b.Controls[0].Op == OpLOONG64SGT { + v_0 := b.Controls[0] +@@ -11567,9 +11567,9 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64LEZ, x) + return true + } +- // match: (EQ (SGTU (MOVVconst [c]) y) yes no) ++ // match: (EQZ (SGTU (MOVVconst [c]) y) yes no) + // cond: c >= -2048 && c <= 2047 +- // result: (EQ (SGTUconst [c] y) yes no) ++ // result: (EQZ (SGTUconst [c] y) yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] + y := v_0.Args[1] +@@ -11584,10 +11584,10 @@ func rewriteBlockLOONG64(b *Block) bool { + v0 := b.NewValue0(v_0.Pos, OpLOONG64SGTUconst, typ.Bool) + v0.AuxInt = int64ToAuxInt(c) + v0.AddArg(y) +- b.resetWithControl(BlockLOONG64EQ, v0) ++ b.resetWithControl(BlockLOONG64EQZ, v0) + return true + } +- // match: (EQ (SUBV x y) yes no) ++ // match: (EQZ (SUBV x y) yes no) + // result: (BEQ x y yes no) + for b.Controls[0].Op == OpLOONG64SUBV { + v_0 := b.Controls[0] +@@ -11596,7 +11596,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BEQ, x, y) + return true + } +- // match: (EQ (SGT x y) yes no) ++ // match: (EQZ (SGT x y) yes no) + // result: (BGE y x yes no) + for b.Controls[0].Op == OpLOONG64SGT { + v_0 := b.Controls[0] +@@ -11605,7 +11605,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BGE, y, x) + return true + } +- // match: (EQ (SGTU x y) yes no) ++ // match: (EQZ (SGTU x y) yes no) + // result: (BGEU y x yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] +@@ -11614,7 +11614,29 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BGEU, y, x) + return true + } +- // match: (EQ (MOVVconst [0]) yes no) ++ // match: (EQZ (SGTconst [c] y) yes no) ++ // result: (BGE y (MOVVconst [c]) yes no) ++ for b.Controls[0].Op == OpLOONG64SGTconst { ++ v_0 := b.Controls[0] ++ c := auxIntToInt64(v_0.AuxInt) ++ y := v_0.Args[0] ++ v0 := b.NewValue0(b.Pos, OpLOONG64MOVVconst, typ.UInt64) ++ v0.AuxInt = int64ToAuxInt(c) ++ b.resetWithControl2(BlockLOONG64BGE, y, v0) ++ return true ++ } ++ // match: (EQZ (SGTUconst [c] y) yes no) ++ // result: (BGEU y (MOVVconst [c]) yes no) ++ for b.Controls[0].Op == OpLOONG64SGTUconst { ++ v_0 := b.Controls[0] ++ c := auxIntToInt64(v_0.AuxInt) ++ y := v_0.Args[0] ++ v0 := b.NewValue0(b.Pos, OpLOONG64MOVVconst, typ.UInt64) ++ v0.AuxInt = int64ToAuxInt(c) ++ b.resetWithControl2(BlockLOONG64BGEU, y, v0) ++ return true ++ } ++ // match: (EQZ (MOVVconst [0]) yes no) + // result: (First yes no) + for b.Controls[0].Op == OpLOONG64MOVVconst { + v_0 := b.Controls[0] +@@ -11624,7 +11646,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.Reset(BlockFirst) + return true + } +- // match: (EQ (MOVVconst [c]) yes no) ++ // match: (EQZ (MOVVconst [c]) yes no) + // cond: c != 0 + // result: (First no yes) + for b.Controls[0].Op == OpLOONG64MOVVconst { +@@ -11691,12 +11713,12 @@ func rewriteBlockLOONG64(b *Block) bool { + } + case BlockIf: + // match: (If cond yes no) +- // result: (NE (MOVBUreg cond) yes no) ++ // result: (NEZ (MOVBUreg cond) yes no) + for { + cond := b.Controls[0] + v0 := b.NewValue0(cond.Pos, OpLOONG64MOVBUreg, typ.UInt64) + v0.AddArg(cond) +- b.resetWithControl(BlockLOONG64NE, v0) ++ b.resetWithControl(BlockLOONG64NEZ, v0) + return true + } + case BlockLOONG64LEZ: +@@ -11751,8 +11773,8 @@ func rewriteBlockLOONG64(b *Block) bool { + b.swapSuccessors() + return true + } +- case BlockLOONG64NE: +- // match: (NE (FPFlagTrue cmp) yes no) ++ case BlockLOONG64NEZ: ++ // match: (NEZ (FPFlagTrue cmp) yes no) + // result: (FPT cmp yes no) + for b.Controls[0].Op == OpLOONG64FPFlagTrue { + v_0 := b.Controls[0] +@@ -11760,7 +11782,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64FPT, cmp) + return true + } +- // match: (NE (FPFlagFalse cmp) yes no) ++ // match: (NEZ (FPFlagFalse cmp) yes no) + // result: (FPF cmp yes no) + for b.Controls[0].Op == OpLOONG64FPFlagFalse { + v_0 := b.Controls[0] +@@ -11768,8 +11790,8 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64FPF, cmp) + return true + } +- // match: (NE (XORconst [1] cmp:(SGT _ _)) yes no) +- // result: (EQ cmp yes no) ++ // match: (NEZ (XORconst [1] cmp:(SGT _ _)) yes no) ++ // result: (EQZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11779,11 +11801,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGT { + break + } +- b.resetWithControl(BlockLOONG64EQ, cmp) ++ b.resetWithControl(BlockLOONG64EQZ, cmp) + return true + } +- // match: (NE (XORconst [1] cmp:(SGTU _ _)) yes no) +- // result: (EQ cmp yes no) ++ // match: (NEZ (XORconst [1] cmp:(SGTU _ _)) yes no) ++ // result: (EQZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11793,11 +11815,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTU { + break + } +- b.resetWithControl(BlockLOONG64EQ, cmp) ++ b.resetWithControl(BlockLOONG64EQZ, cmp) + return true + } +- // match: (NE (XORconst [1] cmp:(SGTconst _)) yes no) +- // result: (EQ cmp yes no) ++ // match: (NEZ (XORconst [1] cmp:(SGTconst _)) yes no) ++ // result: (EQZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11807,11 +11829,11 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTconst { + break + } +- b.resetWithControl(BlockLOONG64EQ, cmp) ++ b.resetWithControl(BlockLOONG64EQZ, cmp) + return true + } +- // match: (NE (XORconst [1] cmp:(SGTUconst _)) yes no) +- // result: (EQ cmp yes no) ++ // match: (NEZ (XORconst [1] cmp:(SGTUconst _)) yes no) ++ // result: (EQZ cmp yes no) + for b.Controls[0].Op == OpLOONG64XORconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { +@@ -11821,22 +11843,22 @@ func rewriteBlockLOONG64(b *Block) bool { + if cmp.Op != OpLOONG64SGTUconst { + break + } +- b.resetWithControl(BlockLOONG64EQ, cmp) ++ b.resetWithControl(BlockLOONG64EQZ, cmp) + return true + } +- // match: (NE (SGTUconst [1] x) yes no) +- // result: (EQ x yes no) ++ // match: (NEZ (SGTUconst [1] x) yes no) ++ // result: (EQZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTUconst { + v_0 := b.Controls[0] + if auxIntToInt64(v_0.AuxInt) != 1 { + break + } + x := v_0.Args[0] +- b.resetWithControl(BlockLOONG64EQ, x) ++ b.resetWithControl(BlockLOONG64EQZ, x) + return true + } +- // match: (NE (SGTU x (MOVVconst [0])) yes no) +- // result: (NE x yes no) ++ // match: (NEZ (SGTU x (MOVVconst [0])) yes no) ++ // result: (NEZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] + _ = v_0.Args[1] +@@ -11845,10 +11867,10 @@ func rewriteBlockLOONG64(b *Block) bool { + if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 { + break + } +- b.resetWithControl(BlockLOONG64NE, x) ++ b.resetWithControl(BlockLOONG64NEZ, x) + return true + } +- // match: (NE (SGTconst [0] x) yes no) ++ // match: (NEZ (SGTconst [0] x) yes no) + // result: (LTZ x yes no) + for b.Controls[0].Op == OpLOONG64SGTconst { + v_0 := b.Controls[0] +@@ -11859,7 +11881,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64LTZ, x) + return true + } +- // match: (NE (SGT x (MOVVconst [0])) yes no) ++ // match: (NEZ (SGT x (MOVVconst [0])) yes no) + // result: (GTZ x yes no) + for b.Controls[0].Op == OpLOONG64SGT { + v_0 := b.Controls[0] +@@ -11872,9 +11894,9 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64GTZ, x) + return true + } +- // match: (NE (SGTU (MOVVconst [c]) y) yes no) ++ // match: (NEZ (SGTU (MOVVconst [c]) y) yes no) + // cond: c >= -2048 && c <= 2047 +- // result: (NE (SGTUconst [c] y) yes no) ++ // result: (NEZ (SGTUconst [c] y) yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] + y := v_0.Args[1] +@@ -11889,10 +11911,10 @@ func rewriteBlockLOONG64(b *Block) bool { + v0 := b.NewValue0(v_0.Pos, OpLOONG64SGTUconst, typ.Bool) + v0.AuxInt = int64ToAuxInt(c) + v0.AddArg(y) +- b.resetWithControl(BlockLOONG64NE, v0) ++ b.resetWithControl(BlockLOONG64NEZ, v0) + return true + } +- // match: (NE (SUBV x y) yes no) ++ // match: (NEZ (SUBV x y) yes no) + // result: (BNE x y yes no) + for b.Controls[0].Op == OpLOONG64SUBV { + v_0 := b.Controls[0] +@@ -11901,7 +11923,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BNE, x, y) + return true + } +- // match: (NE (SGT x y) yes no) ++ // match: (NEZ (SGT x y) yes no) + // result: (BLT y x yes no) + for b.Controls[0].Op == OpLOONG64SGT { + v_0 := b.Controls[0] +@@ -11910,7 +11932,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BLT, y, x) + return true + } +- // match: (NE (SGTU x y) yes no) ++ // match: (NEZ (SGTU x y) yes no) + // result: (BLTU y x yes no) + for b.Controls[0].Op == OpLOONG64SGTU { + v_0 := b.Controls[0] +@@ -11919,7 +11941,29 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl2(BlockLOONG64BLTU, y, x) + return true + } +- // match: (NE (MOVVconst [0]) yes no) ++ // match: (NEZ (SGTconst [c] y) yes no) ++ // result: (BLT y (MOVVconst [c]) yes no) ++ for b.Controls[0].Op == OpLOONG64SGTconst { ++ v_0 := b.Controls[0] ++ c := auxIntToInt64(v_0.AuxInt) ++ y := v_0.Args[0] ++ v0 := b.NewValue0(b.Pos, OpLOONG64MOVVconst, typ.UInt64) ++ v0.AuxInt = int64ToAuxInt(c) ++ b.resetWithControl2(BlockLOONG64BLT, y, v0) ++ return true ++ } ++ // match: (NEZ (SGTUconst [c] y) yes no) ++ // result: (BLTU y (MOVVconst [c]) yes no) ++ for b.Controls[0].Op == OpLOONG64SGTUconst { ++ v_0 := b.Controls[0] ++ c := auxIntToInt64(v_0.AuxInt) ++ y := v_0.Args[0] ++ v0 := b.NewValue0(b.Pos, OpLOONG64MOVVconst, typ.UInt64) ++ v0.AuxInt = int64ToAuxInt(c) ++ b.resetWithControl2(BlockLOONG64BLTU, y, v0) ++ return true ++ } ++ // match: (NEZ (MOVVconst [0]) yes no) + // result: (First no yes) + for b.Controls[0].Op == OpLOONG64MOVVconst { + v_0 := b.Controls[0] +@@ -11930,7 +11974,7 @@ func rewriteBlockLOONG64(b *Block) bool { + b.swapSuccessors() + return true + } +- // match: (NE (MOVVconst [c]) yes no) ++ // match: (NEZ (MOVVconst [c]) yes no) + // cond: c != 0 + // result: (First yes no) + for b.Controls[0].Op == OpLOONG64MOVVconst { +-- +2.43.7 + diff --git a/0028-cmd-compile-internal-ssa-use-BEQ-BNE-to-optimize-the.patch b/0028-cmd-compile-internal-ssa-use-BEQ-BNE-to-optimize-the.patch new file mode 100644 index 0000000..8063a1f --- /dev/null +++ b/0028-cmd-compile-internal-ssa-use-BEQ-BNE-to-optimize-the.patch @@ -0,0 +1,83 @@ +From 6464752087bdb76d09343a2a354f7bc18ce5d8ae Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Mon, 28 Jul 2025 14:46:45 +0800 +Subject: [PATCH 28/61] cmd/compile/internal/ssa: use BEQ/BNE to optimize the + combination of XOR and EQZ/NEZ on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + file before after Δ % + go 1599056 1590560 -8496 -0.5313% + gofmt 326188 326104 -84 -0.0258% + asm 563482 561250 -2232 -0.3961% + cgo 488644 485252 -3392 -0.6942% + compile 2504614 2486388 -18226 -0.7277% + cover 526322 523270 -3052 -0.5799% + link 714532 711124 -3408 -0.4770% + preprofile 242316 241112 -1204 -0.4969% + vet 794446 786118 -8328 -1.0483% + +Change-Id: I0914889119a28ea672b694529ef54513fbb3f3b5 +(cherry picked from commit 214e2570cce846c6a03ea05728a591d153a9ba50) +--- + .../internal/ssa/_gen/LOONG64latelower.rules | 3 ++ + .../internal/ssa/rewriteLOONG64latelower.go | 32 +++++++++++++++++++ + 2 files changed, 35 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +index 95844381c2..44583e8e34 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +@@ -4,3 +4,6 @@ + + // Prefer addition when shifting left by one. + (SLLVconst [1] x) => (ADDV x x) ++ ++(EQZ (XOR x y) yes no) => (BEQ x y yes no) ++(NEZ (XOR x y) yes no) => (BNE x y yes no) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +index ef9b83192c..60ba120e48 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +@@ -25,5 +25,37 @@ func rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v *Value) bool { + return false + } + func rewriteBlockLOONG64latelower(b *Block) bool { ++ switch b.Kind { ++ case BlockLOONG64EQZ: ++ // match: (EQZ (XOR x y) yes no) ++ // result: (BEQ x y yes no) ++ for b.Controls[0].Op == OpLOONG64XOR { ++ v_0 := b.Controls[0] ++ _ = v_0.Args[1] ++ v_0_0 := v_0.Args[0] ++ v_0_1 := v_0.Args[1] ++ for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 { ++ x := v_0_0 ++ y := v_0_1 ++ b.resetWithControl2(BlockLOONG64BEQ, x, y) ++ return true ++ } ++ } ++ case BlockLOONG64NEZ: ++ // match: (NEZ (XOR x y) yes no) ++ // result: (BNE x y yes no) ++ for b.Controls[0].Op == OpLOONG64XOR { ++ v_0 := b.Controls[0] ++ _ = v_0.Args[1] ++ v_0_0 := v_0.Args[0] ++ v_0_1 := v_0.Args[1] ++ for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 { ++ x := v_0_0 ++ y := v_0_1 ++ b.resetWithControl2(BlockLOONG64BNE, x, y) ++ return true ++ } ++ } ++ } + return false + } +-- +2.43.7 + diff --git a/0029-cmd-compile-internal-ssa-eliminate-unnecessary-exten.patch b/0029-cmd-compile-internal-ssa-eliminate-unnecessary-exten.patch new file mode 100644 index 0000000..9e4a840 --- /dev/null +++ b/0029-cmd-compile-internal-ssa-eliminate-unnecessary-exten.patch @@ -0,0 +1,266 @@ +From 7445e4994338a075965a20d3572aea5c474cac09 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 31 Jul 2025 10:41:11 +0800 +Subject: [PATCH 29/61] cmd/compile/internal/ssa: eliminate unnecessary + extension operations +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + file before after Δ % + go 1598706 1597230 -1476 -0.0923% + gofmt 325180 324736 -444 -0.1365% + asm 562538 562098 -440 -0.0782% + cgo 488298 487634 -664 -0.1360% + compile 2504502 2503590 -912 -0.0364% + cover 525976 525312 -664 -0.1262% + link 714182 713226 -956 -0.1339% + preprofile 241308 240988 -320 -0.1326% + vet 794112 793316 -796 -0.1002% + +Change-Id: I048ef79518b41e83c53da1a3a6b7edaca7cb63f8 +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 15 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 165 ++++++++++++++++++ + 2 files changed, 180 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 2c57e6fa9b..32f4b43284 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -585,6 +585,21 @@ + (MOVWUreg x:(MOVBUload _ _)) => (MOVVreg x) + (MOVWUreg x:(MOVHUload _ _)) => (MOVVreg x) + (MOVWUreg x:(MOVWUload _ _)) => (MOVVreg x) ++(MOVBreg x:(MOVBloadidx _ _ _)) => (MOVVreg x) ++(MOVBUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x) ++(MOVHreg x:(MOVBloadidx _ _ _)) => (MOVVreg x) ++(MOVHreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x) ++(MOVHreg x:(MOVHloadidx _ _ _)) => (MOVVreg x) ++(MOVHUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x) ++(MOVHUreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x) ++(MOVWreg x:(MOVBloadidx _ _ _)) => (MOVVreg x) ++(MOVWreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x) ++(MOVWreg x:(MOVHloadidx _ _ _)) => (MOVVreg x) ++(MOVWreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x) ++(MOVWreg x:(MOVWloadidx _ _ _)) => (MOVVreg x) ++(MOVWUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x) ++(MOVWUreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x) ++(MOVWUreg x:(MOVWUloadidx _ _ _)) => (MOVVreg x) + + // fold double extensions + (MOVBreg x:(MOVBreg _)) => (MOVVreg x) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 7c4f519683..d05e8b7063 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -2328,6 +2328,17 @@ func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVBUreg x:(MOVBUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVBUreg x:(MOVBUreg _)) + // result: (MOVVreg x) + for { +@@ -2519,6 +2530,17 @@ func rewriteValueLOONG64_OpLOONG64MOVBreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVBreg x:(MOVBloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVBreg x:(MOVBreg _)) + // result: (MOVVreg x) + for { +@@ -3596,6 +3618,28 @@ func rewriteValueLOONG64_OpLOONG64MOVHUreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVHUreg x:(MOVBUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVHUreg x:(MOVHUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVHUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVHUreg x:(MOVBUreg _)) + // result: (MOVVreg x) + for { +@@ -3807,6 +3851,39 @@ func rewriteValueLOONG64_OpLOONG64MOVHreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVHreg x:(MOVBloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVHreg x:(MOVBUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVHreg x:(MOVHloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVHloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVHreg x:(MOVBreg _)) + // result: (MOVVreg x) + for { +@@ -4822,6 +4899,39 @@ func rewriteValueLOONG64_OpLOONG64MOVWUreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVWUreg x:(MOVBUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWUreg x:(MOVHUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVHUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWUreg x:(MOVWUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVWUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVWUreg x:(MOVBUreg _)) + // result: (MOVVreg x) + for { +@@ -5066,6 +5176,61 @@ func rewriteValueLOONG64_OpLOONG64MOVWreg(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (MOVWreg x:(MOVBloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWreg x:(MOVBUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVBUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWreg x:(MOVHloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVHloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWreg x:(MOVHUloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVHUloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } ++ // match: (MOVWreg x:(MOVWloadidx _ _ _)) ++ // result: (MOVVreg x) ++ for { ++ x := v_0 ++ if x.Op != OpLOONG64MOVWloadidx { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVWreg x:(MOVBreg _)) + // result: (MOVVreg x) + for { +-- +2.43.7 + diff --git a/0030-cmd-compile-internal-optimize-SGT-operation-using-R0.patch b/0030-cmd-compile-internal-optimize-SGT-operation-using-R0.patch new file mode 100644 index 0000000..07099cb --- /dev/null +++ b/0030-cmd-compile-internal-optimize-SGT-operation-using-R0.patch @@ -0,0 +1,196 @@ +From c4ecbdb5ec8ca948cc68966da7d161bfba19d926 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Mon, 28 Jul 2025 17:23:12 +0800 +Subject: [PATCH 30/61] cmd/compile/internal: optimize SGT operation using R0 + in case of constant zero +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + file before after Δ % + go 1590210 1589334 -876 -0.0551% + gofmt 323100 322920 -180 -0.0557% + asm 560310 560142 -168 -0.0300% + cgo 484906 484678 -228 -0.0470% + compile 2486272 2484256 -2016 -0.0811% + cover 522924 522496 -428 -0.0818% + link 710774 710526 -248 -0.0349% + preprofile 240108 239980 -128 -0.0533% + vet 785784 785204 -580 -0.0738% + +Change-Id: I846c6bdfcfd6dbfa18338afc13e34e350580ead4 +--- + src/cmd/compile/internal/loong64/ssa.go | 8 ++++ + .../compile/internal/ssa/_gen/LOONG64Ops.go | 2 + + .../internal/ssa/_gen/LOONG64latelower.rules | 3 ++ + src/cmd/compile/internal/ssa/opGen.go | 30 ++++++++++++ + .../internal/ssa/rewriteLOONG64latelower.go | 46 +++++++++++++++++++ + 5 files changed, 89 insertions(+) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 4492299d68..5b04ec6e40 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -295,6 +295,14 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg() + ++ case ssa.OpLOONG64SGTzero, ssa.OpLOONG64SGTUzero: ++ p := s.Prog(v.Op.Asm()) ++ p.From.Type = obj.TYPE_REG ++ p.From.Reg = v.Args[0].Reg() ++ p.Reg = loong64.REGZERO ++ p.To.Type = obj.TYPE_REG ++ p.To.Reg = v.Reg() ++ + case ssa.OpLOONG64NORconst: + // MOVV $const, Rtmp + // NOR Rtmp, Rarg0, Rout +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index 6454a198da..8cfc4ad711 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -263,8 +263,10 @@ func init() { + // comparisons + {name: "SGT", argLength: 2, reg: gp21, asm: "SGT", typ: "Bool"}, // 1 if arg0 > arg1 (signed), 0 otherwise + {name: "SGTconst", argLength: 1, reg: gp11, asm: "SGT", aux: "Int64", typ: "Bool"}, // 1 if auxInt > arg0 (signed), 0 otherwise ++ {name: "SGTzero", argLength: 1, reg: gp11, asm: "SGT", aux: "Int64", typ: "Bool"}, // 1 if arg0 > 0 (signed), 0 otherwise + {name: "SGTU", argLength: 2, reg: gp21, asm: "SGTU", typ: "Bool"}, // 1 if arg0 > arg1 (unsigned), 0 otherwise + {name: "SGTUconst", argLength: 1, reg: gp11, asm: "SGTU", aux: "Int64", typ: "Bool"}, // 1 if auxInt > arg0 (unsigned), 0 otherwise ++ {name: "SGTUzero", argLength: 1, reg: gp11, asm: "SGTU", aux: "Int64", typ: "Bool"}, // 1 if arg0 > 0 (unsigned), 0 otherwise + + {name: "CMPEQF", argLength: 2, reg: fp2flags, asm: "CMPEQF", typ: "Flags"}, // flags=true if arg0 = arg1, float32 + {name: "CMPEQD", argLength: 2, reg: fp2flags, asm: "CMPEQD", typ: "Flags"}, // flags=true if arg0 = arg1, float64 +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +index 44583e8e34..9e3a0565c2 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64latelower.rules +@@ -7,3 +7,6 @@ + + (EQZ (XOR x y) yes no) => (BEQ x y yes no) + (NEZ (XOR x y) yes no) => (BNE x y yes no) ++ ++(SGT x (MOVVconst [c])) && c == 0 => (SGTzero x) ++(SGTU x (MOVVconst [c])) && c == 0 => (SGTUzero x) +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index 1a195a5e5d..a8fe5a2932 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -1845,8 +1845,10 @@ const ( + OpLOONG64ROTRVconst + OpLOONG64SGT + OpLOONG64SGTconst ++ OpLOONG64SGTzero + OpLOONG64SGTU + OpLOONG64SGTUconst ++ OpLOONG64SGTUzero + OpLOONG64CMPEQF + OpLOONG64CMPEQD + OpLOONG64CMPGEF +@@ -24891,6 +24893,20 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, ++ { ++ name: "SGTzero", ++ auxType: auxInt64, ++ argLen: 1, ++ asm: loong64.ASGT, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, + { + name: "SGTU", + argLen: 2, +@@ -24919,6 +24935,20 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, ++ { ++ name: "SGTUzero", ++ auxType: auxInt64, ++ argLen: 1, ++ asm: loong64.ASGTU, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, + { + name: "CMPEQF", + argLen: 2, +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +index 60ba120e48..94125ad683 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +@@ -4,11 +4,57 @@ package ssa + + func rewriteValueLOONG64latelower(v *Value) bool { + switch v.Op { ++ case OpLOONG64SGT: ++ return rewriteValueLOONG64latelower_OpLOONG64SGT(v) ++ case OpLOONG64SGTU: ++ return rewriteValueLOONG64latelower_OpLOONG64SGTU(v) + case OpLOONG64SLLVconst: + return rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v) + } + return false + } ++func rewriteValueLOONG64latelower_OpLOONG64SGT(v *Value) bool { ++ v_1 := v.Args[1] ++ v_0 := v.Args[0] ++ // match: (SGT x (MOVVconst [c])) ++ // cond: c == 0 ++ // result: (SGTzero x) ++ for { ++ x := v_0 ++ if v_1.Op != OpLOONG64MOVVconst { ++ break ++ } ++ c := auxIntToInt64(v_1.AuxInt) ++ if !(c == 0) { ++ break ++ } ++ v.reset(OpLOONG64SGTzero) ++ v.AddArg(x) ++ return true ++ } ++ return false ++} ++func rewriteValueLOONG64latelower_OpLOONG64SGTU(v *Value) bool { ++ v_1 := v.Args[1] ++ v_0 := v.Args[0] ++ // match: (SGTU x (MOVVconst [c])) ++ // cond: c == 0 ++ // result: (SGTUzero x) ++ for { ++ x := v_0 ++ if v_1.Op != OpLOONG64MOVVconst { ++ break ++ } ++ c := auxIntToInt64(v_1.AuxInt) ++ if !(c == 0) { ++ break ++ } ++ v.reset(OpLOONG64SGTUzero) ++ v.AddArg(x) ++ return true ++ } ++ return false ++} + func rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v *Value) bool { + v_0 := v.Args[0] + // match: (SLLVconst [1] x) +-- +2.43.7 + diff --git a/0031-cmd-compile-internal-optimize-multiplication-use-new.patch b/0031-cmd-compile-internal-optimize-multiplication-use-new.patch new file mode 100644 index 0000000..8d74211 --- /dev/null +++ b/0031-cmd-compile-internal-optimize-multiplication-use-new.patch @@ -0,0 +1,542 @@ +From 45b24df60bf19a223bccd1c24f47b98e43130073 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 7 Aug 2025 11:23:55 +0800 +Subject: [PATCH 31/61] cmd/compile/internal: optimize multiplication use new + operation 'ADDshiftLLV' on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +goos: linux +goarch: loong64 +pkg: cmd/compile/internal/test +cpu: Loongson-3A6000-HV @ 2500.00MHz + │ old │ new │ + │ sec/op │ sec/op vs base │ +MulconstI32/3 0.8004n ± 0% 0.4247n ± 2% -46.94% (p=0.000 n=10) +MulconstI32/5 0.8005n ± 0% 0.4256n ± 1% -46.83% (p=0.000 n=10) +MulconstI32/12 1.2010n ± 0% 0.8005n ± 0% -33.35% (p=0.000 n=10) +MulconstI32/120 0.8090n ± 0% 0.8067n ± 0% -0.28% (p=0.007 n=10) +MulconstI32/-120 0.8109n ± 0% 0.8072n ± 0% -0.47% (p=0.000 n=10) +MulconstI32/65537 0.8004n ± 0% 0.8004n ± 0% ~ (p=1.000 n=10) +MulconstI32/65538 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.265 n=10) +MulconstI64/3 0.8005n ± 0% 0.4241n ± 1% -47.02% (p=0.000 n=10) +MulconstI64/5 0.8004n ± 0% 0.4249n ± 1% -46.91% (p=0.000 n=10) +MulconstI64/12 1.2010n ± 0% 0.8004n ± 0% -33.36% (p=0.000 n=10) +MulconstI64/120 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.635 n=10) +MulconstI64/-120 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.837 n=10) +MulconstI64/65537 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.837 n=10) +MulconstI64/65538 0.8096n ± 0% 0.8004n ± 0% -1.14% (p=0.000 n=10) +MulconstU32/3 0.8004n ± 0% 0.4263n ± 1% -46.75% (p=0.000 n=10) +MulconstU32/5 0.8005n ± 0% 0.4262n ± 1% -46.76% (p=0.000 n=10) +MulconstU32/12 1.2010n ± 0% 0.8005n ± 0% -33.35% (p=0.000 n=10) +MulconstU32/120 0.8105n ± 0% 0.8096n ± 0% ~ (p=0.183 n=10) +MulconstU32/65537 0.8004n ± 0% 0.8004n ± 0% ~ (p=1.000 n=10) +MulconstU32/65538 0.8005n ± 0% 0.8005n ± 0% ~ (p=1.000 n=10) +MulconstU64/3 0.8004n ± 0% 0.4265n ± 4% -46.71% (p=0.000 n=10) +MulconstU64/5 0.8004n ± 0% 0.4256n ± 0% -46.82% (p=0.000 n=10) +MulconstU64/12 1.2010n ± 0% 0.8004n ± 0% -33.36% (p=0.000 n=10) +MulconstU64/120 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.387 n=10) +MulconstU64/65537 0.8005n ± 0% 0.8005n ± 0% ~ (p=0.265 n=10) +MulconstU64/65538 0.8080n ± 0% 0.8004n ± 0% -0.93% (p=0.000 n=10) +geomean 0.8539n 0.6597n -22.74% + +Change-Id: I5717b4306c784e06f82f17214ad9bd872906281a +--- + src/cmd/compile/internal/loong64/ssa.go | 11 +++ + .../compile/internal/ssa/_gen/LOONG64Ops.go | 2 + + src/cmd/compile/internal/ssa/config.go | 11 ++- + src/cmd/compile/internal/ssa/opGen.go | 16 ++++ + src/cmd/internal/obj/loong64/asm.go | 4 +- + test/codegen/arithmetic.go | 4 +- + test/codegen/multiply.go | 94 +++++++++---------- + 7 files changed, 90 insertions(+), 52 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 5b04ec6e40..9bd653f23f 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -992,6 +992,17 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + {Type: obj.TYPE_CONST, Offset: int64((v.AuxInt >> 0) & 0x1f)}, + }) + ++ case ssa.OpLOONG64ADDshiftLLV: ++ // ADDshiftLLV Rarg0, Rarg1, $shift ++ // ALSLV $shift, Rarg1, Rarg0, Rtmp ++ p := s.Prog(v.Op.Asm()) ++ p.From.Type = obj.TYPE_CONST ++ p.From.Offset = v.AuxInt ++ p.Reg = v.Args[1].Reg() ++ p.AddRestSourceReg(v.Args[0].Reg()) ++ p.To.Type = obj.TYPE_REG ++ p.To.Reg = v.Reg() ++ + case ssa.OpClobber, ssa.OpClobberReg: + // TODO: implement for clobberdead experiment. Nop is ok for now. + default: +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index 8cfc4ad711..73b6993a66 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -579,6 +579,8 @@ func init() { + // is $hint and bit[41:5] is $n. + {name: "PRELD", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELD", hasSideEffects: true}, + {name: "PRELDX", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELDX", hasSideEffects: true}, ++ ++ {name: "ADDshiftLLV", argLength: 2, aux: "Int64", reg: gp21, asm: "ALSLV"}, // arg0 + arg1< 3 { +- c.ctxt.Diag("The shift amount is too large.") ++ if sa < 0 || sa > 3 { ++ c.ctxt.Diag("%v: shift amount out of range[1, 4].\n", p) + } + r := p.GetFrom3().Reg + o1 = OP_2IRRR(c.opirrr(p.As), uint32(sa), uint32(r), uint32(p.Reg), uint32(p.To.Reg)) +diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go +index 39a7986c7b..67adb50fa5 100644 +--- a/test/codegen/arithmetic.go ++++ b/test/codegen/arithmetic.go +@@ -257,7 +257,7 @@ func Mul_96(n int) int { + // 386:`SHLL\t[$]5`,`LEAL\t\(.*\)\(.*\*2\),`,-`IMULL` + // arm64:`LSL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL` + // arm:`SLL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL` +- // loong64:"ADDVU","SLLV\t[$]5",-"MULV" ++ // loong64:"SLLV\t[$]5","ALSLV\t[$]1," + // s390x:`SLD\t[$]5`,`SLD\t[$]6`,-`MULLD` + return n * 96 + } +@@ -317,7 +317,7 @@ func MergeMuls5(a, n int) int { + // Multiplications folded negation + + func FoldNegMul(a int) int { +- // loong64:"MULV","MOVV\t[$]-11",-"SUBVU\tR[0-9], R0," ++ // loong64:"SUBVU","ALSLV\t[$]2","ALSLV\t[$]1" + return (-a) * 11 + } + +diff --git a/test/codegen/multiply.go b/test/codegen/multiply.go +index bb22d1a2b1..dc2910dab7 100644 +--- a/test/codegen/multiply.go ++++ b/test/codegen/multiply.go +@@ -24,7 +24,7 @@ func m2(x int64) int64 { + func m3(x int64) int64 { + // amd64: "LEAQ\t.*[*]2" + // arm64: "ADD\tR[0-9]+<<1," +- // loong64: "ADDVU","ADDVU" ++ // loong64: "ALSLV\t[$]1," + return x * 3 + } + func m4(x int64) int64 { +@@ -36,19 +36,19 @@ func m4(x int64) int64 { + func m5(x int64) int64 { + // amd64: "LEAQ\t.*[*]4" + // arm64: "ADD\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]2,","ADDVU" ++ // loong64: "ALSLV\t[$]2," + return x * 5 + } + func m6(x int64) int64 { + // amd64: "LEAQ\t.*[*]1", "LEAQ\t.*[*]2" + // arm64: "ADD\tR[0-9]+,", "ADD\tR[0-9]+<<1," +- // loong64: "ADDVU","ADDVU","ADDVU" ++ // loong64: "ADDVU", "ADDVU", "ADDVU" + return x * 6 + } + func m7(x int64) int64 { + // amd64: "LEAQ\t.*[*]2" + // arm64: "LSL\t[$]3,", "SUB\tR[0-9]+," +- // loong64: "SLLV\t[$]3,","SUBVU" ++ // loong64: "ALSLV\t[$]1,", "ALSLV\t[$]1," + return x * 7 + } + func m8(x int64) int64 { +@@ -60,43 +60,43 @@ func m8(x int64) int64 { + func m9(x int64) int64 { + // amd64: "LEAQ\t.*[*]8" + // arm64: "ADD\tR[0-9]+<<3," +- // loong64: "SLLV\t[$]3,","ADDVU" ++ // loong64: "ALSLV\t[$]3," + return x * 9 + } + func m10(x int64) int64 { + // amd64: "LEAQ\t.*[*]1", "LEAQ\t.*[*]4" + // arm64: "ADD\tR[0-9]+,", "ADD\tR[0-9]+<<2," +- // loong64: "ADDVU","SLLV\t[$]3,","ADDVU" ++ // loong64: "ADDVU", "ALSLV\t[$]2," + return x * 10 + } + func m11(x int64) int64 { + // amd64: "LEAQ\t.*[*]4", "LEAQ\t.*[*]2" + // arm64: "MOVD\t[$]11,", "MUL" +- // loong64: "MOVV\t[$]11,", "MULV" ++ // loong64: "ALSLV\t[$]2,", "ALSLV\t[$]1," + return x * 11 + } + func m12(x int64) int64 { + // amd64: "LEAQ\t.*[*]2", "SHLQ\t[$]2," + // arm64: "LSL\t[$]2,", "ADD\tR[0-9]+<<1," +- // loong64: "ADDVU","ADDVU","SLLV\t[$]2," ++ // loong64: "SLLV", "ALSLV\t[$]1," + return x * 12 + } + func m13(x int64) int64 { + // amd64: "LEAQ\t.*[*]2", "LEAQ\t.*[*]4" + // arm64: "MOVD\t[$]13,", "MUL" +- // loong64: "MOVV\t[$]13,","MULV" ++ // loong64: "ALSLV\t[$]1,", "ALSLV\t[$]2," + return x * 13 + } + func m14(x int64) int64 { + // amd64: "IMUL3Q\t[$]14," + // arm64: "LSL\t[$]4,", "SUB\tR[0-9]+<<1," +- // loong64: "ADDVU","SLLV\t[$]4,","SUBVU" ++ // loong64: "ADDVU", "ALSLV\t[$]1", "ALSLV\t[$]2" + return x * 14 + } + func m15(x int64) int64 { + // amd64: "LEAQ\t.*[*]2", "LEAQ\t.*[*]4" + // arm64: "LSL\t[$]4,", "SUB\tR[0-9]+," +- // loong64: "SLLV\t[$]4,","SUBVU" ++ // loong64: "ALSLV\t[$]1,", "ALSLV\t[$]2," + return x * 15 + } + func m16(x int64) int64 { +@@ -108,79 +108,79 @@ func m16(x int64) int64 { + func m17(x int64) int64 { + // amd64: "LEAQ\t.*[*]1", "LEAQ\t.*[*]8" + // arm64: "ADD\tR[0-9]+<<4," +- // loong64: "SLLV\t[$]4,","ADDVU" ++ // loong64: "ALSLV\t[$]" + return x * 17 + } + func m18(x int64) int64 { + // amd64: "LEAQ\t.*[*]1", "LEAQ\t.*[*]8" + // arm64: "ADD\tR[0-9]+,", "ADD\tR[0-9]+<<3," +- // loong64: "ADDVU","SLLV\t[$]4,","ADDVU" ++ // loong64: "ADDVU", "ALSLV\t[$]3," + return x * 18 + } + func m19(x int64) int64 { + // amd64: "LEAQ\t.*[*]8", "LEAQ\t.*[*]2" + // arm64: "MOVD\t[$]19,", "MUL" +- // loong64: "MOVV\t[$]19,","MULV" ++ // loong64: "ALSLV\t[$]3,", "ALSLV\t[$]1," + return x * 19 + } + func m20(x int64) int64 { + // amd64: "LEAQ\t.*[*]4", "SHLQ\t[$]2," + // arm64: "LSL\t[$]2,", "ADD\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]2,","SLLV\t[$]4,","ADDVU" ++ // loong64: "SLLV\t[$]2,", "ALSLV\t[$]2," + return x * 20 + } + func m21(x int64) int64 { + // amd64: "LEAQ\t.*[*]4", "LEAQ\t.*[*]4" + // arm64: "MOVD\t[$]21,", "MUL" +- // loong64: "MOVV\t[$]21,","MULV" ++ // loong64: "ALSLV\t[$]2,", "ALSLV\t[$]2," + return x * 21 + } + func m22(x int64) int64 { + // amd64: "IMUL3Q\t[$]22," + // arm64: "MOVD\t[$]22,", "MUL" +- // loong64: "MOVV\t[$]22,","MULV" ++ // loong64: "ADDVU", "ALSLV\t[$]2,", "ALSLV\t[$]2," + return x * 22 + } + func m23(x int64) int64 { + // amd64: "IMUL3Q\t[$]23," + // arm64: "MOVD\t[$]23,", "MUL" +- // loong64: "MOVV\t[$]23,","MULV" ++ // loong64: "ALSLV\t[$]1,", "SUBVU", "ALSLV\t[$]3," + return x * 23 + } + func m24(x int64) int64 { + // amd64: "LEAQ\t.*[*]2", "SHLQ\t[$]3," + // arm64: "LSL\t[$]3,", "ADD\tR[0-9]+<<1," +- // loong64: "ADDVU","ADDVU","SLLV\t[$]3," ++ // loong64: "SLLV\t[$]3", "ALSLV\t[$]1," + return x * 24 + } + func m25(x int64) int64 { + // amd64: "LEAQ\t.*[*]4", "LEAQ\t.*[*]4" + // arm64: "MOVD\t[$]25,", "MUL" +- // loong64: "MOVV\t[$]25,","MULV" ++ // loong64: "ALSLV\t[$]2,", "ALSLV\t[$]2," + return x * 25 + } + func m26(x int64) int64 { + // amd64: "IMUL3Q\t[$]26," + // arm64: "MOVD\t[$]26,", "MUL" +- // loong64: "MOVV\t[$]26,","MULV" ++ // loong64: "ADDVU", "ALSLV\t[$]1,", "ALSLV\t[$]3," + return x * 26 + } + func m27(x int64) int64 { + // amd64: "LEAQ\t.*[*]2", "LEAQ\t.*[*]8" + // arm64: "MOVD\t[$]27,", "MUL" +- // loong64: "MOVV\t[$]27,","MULV" ++ // loong64: "ALSLV\t[$]1,", "ALSLV\t[$]3," + return x * 27 + } + func m28(x int64) int64 { + // amd64: "IMUL3Q\t[$]28," + // arm64: "LSL\t[$]5, "SUB\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]5,","SLLV\t[$]2,","SUBVU" ++ // loong64: "ALSLV\t[$]1,","SLLV\t[$]2,","ALSLV\t[$]3," + return x * 28 + } + func m29(x int64) int64 { + // amd64: "IMUL3Q\t[$]29," + // arm64: "MOVD\t[$]29,", "MUL" +- // loong64: "MOVV\t[$]29,","MULV" ++ // loong64: "ALSLV\t[$]1,","SLLV\t[$]5,","SUBVU" + return x * 29 + } + func m30(x int64) int64 { +@@ -204,49 +204,49 @@ func m32(x int64) int64 { + func m33(x int64) int64 { + // amd64: "SHLQ\t[$]2,", "LEAQ\t.*[*]8" + // arm64: "ADD\tR[0-9]+<<5," +- // loong64: "SLLV\t[$]5,","ADDVU" ++ // loong64: "ADDVU", "ALSLV\t[$]4," + return x * 33 + } + func m34(x int64) int64 { + // amd64: "SHLQ\t[$]5,", "LEAQ\t.*[*]2" + // arm64: "ADD\tR[0-9]+,", "ADD\tR[0-9]+<<4," +- // loong64: "ADDVU","SLLV\t[$]5,","ADDVU" ++ // loong64: "ADDVU", "ALSLV\t[$]4," + return x * 34 + } + func m35(x int64) int64 { + // amd64: "IMUL3Q\t[$]35," + // arm64: "MOVD\t[$]35,", "MUL" +- // loong64: "MOVV\t[$]35,","MULV" ++ // loong64: "ALSLV\t[$]4,", "ALSLV\t[$]1," + return x * 35 + } + func m36(x int64) int64 { + // amd64: "LEAQ\t.*[*]8", "SHLQ\t[$]2," + // arm64: "LSL\t[$]2,", "ADD\tR[0-9]+<<3," +- // loong64: "SLLV\t[$]2,","SLLV\t[$]5,","ADDVU" ++ // loong64: "SLLV\t[$]2,", "ALSLV\t[$]3," + return x * 36 + } + func m37(x int64) int64 { + // amd64: "LEAQ\t.*[*]8", "LEAQ\t.*[*]4" + // arm64: "MOVD\t[$]37,", "MUL" +- // loong64: "MOVV\t[$]37,","MULV" ++ // loong64: "ALSLV\t[$]3,", "ALSLV\t[$]2," + return x * 37 + } + func m38(x int64) int64 { + // amd64: "IMUL3Q\t[$]38," + // arm64: "MOVD\t[$]38,", "MUL" +- // loong64: "MOVV\t[$]38,","MULV" ++ // loong64: "ALSLV\t[$]3,", "ALSLV\t[$]2," + return x * 38 + } + func m39(x int64) int64 { + // amd64: "IMUL3Q\t[$]39," + // arm64: "MOVD\t[$]39,", "MUL" +- // loong64: "MOVV\t[$]39,", "MULV" ++ // loong64: "ALSLV\t[$]2,", "SUBVU", "ALSLV\t[$]3," + return x * 39 + } + func m40(x int64) int64 { + // amd64: "LEAQ\t.*[*]4", "SHLQ\t[$]3," + // arm64: "LSL\t[$]3,", "ADD\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]3,","SLLV\t[$]5,","ADDVU" ++ // loong64: "SLLV\t[$]3,", "ALSLV\t[$]2," + return x * 40 + } + +@@ -265,7 +265,7 @@ func mn2(x int64) int64 { + func mn3(x int64) int64 { + // amd64: "NEGQ", "LEAQ\t.*[*]2" + // arm64: "SUB\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]2,","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]1," + return x * -3 + } + func mn4(x int64) int64 { +@@ -277,19 +277,19 @@ func mn4(x int64) int64 { + func mn5(x int64) int64 { + // amd64: "NEGQ", "LEAQ\t.*[*]4" + // arm64: "NEG\tR[0-9]+,", "ADD\tR[0-9]+<<2," +- // loong64: "SUBVU\tR[0-9], R0,","SLLV\t[$]2,","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]2," + return x * -5 + } + func mn6(x int64) int64 { + // amd64: "IMUL3Q\t[$]-6," + // arm64: "ADD\tR[0-9]+,", "SUB\tR[0-9]+<<2," +- // loong64: "ADDVU","SLLV\t[$]3,","SUBVU" ++ // loong64: "ADDVU", "SUBVU", "ALSLV\t[$]3," + return x * -6 + } + func mn7(x int64) int64 { + // amd64: "NEGQ", "LEAQ\t.*[*]8" + // arm64: "SUB\tR[0-9]+<<3," +- // loong64: "SLLV\t[$]3","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]3," + return x * -7 + } + func mn8(x int64) int64 { +@@ -301,43 +301,43 @@ func mn8(x int64) int64 { + func mn9(x int64) int64 { + // amd64: "NEGQ", "LEAQ\t.*[*]8" + // arm64: "NEG\tR[0-9]+,", "ADD\tR[0-9]+<<3," +- // loong64: "SUBVU\tR[0-9], R0,","SLLV\t[$]3","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]3," + return x * -9 + } + func mn10(x int64) int64 { + // amd64: "IMUL3Q\t[$]-10," + // arm64: "MOVD\t[$]-10,", "MUL" +- // loong64: "MOVV\t[$]-10","MULV" ++ // loong64: "ADDVU", "ALSLV\t[$]3", "SUBVU" + return x * -10 + } + func mn11(x int64) int64 { + // amd64: "IMUL3Q\t[$]-11," + // arm64: "MOVD\t[$]-11,", "MUL" +- // loong64: "MOVV\t[$]-11","MULV" ++ // loong64: "ALSLV\t[$]2,", "SUBVU", "ALSLV\t[$]4," + return x * -11 + } + func mn12(x int64) int64 { + // amd64: "IMUL3Q\t[$]-12," + // arm64: "LSL\t[$]2,", "SUB\tR[0-9]+<<2," +- // loong64: "SLLV\t[$]2,","SLLV\t[$]4,","SUBVU" ++ // loong64: "SUBVU", "SLLV\t[$]2,", "ALSLV\t[$]4," + return x * -12 + } + func mn13(x int64) int64 { + // amd64: "IMUL3Q\t[$]-13," + // arm64: "MOVD\t[$]-13,", "MUL" +- // loong64: "MOVV\t[$]-13","MULV" ++ // loong64: "ALSLV\t[$]4,", "SLLV\t[$]2, ", "SUBVU" + return x * -13 + } + func mn14(x int64) int64 { + // amd64: "IMUL3Q\t[$]-14," + // arm64: "ADD\tR[0-9]+,", "SUB\tR[0-9]+<<3," +- // loong64: "ADDVU","SLLV\t[$]4,","SUBVU" ++ // loong64: "ADDVU", "SUBVU", "ALSLV\t[$]4," + return x * -14 + } + func mn15(x int64) int64 { + // amd64: "SHLQ\t[$]4,", "SUBQ" + // arm64: "SUB\tR[0-9]+<<4," +- // loong64: "SLLV\t[$]4,","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]4," + return x * -15 + } + func mn16(x int64) int64 { +@@ -349,24 +349,24 @@ func mn16(x int64) int64 { + func mn17(x int64) int64 { + // amd64: "IMUL3Q\t[$]-17," + // arm64: "NEG\tR[0-9]+,", "ADD\tR[0-9]+<<4," +- // loong64: "SUBVU\tR[0-9], R0,","SLLV\t[$]4,","SUBVU" ++ // loong64: "SUBVU", "ALSLV\t[$]4," + return x * -17 + } + func mn18(x int64) int64 { + // amd64: "IMUL3Q\t[$]-18," + // arm64: "MOVD\t[$]-18,", "MUL" +- // loong64: "MOVV\t[$]-18","MULV" ++ // loong64: "ADDVU", "ALSLV\t[$]4,", "SUBVU" + return x * -18 + } + func mn19(x int64) int64 { + // amd64: "IMUL3Q\t[$]-19," + // arm64: "MOVD\t[$]-19,", "MUL" +- // loong64: "MOVV\t[$]-19","MULV" ++ // loong64: "ALSLV\t[$]1,", "ALSLV\t[$]4,", "SUBVU" + return x * -19 + } + func mn20(x int64) int64 { + // amd64: "IMUL3Q\t[$]-20," + // arm64: "MOVD\t[$]-20,", "MUL" +- // loong64: "MOVV\t[$]-20","MULV" ++ // loong64: "SLLV\t[$]2,", "ALSLV\t[$]4,", "SUBVU" + return x * -20 + } +-- +2.43.7 + diff --git a/0032-cmd-compile-convert-branch-with-zero-to-more-optimal.patch b/0032-cmd-compile-convert-branch-with-zero-to-more-optimal.patch new file mode 100644 index 0000000..ad46025 --- /dev/null +++ b/0032-cmd-compile-convert-branch-with-zero-to-more-optimal.patch @@ -0,0 +1,182 @@ +From 1ba23c4b6f79f52f7f5bedeed7845e845aa9961f Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Wed, 6 Aug 2025 15:50:24 +0800 +Subject: [PATCH 32/61] cmd/compile: convert branch with zero to more optimal + branch zero on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reduces 7500+ instructions from the go toolchain binary on loong64. + + file before after Δ % + asm 555066 554406 -660 -0.1189% + cgo 481480 480764 -716 -0.1487% + compile 2475836 2474776 -1060 -0.0428% + cover 516536 515788 -748 -0.1448% + link 702220 701216 -1004 -0.1430% + preprofile 238626 238122 -504 -0.2112% + vet 792798 791894 -904 -0.1140% + go 1573108 1571676 -1432 -0.0910% + gofmt 320578 320042 -536 -0.1672% + total 7656248 7648684 -7564 -0.0988% + +Change-Id: I51b70a1543bc258b7664caa8647e75eecbaf5eed +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 12 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 116 ++++++++++++++++++ + 2 files changed, 128 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 32f4b43284..389710c2ea 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -964,6 +964,18 @@ + (GEZ (MOVVconst [c]) yes no) && c >= 0 => (First yes no) + (GEZ (MOVVconst [c]) yes no) && c < 0 => (First no yes) + ++// Convert branch with zero to more optimal branch zero. ++(BEQ (MOVVconst [0]) cond yes no) => (EQZ cond yes no) ++(BEQ cond (MOVVconst [0]) yes no) => (EQZ cond yes no) ++(BNE (MOVVconst [0]) cond yes no) => (NEZ cond yes no) ++(BNE cond (MOVVconst [0]) yes no) => (NEZ cond yes no) ++(BLT (MOVVconst [0]) cond yes no) => (GTZ cond yes no) ++(BLT cond (MOVVconst [0]) yes no) => (LTZ cond yes no) ++(BLTU (MOVVconst [0]) cond yes no) => (NEZ cond yes no) ++(BGE (MOVVconst [0]) cond yes no) => (LEZ cond yes no) ++(BGE cond (MOVVconst [0]) yes no) => (GEZ cond yes no) ++(BGEU (MOVVconst [0]) cond yes no) => (EQZ cond yes no) ++ + // Arch-specific inlining for small or disjoint runtime.memmove + // Match post-lowering calls, register version. + (SelectN [0] call:(CALLstatic {sym} dst src (MOVVconst [sz]) mem)) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index d05e8b7063..7257658a93 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -11611,6 +11611,122 @@ func rewriteValueLOONG64_OpZero(v *Value) bool { + func rewriteBlockLOONG64(b *Block) bool { + typ := &b.Func.Config.Types + switch b.Kind { ++ case BlockLOONG64BEQ: ++ // match: (BEQ (MOVVconst [0]) cond yes no) ++ // result: (EQZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64EQZ, cond) ++ return true ++ } ++ // match: (BEQ cond (MOVVconst [0]) yes no) ++ // result: (EQZ cond yes no) ++ for b.Controls[1].Op == OpLOONG64MOVVconst { ++ cond := b.Controls[0] ++ v_1 := b.Controls[1] ++ if auxIntToInt64(v_1.AuxInt) != 0 { ++ break ++ } ++ b.resetWithControl(BlockLOONG64EQZ, cond) ++ return true ++ } ++ case BlockLOONG64BGE: ++ // match: (BGE (MOVVconst [0]) cond yes no) ++ // result: (LEZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64LEZ, cond) ++ return true ++ } ++ // match: (BGE cond (MOVVconst [0]) yes no) ++ // result: (GEZ cond yes no) ++ for b.Controls[1].Op == OpLOONG64MOVVconst { ++ cond := b.Controls[0] ++ v_1 := b.Controls[1] ++ if auxIntToInt64(v_1.AuxInt) != 0 { ++ break ++ } ++ b.resetWithControl(BlockLOONG64GEZ, cond) ++ return true ++ } ++ case BlockLOONG64BGEU: ++ // match: (BGEU (MOVVconst [0]) cond yes no) ++ // result: (EQZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64EQZ, cond) ++ return true ++ } ++ case BlockLOONG64BLT: ++ // match: (BLT (MOVVconst [0]) cond yes no) ++ // result: (GTZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64GTZ, cond) ++ return true ++ } ++ // match: (BLT cond (MOVVconst [0]) yes no) ++ // result: (LTZ cond yes no) ++ for b.Controls[1].Op == OpLOONG64MOVVconst { ++ cond := b.Controls[0] ++ v_1 := b.Controls[1] ++ if auxIntToInt64(v_1.AuxInt) != 0 { ++ break ++ } ++ b.resetWithControl(BlockLOONG64LTZ, cond) ++ return true ++ } ++ case BlockLOONG64BLTU: ++ // match: (BLTU (MOVVconst [0]) cond yes no) ++ // result: (NEZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64NEZ, cond) ++ return true ++ } ++ case BlockLOONG64BNE: ++ // match: (BNE (MOVVconst [0]) cond yes no) ++ // result: (NEZ cond yes no) ++ for b.Controls[0].Op == OpLOONG64MOVVconst { ++ v_0 := b.Controls[0] ++ if auxIntToInt64(v_0.AuxInt) != 0 { ++ break ++ } ++ cond := b.Controls[1] ++ b.resetWithControl(BlockLOONG64NEZ, cond) ++ return true ++ } ++ // match: (BNE cond (MOVVconst [0]) yes no) ++ // result: (NEZ cond yes no) ++ for b.Controls[1].Op == OpLOONG64MOVVconst { ++ cond := b.Controls[0] ++ v_1 := b.Controls[1] ++ if auxIntToInt64(v_1.AuxInt) != 0 { ++ break ++ } ++ b.resetWithControl(BlockLOONG64NEZ, cond) ++ return true ++ } + case BlockLOONG64EQZ: + // match: (EQZ (FPFlagTrue cmp) yes no) + // result: (FPF cmp yes no) +-- +2.43.7 + diff --git a/0033-cmd-compile-internal-optimizing-add-sll-rule-using-A.patch b/0033-cmd-compile-internal-optimizing-add-sll-rule-using-A.patch new file mode 100644 index 0000000..f30eee1 --- /dev/null +++ b/0033-cmd-compile-internal-optimizing-add-sll-rule-using-A.patch @@ -0,0 +1,61 @@ +From c28dc24deffab7534c5b23717795cd5fee9564a2 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Fri, 18 Jul 2025 10:36:06 +0800 +Subject: [PATCH 33/61] cmd/compile/internal: optimizing add+sll rule using + ALSLV instruction on loong64 + +Change-Id: I61e462726835959c60e1b4e5256d4020202418ab +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 2 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 22 +++++++++++++++++++ + 2 files changed, 24 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 389710c2ea..36c1391f42 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -771,6 +771,8 @@ + (MULV (NEGV x) (MOVVconst [c])) => (MULV x (MOVVconst [-c])) + (MULV (NEGV x) (NEGV y)) => (MULV x y) + ++(ADDV x0 x1:(SLLVconst [c] y)) && x1.Uses == 1 && c > 0 && c <= 4 => (ADDshiftLLV x0 y [c]) ++ + // div by constant + (DIVVU x (MOVVconst [1])) => x + (DIVVU x (MOVVconst [c])) && isPowerOfTwo(c) => (SRLVconst [log64(c)] x) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 7257658a93..14445f3f8f 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -1796,6 +1796,28 @@ func rewriteValueLOONG64_OpLOONG64ADDV(v *Value) bool { + } + break + } ++ // match: (ADDV x0 x1:(SLLVconst [c] y)) ++ // cond: x1.Uses == 1 && c > 0 && c <= 4 ++ // result: (ADDshiftLLV x0 y [c]) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ x0 := v_0 ++ x1 := v_1 ++ if x1.Op != OpLOONG64SLLVconst { ++ continue ++ } ++ c := auxIntToInt64(x1.AuxInt) ++ y := x1.Args[0] ++ if !(x1.Uses == 1 && c > 0 && c <= 4) { ++ continue ++ } ++ v.reset(OpLOONG64ADDshiftLLV) ++ v.AuxInt = int64ToAuxInt(c) ++ v.AddArg2(x0, y) ++ return true ++ } ++ break ++ } + // match: (ADDV x (NEGV y)) + // result: (SUBV x y) + for { +-- +2.43.7 + diff --git a/0034-runtime-save-and-restore-all-fcc-registers-in-async-.patch b/0034-runtime-save-and-restore-all-fcc-registers-in-async-.patch new file mode 100644 index 0000000..a84f9fa --- /dev/null +++ b/0034-runtime-save-and-restore-all-fcc-registers-in-async-.patch @@ -0,0 +1,104 @@ +From d1522ab25c30421f27d9f9e234b8417cb1a110c1 Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Mon, 18 Aug 2025 14:58:03 +0800 +Subject: [PATCH 34/61] runtime: save and restore all fcc registers in async + preempt on loong64 + +Currently, all Op implementations on loong64 use fcc0 by default, so only +fcc0 is saved in CL 475577. However, fcc1-fcc7 may also be used by users +when writing assembly code, such as in CL 693878. + +Change-Id: Idb60d8101a0f7d602dfcbbb39bd5da9f2c475bfd +--- + src/runtime/mkpreempt.go | 26 +++++++++++++++++++++++--- + src/runtime/preempt_loong64.s | 34 ++++++++++++++++++++++++++++++++-- + 2 files changed, 55 insertions(+), 5 deletions(-) + +diff --git a/src/runtime/mkpreempt.go b/src/runtime/mkpreempt.go +index 6a9cf77a43..a04bff2664 100644 +--- a/src/runtime/mkpreempt.go ++++ b/src/runtime/mkpreempt.go +@@ -468,10 +468,30 @@ func genLoong64() { + l.add(movf, reg, regsize) + } + +- // save/restore FCC0 ++ // Add condition flag register fcc0-fcc7 ++ sv := "" ++ rs := "" ++ last := 7 ++ for i := 0; i <= last; i++ { ++ msb := 7 + (i * 8) ++ lsb := 0 + (i * 8) ++ ++ // MOVV FCCx, R4, ++ // BSTRINSV $msb, R4, $lsb, R5 ++ sv += fmt.Sprintf("%s FCC%d, R4\n", mov, i) ++ sv += fmt.Sprintf("BSTRINSV $%d, R4, $%d, R5\n", msb, lsb) ++ ++ // BSTRPICKV $msb, R5, $lsb, R4 ++ // MOVV R4, FCCx ++ rs += fmt.Sprintf("BSTRPICKV $%d, R5, $%d, R4\n", msb, lsb) ++ rs += fmt.Sprintf("%s R4, FCC%d", mov, i) ++ if i != last { ++ rs += fmt.Sprintf("\n") ++ } ++ } + l.addSpecial( +- mov+" FCC0, R4\n"+mov+" R4, %d(R3)", +- mov+" %d(R3), R4\n"+mov+" R4, FCC0", ++ sv+mov+" R5, %d(R3)", ++ mov+" %d(R3), R5\n"+rs, + regsize) + + // allocate frame, save PC of interrupted instruction (in LR) +diff --git a/src/runtime/preempt_loong64.s b/src/runtime/preempt_loong64.s +index bb9c948365..626dc4b6f6 100644 +--- a/src/runtime/preempt_loong64.s ++++ b/src/runtime/preempt_loong64.s +@@ -65,10 +65,40 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0 + MOVD F30, 456(R3) + MOVD F31, 464(R3) + MOVV FCC0, R4 +- MOVV R4, 472(R3) ++ BSTRINSV $7, R4, $0, R5 ++ MOVV FCC1, R4 ++ BSTRINSV $15, R4, $8, R5 ++ MOVV FCC2, R4 ++ BSTRINSV $23, R4, $16, R5 ++ MOVV FCC3, R4 ++ BSTRINSV $31, R4, $24, R5 ++ MOVV FCC4, R4 ++ BSTRINSV $39, R4, $32, R5 ++ MOVV FCC5, R4 ++ BSTRINSV $47, R4, $40, R5 ++ MOVV FCC6, R4 ++ BSTRINSV $55, R4, $48, R5 ++ MOVV FCC7, R4 ++ BSTRINSV $63, R4, $56, R5 ++ MOVV R5, 472(R3) + CALL ·asyncPreempt2(SB) +- MOVV 472(R3), R4 ++ MOVV 472(R3), R5 ++ BSTRPICKV $7, R5, $0, R4 + MOVV R4, FCC0 ++ BSTRPICKV $15, R5, $8, R4 ++ MOVV R4, FCC1 ++ BSTRPICKV $23, R5, $16, R4 ++ MOVV R4, FCC2 ++ BSTRPICKV $31, R5, $24, R4 ++ MOVV R4, FCC3 ++ BSTRPICKV $39, R5, $32, R4 ++ MOVV R4, FCC4 ++ BSTRPICKV $47, R5, $40, R4 ++ MOVV R4, FCC5 ++ BSTRPICKV $55, R5, $48, R4 ++ MOVV R4, FCC6 ++ BSTRPICKV $63, R5, $56, R4 ++ MOVV R4, FCC7 + MOVD 464(R3), F31 + MOVD 456(R3), F30 + MOVD 448(R3), F29 +-- +2.43.7 + diff --git a/0035-test-codegen-add-Mul2-and-DivPow2-test-for-loong64.patch b/0035-test-codegen-add-Mul2-and-DivPow2-test-for-loong64.patch new file mode 100644 index 0000000..269f45f --- /dev/null +++ b/0035-test-codegen-add-Mul2-and-DivPow2-test-for-loong64.patch @@ -0,0 +1,54 @@ +From 5472fd35b33c942037aa55b0ea06eee6d5bee0d0 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 21 Aug 2025 11:14:27 +0800 +Subject: [PATCH 35/61] test/codegen: add Mul2 and DivPow2 test for loong64 + +Change-Id: I29ccd105c5418955146a3f4873162963da489a70 +Reviewed-on: https://go-review.googlesource.com/c/go/+/697935 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: abner chenc +Reviewed-by: David Chase +Reviewed-by: Carlos Amedee +--- + test/codegen/floats.go | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/test/codegen/floats.go b/test/codegen/floats.go +index d04202d394..52e28c6f4a 100644 +--- a/test/codegen/floats.go ++++ b/test/codegen/floats.go +@@ -19,6 +19,7 @@ func Mul2(f float64) float64 { + // amd64:"ADDSD",-"MULSD" + // arm/7:"ADDD",-"MULD" + // arm64:"FADDD",-"FMULD" ++ // loong64:"ADDD",-"MULD" + // ppc64x:"FADD",-"FMUL" + // riscv64:"FADDD",-"FMULD" + return f * 2.0 +@@ -29,6 +30,7 @@ func DivPow2(f1, f2, f3 float64) (float64, float64, float64) { + // amd64:"MULSD",-"DIVSD" + // arm/7:"MULD",-"DIVD" + // arm64:"FMULD",-"FDIVD" ++ // loong64:"MULD",-"DIVD" + // ppc64x:"FMUL",-"FDIV" + // riscv64:"FMULD",-"FDIVD" + x := f1 / 16.0 +@@ -37,6 +39,7 @@ func DivPow2(f1, f2, f3 float64) (float64, float64, float64) { + // amd64:"MULSD",-"DIVSD" + // arm/7:"MULD",-"DIVD" + // arm64:"FMULD",-"FDIVD" ++ // loong64:"MULD",-"DIVD" + // ppc64x:"FMUL",-"FDIVD" + // riscv64:"FMULD",-"FDIVD" + y := f2 / 0.125 +@@ -45,6 +48,7 @@ func DivPow2(f1, f2, f3 float64) (float64, float64, float64) { + // amd64:"ADDSD",-"DIVSD",-"MULSD" + // arm/7:"ADDD",-"MULD",-"DIVD" + // arm64:"FADDD",-"FMULD",-"FDIVD" ++ // loong64:"ADDD",-"MULD",-"DIVD" + // ppc64x:"FADD",-"FMUL",-"FDIV" + // riscv64:"FADDD",-"FMULD",-"FDIVD" + z := f3 / 0.5 +-- +2.43.7 + diff --git a/0036-test-codegen-add-Mul-test-for-loong64.patch b/0036-test-codegen-add-Mul-test-for-loong64.patch new file mode 100644 index 0000000..f1778ee --- /dev/null +++ b/0036-test-codegen-add-Mul-test-for-loong64.patch @@ -0,0 +1,62 @@ +From 08fe4c601725bf55bd1d26f761fbd9cc17d363e5 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 21 Aug 2025 10:36:34 +0800 +Subject: [PATCH 36/61] test/codegen: add Mul* test for loong64 + +Change-Id: Ica285212e4884a96fe9738b53cdc789b223bf2e3 +Reviewed-on: https://go-review.googlesource.com/c/go/+/697895 +Reviewed-by: David Chase +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Carlos Amedee +Reviewed-by: abner chenc +--- + test/codegen/mathbits.go | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/test/codegen/mathbits.go b/test/codegen/mathbits.go +index c7ba357d09..ba5387d2c3 100644 +--- a/test/codegen/mathbits.go ++++ b/test/codegen/mathbits.go +@@ -938,6 +938,7 @@ func Sub64MPanicOnOverflowGT(a, b [2]uint64) [2]uint64 { + func Mul(x, y uint) (hi, lo uint) { + // amd64:"MULQ" + // arm64:"UMULH","MUL" ++ // loong64:"MULV","MULHVU" + // ppc64x:"MULHDU","MULLD" + // s390x:"MLGR" + // mips64: "MULVU" +@@ -948,6 +949,7 @@ func Mul(x, y uint) (hi, lo uint) { + func Mul64(x, y uint64) (hi, lo uint64) { + // amd64:"MULQ" + // arm64:"UMULH","MUL" ++ // loong64:"MULV","MULHVU" + // ppc64x:"MULHDU","MULLD" + // s390x:"MLGR" + // mips64: "MULVU" +@@ -957,6 +959,7 @@ func Mul64(x, y uint64) (hi, lo uint64) { + + func Mul64HiOnly(x, y uint64) uint64 { + // arm64:"UMULH",-"MUL" ++ // loong64:"MULHVU",-"MULV" + // riscv64:"MULHU",-"MUL\t" + hi, _ := bits.Mul64(x, y) + return hi +@@ -964,6 +967,7 @@ func Mul64HiOnly(x, y uint64) uint64 { + + func Mul64LoOnly(x, y uint64) uint64 { + // arm64:"MUL",-"UMULH" ++ // loong64:"MULV",-"MULHVU" + // riscv64:"MUL\t",-"MULHU" + _, lo := bits.Mul64(x, y) + return lo +@@ -972,6 +976,7 @@ func Mul64LoOnly(x, y uint64) uint64 { + func Mul64Const() (uint64, uint64) { + // 7133701809754865664 == 99<<56 + // arm64:"MOVD\t[$]7133701809754865664, R1", "MOVD\t[$]88, R0" ++ // loong64:"MOVV\t[$]88, R4","MOVV\t[$]7133701809754865664, R5",-"MUL" + return bits.Mul64(99+88<<8, 1<<56) + } + +-- +2.43.7 + diff --git a/0037-test-codegen-add-sqrt-abs-and-copysign-test-for-loon.patch b/0037-test-codegen-add-sqrt-abs-and-copysign-test-for-loon.patch new file mode 100644 index 0000000..524e327 --- /dev/null +++ b/0037-test-codegen-add-sqrt-abs-and-copysign-test-for-loon.patch @@ -0,0 +1,71 @@ +From 106f7fbd727e625a1770a27535432abdaf66beb9 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 21 Aug 2025 11:36:54 +0800 +Subject: [PATCH 37/61] test/codegen: add sqrt* abs and copysign test for + loong64 + +Change-Id: I645396fc4b00242f36a06f01550906805c0c1f73 +Reviewed-on: https://go-review.googlesource.com/c/go/+/697955 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: David Chase +Reviewed-by: abner chenc +Reviewed-by: Carlos Amedee +--- + test/codegen/math.go | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/test/codegen/math.go b/test/codegen/math.go +index 87d9cd7b27..c37a327167 100644 +--- a/test/codegen/math.go ++++ b/test/codegen/math.go +@@ -53,6 +53,7 @@ func sqrt(x float64) float64 { + // 386/sse2:"SQRTSD" 386/softfloat:-"SQRTD" + // arm64:"FSQRTD" + // arm/7:"SQRTD" ++ // loong64:"SQRTD" + // mips/hardfloat:"SQRTD" mips/softfloat:-"SQRTD" + // mips64/hardfloat:"SQRTD" mips64/softfloat:-"SQRTD" + // wasm:"F64Sqrt" +@@ -66,6 +67,7 @@ func sqrt32(x float32) float32 { + // 386/sse2:"SQRTSS" 386/softfloat:-"SQRTS" + // arm64:"FSQRTS" + // arm/7:"SQRTF" ++ // loong64:"SQRTF" + // mips/hardfloat:"SQRTF" mips/softfloat:-"SQRTF" + // mips64/hardfloat:"SQRTF" mips64/softfloat:-"SQRTF" + // wasm:"F32Sqrt" +@@ -78,6 +80,7 @@ func sqrt32(x float32) float32 { + func abs(x, y float64) { + // amd64:"BTRQ\t[$]63" + // arm64:"FABSD\t" ++ // loong64:"ABSD\t" + // s390x:"LPDFR\t",-"MOVD\t" (no integer load/store) + // ppc64x:"FABS\t" + // riscv64:"FABSD\t" +@@ -102,6 +105,7 @@ func abs32(x float32) float32 { + // Check that it's using integer registers + func copysign(a, b, c float64) { + // amd64:"BTRQ\t[$]63","ANDQ","ORQ" ++ // loong64:"FCOPYSGD" + // s390x:"CPSDR",-"MOVD" (no integer load/store) + // ppc64x:"FCPSGN" + // riscv64:"FSGNJD" +@@ -109,6 +113,7 @@ func copysign(a, b, c float64) { + sink64[0] = math.Copysign(a, b) + + // amd64:"BTSQ\t[$]63" ++ // loong64:"FCOPYSGD" + // s390x:"LNDFR\t",-"MOVD\t" (no integer load/store) + // ppc64x:"FCPSGN" + // riscv64:"FSGNJD" +@@ -121,6 +126,7 @@ func copysign(a, b, c float64) { + sink64[2] = math.Float64frombits(math.Float64bits(a) | 1<<63) + + // amd64:"ANDQ","ORQ" ++ // loong64:"FCOPYSGD" + // s390x:"CPSDR\t",-"MOVD\t" (no integer load/store) + // ppc64x:"FCPSGN" + // riscv64:"FSGNJD" +-- +2.43.7 + diff --git a/0038-cmd-compile-optimize-some-patterns-into-revb2h-revb4.patch b/0038-cmd-compile-optimize-some-patterns-into-revb2h-revb4.patch new file mode 100644 index 0000000..2000787 --- /dev/null +++ b/0038-cmd-compile-optimize-some-patterns-into-revb2h-revb4.patch @@ -0,0 +1,611 @@ +From e9c29e7bb41eb1b4579cab5d43289ba6bce4dcc9 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Fri, 15 Aug 2025 16:19:01 +0800 +Subject: [PATCH 38/61] cmd/compile: optimize some patterns into revb2h/revb4h + instruction on loong64 + +Pattern1: (the type of c is uint16) + c>>8 | c<<8 +To: + revb2h c + +Pattern2: (the type of c is uint32) + (c & 0xff00ff00)>>8 | (c & 0x00ff00ff)<<8 +To: + revb2h c + +Pattern3: (the type of c is uint64) + (c & 0xff00ff00ff00ff00)>>8 | (c & 0x00ff00ff00ff00ff)<<8 +To: + revb4h c + +Change-Id: Ic6231a3f476cbacbea4bd00e31193d107cb86cda +Reviewed-on: https://go-review.googlesource.com/c/go/+/696335 +Reviewed-by: Meidan Li +Reviewed-by: Keith Randall +Auto-Submit: Keith Randall +Reviewed-by: Carlos Amedee +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +--- + src/cmd/compile/internal/loong64/ssa.go | 1 + + .../compile/internal/ssa/_gen/LOONG64.rules | 21 + + .../compile/internal/ssa/_gen/LOONG64Ops.go | 1 + + src/cmd/compile/internal/ssa/opGen.go | 14 + + .../compile/internal/ssa/rewriteLOONG64.go | 426 ++++++++++++++++++ + test/codegen/bitfield.go | 6 + + 6 files changed, 469 insertions(+) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 9bd653f23f..50924d54a0 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -550,6 +550,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + ssa.OpLOONG64SQRTF, + ssa.OpLOONG64REVB2H, + ssa.OpLOONG64REVB2W, ++ ssa.OpLOONG64REVB4H, + ssa.OpLOONG64REVBV, + ssa.OpLOONG64BITREV4B, + ssa.OpLOONG64BITREVW, +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 36c1391f42..9a74414bec 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -136,6 +136,27 @@ + (Rsh8x16 x y) && !shiftIsBounded(v) => (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) + (Rsh8x8 x y) && !shiftIsBounded(v) => (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) + ++ ++// revb2h ++// ((x>>8) | (x<<8)) => (REVB2H x), the type of x is uint16 ++((OR|XOR|ADDV) (SRLVconst [8] x) (SLLVconst [8] x)) => (REVB2H x) ++ ++// ((x & 0xff00ff00)>>8) | ((x & 0x00ff00ff)<<8), the type of x is uint32 ++((OR|XOR|ADDV) (SRLconst [8] (ANDconst [c1] x)) (SLLconst [8] (ANDconst [c2] x))) ++ && uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff ++ => (REVB2H x) ++ ++// revb4h ++// ((x & 0xff00ff00ff00ff00)>>8) | ((x & 0x00ff00ff00ff00ff)<<8), the type of x is uint64 ++((OR|XOR|ADDV) (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (AND (MOVVconst [c2]) x))) ++ && uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff ++ => (REVB4H x) ++ ++// ((x & 0xff00ff00)>>8) | ((x & 0x00ff00ff)<<8), the type of x is uint64 ++((OR|XOR|ADDV) (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (ANDconst [c2] x))) ++ && uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff ++ => (REVB4H (ANDconst [0xffffffff] x)) ++ + // bitfield ops + + // bstrpickv +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index 73b6993a66..62c45edb69 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -180,6 +180,7 @@ func init() { + + {name: "REVB2H", argLength: 1, reg: gp11, asm: "REVB2H"}, // Swap bytes: 0x11223344 -> 0x22114433 (sign extends to 64 bits) + {name: "REVB2W", argLength: 1, reg: gp11, asm: "REVB2W"}, // Swap bytes: 0x1122334455667788 -> 0x4433221188776655 ++ {name: "REVB4H", argLength: 1, reg: gp11, asm: "REVB4H"}, // Swap bytes: 0x1122334455667788 -> 0x2211443366558877 + {name: "REVBV", argLength: 1, reg: gp11, asm: "REVBV"}, // Swap bytes: 0x1122334455667788 -> 0x8877665544332211 + + {name: "BITREV4B", argLength: 1, reg: gp11, asm: "BITREV4B"}, // Reverse the bits of each byte inside a 32-bit arg[0] +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index cc86822529..60c23a4786 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -1776,6 +1776,7 @@ const ( + OpLOONG64CTZV + OpLOONG64REVB2H + OpLOONG64REVB2W ++ OpLOONG64REVB4H + OpLOONG64REVBV + OpLOONG64BITREV4B + OpLOONG64BITREVW +@@ -23899,6 +23900,19 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, ++ { ++ name: "REVB4H", ++ argLen: 1, ++ asm: loong64.AREVB4H, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, + { + name: "REVBV", + argLen: 1, +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 14445f3f8f..20d71cb580 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -1775,6 +1775,148 @@ func rewriteValueLOONG64_OpLOONG64ADDF(v *Value) bool { + func rewriteValueLOONG64_OpLOONG64ADDV(v *Value) bool { + v_1 := v.Args[1] + v_0 := v.Args[0] ++ b := v.Block ++ typ := &b.Func.Config.Types ++ // match: (ADDV (SRLVconst [8] x) (SLLVconst [8] x)) ++ // result: (REVB2H x) ++ for { ++ if v.Type != typ.UInt16 { ++ break ++ } ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || v_0.Type != typ.UInt16 || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ x := v_0.Args[0] ++ if v_1.Op != OpLOONG64SLLVconst || v_1.Type != typ.UInt16 || auxIntToInt64(v_1.AuxInt) != 8 || x != v_1.Args[0] { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (ADDV (SRLconst [8] (ANDconst [c1] x)) (SLLconst [8] (ANDconst [c2] x))) ++ // cond: uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff ++ // result: (REVB2H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0.AuxInt) ++ x := v_0_0.Args[0] ++ if v_1.Op != OpLOONG64SLLconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (ADDV (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (AND (MOVVconst [c2]) x))) ++ // cond: uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff ++ // result: (REVB4H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_1_0.Args[1] ++ v_1_0_0 := v_1_0.Args[0] ++ v_1_0_1 := v_1_0.Args[1] ++ for _i2 := 0; _i2 <= 1; _i2, v_1_0_0, v_1_0_1 = _i2+1, v_1_0_1, v_1_0_0 { ++ if v_1_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0_0.AuxInt) ++ if x != v_1_0_1 || !(uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v.AddArg(x) ++ return true ++ } ++ } ++ } ++ break ++ } ++ // match: (ADDV (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (ANDconst [c2] x))) ++ // cond: uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff ++ // result: (REVB4H (ANDconst [0xffffffff] x)) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v0 := b.NewValue0(v.Pos, OpLOONG64ANDconst, x.Type) ++ v0.AuxInt = int64ToAuxInt(0xffffffff) ++ v0.AddArg(x) ++ v.AddArg(v0) ++ return true ++ } ++ } ++ break ++ } + // match: (ADDV x (MOVVconst [c])) + // cond: is32Bit(c) && !t.IsPtr() + // result: (ADDVconst [c] x) +@@ -5872,6 +6014,148 @@ func rewriteValueLOONG64_OpLOONG64NORconst(v *Value) bool { + func rewriteValueLOONG64_OpLOONG64OR(v *Value) bool { + v_1 := v.Args[1] + v_0 := v.Args[0] ++ b := v.Block ++ typ := &b.Func.Config.Types ++ // match: (OR (SRLVconst [8] x) (SLLVconst [8] x)) ++ // result: (REVB2H x) ++ for { ++ if v.Type != typ.UInt16 { ++ break ++ } ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || v_0.Type != typ.UInt16 || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ x := v_0.Args[0] ++ if v_1.Op != OpLOONG64SLLVconst || v_1.Type != typ.UInt16 || auxIntToInt64(v_1.AuxInt) != 8 || x != v_1.Args[0] { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (OR (SRLconst [8] (ANDconst [c1] x)) (SLLconst [8] (ANDconst [c2] x))) ++ // cond: uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff ++ // result: (REVB2H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0.AuxInt) ++ x := v_0_0.Args[0] ++ if v_1.Op != OpLOONG64SLLconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (OR (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (AND (MOVVconst [c2]) x))) ++ // cond: uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff ++ // result: (REVB4H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_1_0.Args[1] ++ v_1_0_0 := v_1_0.Args[0] ++ v_1_0_1 := v_1_0.Args[1] ++ for _i2 := 0; _i2 <= 1; _i2, v_1_0_0, v_1_0_1 = _i2+1, v_1_0_1, v_1_0_0 { ++ if v_1_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0_0.AuxInt) ++ if x != v_1_0_1 || !(uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v.AddArg(x) ++ return true ++ } ++ } ++ } ++ break ++ } ++ // match: (OR (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (ANDconst [c2] x))) ++ // cond: uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff ++ // result: (REVB4H (ANDconst [0xffffffff] x)) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v0 := b.NewValue0(v.Pos, OpLOONG64ANDconst, x.Type) ++ v0.AuxInt = int64ToAuxInt(0xffffffff) ++ v0.AddArg(x) ++ v.AddArg(v0) ++ return true ++ } ++ } ++ break ++ } + // match: (OR x (MOVVconst [c])) + // cond: is32Bit(c) + // result: (ORconst [c] x) +@@ -7307,6 +7591,148 @@ func rewriteValueLOONG64_OpLOONG64SUBVconst(v *Value) bool { + func rewriteValueLOONG64_OpLOONG64XOR(v *Value) bool { + v_1 := v.Args[1] + v_0 := v.Args[0] ++ b := v.Block ++ typ := &b.Func.Config.Types ++ // match: (XOR (SRLVconst [8] x) (SLLVconst [8] x)) ++ // result: (REVB2H x) ++ for { ++ if v.Type != typ.UInt16 { ++ break ++ } ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || v_0.Type != typ.UInt16 || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ x := v_0.Args[0] ++ if v_1.Op != OpLOONG64SLLVconst || v_1.Type != typ.UInt16 || auxIntToInt64(v_1.AuxInt) != 8 || x != v_1.Args[0] { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (XOR (SRLconst [8] (ANDconst [c1] x)) (SLLconst [8] (ANDconst [c2] x))) ++ // cond: uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff ++ // result: (REVB2H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0.AuxInt) ++ x := v_0_0.Args[0] ++ if v_1.Op != OpLOONG64SLLconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB2H) ++ v.AddArg(x) ++ return true ++ } ++ break ++ } ++ // match: (XOR (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (AND (MOVVconst [c2]) x))) ++ // cond: uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff ++ // result: (REVB4H x) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_1_0.Args[1] ++ v_1_0_0 := v_1_0.Args[0] ++ v_1_0_1 := v_1_0.Args[1] ++ for _i2 := 0; _i2 <= 1; _i2, v_1_0_0, v_1_0_1 = _i2+1, v_1_0_1, v_1_0_0 { ++ if v_1_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0_0.AuxInt) ++ if x != v_1_0_1 || !(uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v.AddArg(x) ++ return true ++ } ++ } ++ } ++ break ++ } ++ // match: (XOR (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (ANDconst [c2] x))) ++ // cond: uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff ++ // result: (REVB4H (ANDconst [0xffffffff] x)) ++ for { ++ for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { ++ if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 { ++ continue ++ } ++ v_0_0 := v_0.Args[0] ++ if v_0_0.Op != OpLOONG64AND { ++ continue ++ } ++ _ = v_0_0.Args[1] ++ v_0_0_0 := v_0_0.Args[0] ++ v_0_0_1 := v_0_0.Args[1] ++ for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 { ++ if v_0_0_0.Op != OpLOONG64MOVVconst { ++ continue ++ } ++ c1 := auxIntToInt64(v_0_0_0.AuxInt) ++ x := v_0_0_1 ++ if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 { ++ continue ++ } ++ v_1_0 := v_1.Args[0] ++ if v_1_0.Op != OpLOONG64ANDconst { ++ continue ++ } ++ c2 := auxIntToInt64(v_1_0.AuxInt) ++ if x != v_1_0.Args[0] || !(uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff) { ++ continue ++ } ++ v.reset(OpLOONG64REVB4H) ++ v0 := b.NewValue0(v.Pos, OpLOONG64ANDconst, x.Type) ++ v0.AuxInt = int64ToAuxInt(0xffffffff) ++ v0.AddArg(x) ++ v.AddArg(v0) ++ return true ++ } ++ } ++ break ++ } + // match: (XOR x (MOVVconst [c])) + // cond: is32Bit(c) + // result: (XORconst [c] x) +diff --git a/test/codegen/bitfield.go b/test/codegen/bitfield.go +index 44cf09f86f..6374d70650 100644 +--- a/test/codegen/bitfield.go ++++ b/test/codegen/bitfield.go +@@ -338,20 +338,26 @@ func shift_no_cmp(x int) int { + + func rev16(c uint64) (uint64, uint64, uint64) { + // arm64:`REV16`,-`AND`,-`LSR`,-`AND`,-`ORR\tR[0-9]+<<8` ++ // loong64:`REVB4H`,-`MOVV`,-`AND`,-`SRLV`,-`AND`,-`SLLV`,-`OR` + b1 := ((c & 0xff00ff00ff00ff00) >> 8) | ((c & 0x00ff00ff00ff00ff) << 8) + // arm64:-`ADD\tR[0-9]+<<8` ++ // loong64:-`ADDV` + b2 := ((c & 0xff00ff00ff00ff00) >> 8) + ((c & 0x00ff00ff00ff00ff) << 8) + // arm64:-`EOR\tR[0-9]+<<8` ++ // loong64:-`XOR` + b3 := ((c & 0xff00ff00ff00ff00) >> 8) ^ ((c & 0x00ff00ff00ff00ff) << 8) + return b1, b2, b3 + } + + func rev16w(c uint32) (uint32, uint32, uint32) { + // arm64:`REV16W`,-`AND`,-`UBFX`,-`AND`,-`ORR\tR[0-9]+<<8` ++ // loong64:`REVB2H`,-`AND`,-`SRL`,-`AND`,-`SLL`,-`OR` + b1 := ((c & 0xff00ff00) >> 8) | ((c & 0x00ff00ff) << 8) + // arm64:-`ADD\tR[0-9]+<<8` ++ // loong64:-`ADDV` + b2 := ((c & 0xff00ff00) >> 8) + ((c & 0x00ff00ff) << 8) + // arm64:-`EOR\tR[0-9]+<<8` ++ // loong64:-`XOR` + b3 := ((c & 0xff00ff00) >> 8) ^ ((c & 0x00ff00ff) << 8) + return b1, b2, b3 + } +-- +2.43.7 + diff --git a/0039-cmd-compile-optimize-rule-x-x-c-to-x-c-1-on-loong64.patch b/0039-cmd-compile-optimize-rule-x-x-c-to-x-c-1-on-loong64.patch new file mode 100644 index 0000000..f446b60 --- /dev/null +++ b/0039-cmd-compile-optimize-rule-x-x-c-to-x-c-1-on-loong64.patch @@ -0,0 +1,129 @@ +From f48e4a4a3a1491d0a5bcd5e6ea4932ecbd148020 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 21 Aug 2025 16:52:02 +0800 +Subject: [PATCH 39/61] cmd/compile: optimize rule (x + x) << c to x << c+1 on + loong64 + +Change-Id: I782f93510bba92ba60b298c1c1cde456c8bcec38 +Reviewed-on: https://go-review.googlesource.com/c/go/+/697956 +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Keith Randall +Auto-Submit: Keith Randall +Reviewed-by: Carlos Amedee +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 3 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 38 +++++++++++++++++++ + test/codegen/shift.go | 4 ++ + 3 files changed, 45 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 9a74414bec..502b89f5f6 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -783,6 +783,9 @@ + (SRLVconst [rc] (MOVHUreg x)) && rc >= 16 => (MOVVconst [0]) + (SRLVconst [rc] (MOVBUreg x)) && rc >= 8 => (MOVVconst [0]) + ++// (x + x) << c -> x << c+1 ++((SLLV|SLL)const [c] (ADDV x x)) => ((SLLV|SLL)const [c+1] x) ++ + // mul by constant + (MULV _ (MOVVconst [0])) => (MOVVconst [0]) + (MULV x (MOVVconst [1])) => x +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 20d71cb580..a4777fd160 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -462,6 +462,8 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64SLLV(v) + case OpLOONG64SLLVconst: + return rewriteValueLOONG64_OpLOONG64SLLVconst(v) ++ case OpLOONG64SLLconst: ++ return rewriteValueLOONG64_OpLOONG64SLLconst(v) + case OpLOONG64SRA: + return rewriteValueLOONG64_OpLOONG64SRA(v) + case OpLOONG64SRAV: +@@ -6841,6 +6843,22 @@ func rewriteValueLOONG64_OpLOONG64SLLV(v *Value) bool { + } + func rewriteValueLOONG64_OpLOONG64SLLVconst(v *Value) bool { + v_0 := v.Args[0] ++ // match: (SLLVconst [c] (ADDV x x)) ++ // result: (SLLVconst [c+1] x) ++ for { ++ c := auxIntToInt64(v.AuxInt) ++ if v_0.Op != OpLOONG64ADDV { ++ break ++ } ++ x := v_0.Args[1] ++ if x != v_0.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64SLLVconst) ++ v.AuxInt = int64ToAuxInt(c + 1) ++ v.AddArg(x) ++ return true ++ } + // match: (SLLVconst [c] (MOVVconst [d])) + // result: (MOVVconst [d< +Date: Tue, 19 Aug 2025 19:16:31 +0800 +Subject: [PATCH 40/61] cmd/compile: use zero register instead of specialized + *zero instructions on loong64 + +Refer to CL 633075, loong64 has a zero(R0) register that can be used to do this. + +Change-Id: I846c6bdfcfd6dbfa18338afc13e34e350580ead5 +Reviewed-on: https://go-review.googlesource.com/c/go/+/693876 +Reviewed-by: Carlos Amedee +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +Auto-Submit: Keith Randall +--- + src/cmd/compile/internal/loong64/ssa.go | 23 +- + .../compile/internal/ssa/_gen/LOONG64.rules | 31 - + .../compile/internal/ssa/_gen/LOONG64Ops.go | 34 +- + .../internal/ssa/_gen/LOONG64latelower.rules | 4 +- + src/cmd/compile/internal/ssa/opGen.go | 186 ++---- + src/cmd/compile/internal/ssa/regalloc.go | 2 +- + .../compile/internal/ssa/rewriteLOONG64.go | 576 ------------------ + .../internal/ssa/rewriteLOONG64latelower.go | 46 +- + test/codegen/bitfield.go | 2 +- + test/codegen/multiply.go | 2 +- + test/codegen/shift.go | 6 +- + 11 files changed, 73 insertions(+), 839 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 50924d54a0..4cdb669973 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -124,6 +124,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + p.To.Type = obj.TYPE_REG + p.To.Reg = y + case ssa.OpLOONG64MOVVnop, ++ ssa.OpLOONG64ZERO, + ssa.OpLOONG64LoweredRound32F, + ssa.OpLOONG64LoweredRound64F: + // nothing to do +@@ -439,18 +440,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + p.To.Reg = v.Args[0].Reg() + p.To.Index = v.Args[1].Reg() + +- case ssa.OpLOONG64MOVBstorezeroidx, +- ssa.OpLOONG64MOVHstorezeroidx, +- ssa.OpLOONG64MOVWstorezeroidx, +- ssa.OpLOONG64MOVVstorezeroidx: +- p := s.Prog(v.Op.Asm()) +- p.From.Type = obj.TYPE_REG +- p.From.Reg = loong64.REGZERO +- p.To.Type = obj.TYPE_MEM +- p.To.Name = obj.NAME_NONE +- p.To.Reg = v.Args[0].Reg() +- p.To.Index = v.Args[1].Reg() +- + case ssa.OpLOONG64MOVBload, + ssa.OpLOONG64MOVBUload, + ssa.OpLOONG64MOVHload, +@@ -478,16 +467,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + p.To.Type = obj.TYPE_MEM + p.To.Reg = v.Args[0].Reg() + ssagen.AddAux(&p.To, v) +- case ssa.OpLOONG64MOVBstorezero, +- ssa.OpLOONG64MOVHstorezero, +- ssa.OpLOONG64MOVWstorezero, +- ssa.OpLOONG64MOVVstorezero: +- p := s.Prog(v.Op.Asm()) +- p.From.Type = obj.TYPE_REG +- p.From.Reg = loong64.REGZERO +- p.To.Type = obj.TYPE_MEM +- p.To.Reg = v.Args[0].Reg() +- ssagen.AddAux(&p.To, v) + case ssa.OpLOONG64MOVBreg, + ssa.OpLOONG64MOVBUreg, + ssa.OpLOONG64MOVHreg, +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 502b89f5f6..c602e9d03e 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -574,10 +574,6 @@ + && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V|F|D)store [off1+int32(off2)] {sym} ptr val mem) + +-(MOV(B|H|W|V)storezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) +- && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => +- (MOV(B|H|W|V)storezero [off1+int32(off2)] {sym} ptr mem) +- + (MOV(B|BU|H|HU|W|WU|V|F|D)load [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) + && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|BU|H|HU|W|WU|V|F|D)load [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +@@ -586,10 +582,6 @@ + && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V|F|D)store [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) + +-(MOV(B|H|W|V)storezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) +- && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => +- (MOV(B|H|W|V)storezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +- + // don't extend after proper load + (MOVBreg x:(MOVBload _ _)) => (MOVVreg x) + (MOVBUreg x:(MOVBUload _ _)) => (MOVVreg x) +@@ -652,11 +644,6 @@ + (MOVWstore [off] {sym} ptr (MOVWreg x) mem) => (MOVWstore [off] {sym} ptr x mem) + (MOVWstore [off] {sym} ptr (MOVWUreg x) mem) => (MOVWstore [off] {sym} ptr x mem) + +-(MOVBstore [off] {sym} ptr (MOVVconst [0]) mem) => (MOVBstorezero [off] {sym} ptr mem) +-(MOVHstore [off] {sym} ptr (MOVVconst [0]) mem) => (MOVHstorezero [off] {sym} ptr mem) +-(MOVWstore [off] {sym} ptr (MOVVconst [0]) mem) => (MOVWstorezero [off] {sym} ptr mem) +-(MOVVstore [off] {sym} ptr (MOVVconst [0]) mem) => (MOVVstorezero [off] {sym} ptr mem) +- + // register indexed load + (MOVVload [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVVloadidx ptr idx mem) + (MOVWUload [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVWUloadidx ptr idx mem) +@@ -706,24 +693,6 @@ + (MOVDstoreidx ptr (MOVVconst [c]) val mem) && is32Bit(c) => (MOVDstore [int32(c)] ptr val mem) + (MOVDstoreidx (MOVVconst [c]) idx val mem) && is32Bit(c) => (MOVDstore [int32(c)] idx val mem) + +-// register indexed store zero +-(MOVVstorezero [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVVstorezeroidx ptr idx mem) +-(MOVWstorezero [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVWstorezeroidx ptr idx mem) +-(MOVHstorezero [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVHstorezeroidx ptr idx mem) +-(MOVBstorezero [off] {sym} (ADDV ptr idx) mem) && off == 0 && sym == nil => (MOVBstorezeroidx ptr idx mem) +-(MOVVstoreidx ptr idx (MOVVconst [0]) mem) => (MOVVstorezeroidx ptr idx mem) +-(MOVWstoreidx ptr idx (MOVVconst [0]) mem) => (MOVWstorezeroidx ptr idx mem) +-(MOVHstoreidx ptr idx (MOVVconst [0]) mem) => (MOVHstorezeroidx ptr idx mem) +-(MOVBstoreidx ptr idx (MOVVconst [0]) mem) => (MOVBstorezeroidx ptr idx mem) +-(MOVVstorezeroidx ptr (MOVVconst [c]) mem) && is32Bit(c) => (MOVVstorezero [int32(c)] ptr mem) +-(MOVVstorezeroidx (MOVVconst [c]) idx mem) && is32Bit(c) => (MOVVstorezero [int32(c)] idx mem) +-(MOVWstorezeroidx ptr (MOVVconst [c]) mem) && is32Bit(c) => (MOVWstorezero [int32(c)] ptr mem) +-(MOVWstorezeroidx (MOVVconst [c]) idx mem) && is32Bit(c) => (MOVWstorezero [int32(c)] idx mem) +-(MOVHstorezeroidx ptr (MOVVconst [c]) mem) && is32Bit(c) => (MOVHstorezero [int32(c)] ptr mem) +-(MOVHstorezeroidx (MOVVconst [c]) idx mem) && is32Bit(c) => (MOVHstorezero [int32(c)] idx mem) +-(MOVBstorezeroidx ptr (MOVVconst [c]) mem) && is32Bit(c) => (MOVBstorezero [int32(c)] ptr mem) +-(MOVBstorezeroidx (MOVVconst [c]) idx mem) && is32Bit(c) => (MOVBstorezero [int32(c)] idx mem) +- + // if a register move has only 1 use, just use the same register without emitting instruction + // MOVVnop doesn't emit instruction, only for ensuring the type. + (MOVVreg x) && x.Uses == 1 => (MOVVnop x) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index 62c45edb69..c063a82f5d 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -29,7 +29,7 @@ import "strings" + // so that regmask stays within int64 + // Be careful when hand coding regmasks. + var regNamesLOONG64 = []string{ +- "R0", // constant 0 ++ "ZERO", // constant 0 + "R1", + "SP", // aka R3 + "R4", +@@ -134,18 +134,18 @@ func init() { + r2 = buildReg("R21") + r3 = buildReg("R23") + r4 = buildReg("R24") ++ rz = buildReg("ZERO") + ) + // Common regInfo + var ( + gp01 = regInfo{inputs: nil, outputs: []regMask{gp}} + gp11 = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}} + gp11sp = regInfo{inputs: []regMask{gpspg}, outputs: []regMask{gp}} +- gp21 = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp}} ++ gp21 = regInfo{inputs: []regMask{gpg, gpg | rz}, outputs: []regMask{gp}} + gpload = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}} + gp2load = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} + gpstore = regInfo{inputs: []regMask{gpspsbg, gpg}} +- gpstore0 = regInfo{inputs: []regMask{gpspsbg}} +- gpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}} ++ gpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, gpg | rz}} + gpxchg = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} + gpcas = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}, outputs: []regMask{gp}} + preldreg = regInfo{inputs: []regMask{gpspg}} +@@ -310,12 +310,12 @@ func init() { + {name: "MOVFloadidx", argLength: 3, reg: fp2load, asm: "MOVF", typ: "Float32"}, // load 32-bit float from arg0 + arg1, arg2=mem. + {name: "MOVDloadidx", argLength: 3, reg: fp2load, asm: "MOVD", typ: "Float64"}, // load 64-bit float from arg0 + arg1, arg2=mem. + +- {name: "MOVBstore", argLength: 3, reg: gpstore, aux: "SymOff", asm: "MOVB", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 1 byte of arg1 to arg0 + auxInt + aux. arg2=mem. +- {name: "MOVHstore", argLength: 3, reg: gpstore, aux: "SymOff", asm: "MOVH", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. +- {name: "MOVWstore", argLength: 3, reg: gpstore, aux: "SymOff", asm: "MOVW", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. +- {name: "MOVVstore", argLength: 3, reg: gpstore, aux: "SymOff", asm: "MOVV", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. +- {name: "MOVFstore", argLength: 3, reg: fpstore, aux: "SymOff", asm: "MOVF", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. +- {name: "MOVDstore", argLength: 3, reg: fpstore, aux: "SymOff", asm: "MOVD", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVBstore", argLength: 3, reg: regInfo{inputs: []regMask{gpspsbg, gpg | rz}}, aux: "SymOff", asm: "MOVB", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 1 byte of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVHstore", argLength: 3, reg: regInfo{inputs: []regMask{gpspsbg, gpg | rz}}, aux: "SymOff", asm: "MOVH", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVWstore", argLength: 3, reg: regInfo{inputs: []regMask{gpspsbg, gpg | rz}}, aux: "SymOff", asm: "MOVW", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVVstore", argLength: 3, reg: regInfo{inputs: []regMask{gpspsbg, gpg | rz}}, aux: "SymOff", asm: "MOVV", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVFstore", argLength: 3, reg: fpstore, aux: "SymOff", asm: "MOVF", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. ++ {name: "MOVDstore", argLength: 3, reg: fpstore, aux: "SymOff", asm: "MOVD", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of arg1 to arg0 + auxInt + aux. arg2=mem. + + // register indexed store + {name: "MOVBstoreidx", argLength: 4, reg: gpstore2, asm: "MOVB", typ: "Mem"}, // store 1 byte of arg2 to arg0 + arg1, arg3 = mem. +@@ -325,17 +325,6 @@ func init() { + {name: "MOVFstoreidx", argLength: 4, reg: fpstore2, asm: "MOVF", typ: "Mem"}, // store 32-bit float of arg2 to arg0 + arg1, arg3=mem. + {name: "MOVDstoreidx", argLength: 4, reg: fpstore2, asm: "MOVD", typ: "Mem"}, // store 64-bit float of arg2 to arg0 + arg1, arg3=mem. + +- {name: "MOVBstorezero", argLength: 2, reg: gpstore0, aux: "SymOff", asm: "MOVB", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 1 byte of zero to arg0 + auxInt + aux. arg1=mem. +- {name: "MOVHstorezero", argLength: 2, reg: gpstore0, aux: "SymOff", asm: "MOVH", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes of zero to arg0 + auxInt + aux. arg1=mem. +- {name: "MOVWstorezero", argLength: 2, reg: gpstore0, aux: "SymOff", asm: "MOVW", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes of zero to arg0 + auxInt + aux. arg1=mem. +- {name: "MOVVstorezero", argLength: 2, reg: gpstore0, aux: "SymOff", asm: "MOVV", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of zero to arg0 + auxInt + aux. ar12=mem. +- +- // register indexed store zero +- {name: "MOVBstorezeroidx", argLength: 3, reg: gpstore, asm: "MOVB", typ: "Mem"}, // store 1 byte of zero to arg0 + arg1, arg2 = mem. +- {name: "MOVHstorezeroidx", argLength: 3, reg: gpstore, asm: "MOVH", typ: "Mem"}, // store 2 bytes of zero to arg0 + arg1, arg2 = mem. +- {name: "MOVWstorezeroidx", argLength: 3, reg: gpstore, asm: "MOVW", typ: "Mem"}, // store 4 bytes of zero to arg0 + arg1, arg2 = mem. +- {name: "MOVVstorezeroidx", argLength: 3, reg: gpstore, asm: "MOVV", typ: "Mem"}, // store 8 bytes of zero to arg0 + arg1, arg2 = mem. +- + // moves (no conversion) + {name: "MOVWfpgp", argLength: 1, reg: fpgp, asm: "MOVW"}, // move float32 to int32 (no conversion). + {name: "MOVWgpfp", argLength: 1, reg: gpfp, asm: "MOVW"}, // move int32 to float32 (no conversion). +@@ -581,7 +570,8 @@ func init() { + {name: "PRELD", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELD", hasSideEffects: true}, + {name: "PRELDX", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELDX", hasSideEffects: true}, + +- {name: "ADDshiftLLV", argLength: 2, aux: "Int64", reg: gp21, asm: "ALSLV"}, // arg0 + arg1< (BEQ x y yes no) + (NEZ (XOR x y) yes no) => (BNE x y yes no) + +-(SGT x (MOVVconst [c])) && c == 0 => (SGTzero x) +-(SGTU x (MOVVconst [c])) && c == 0 => (SGTUzero x) ++// use zero register ++(MOVVconst [0]) => (ZERO) +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index 60c23a4786..efe63d914d 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -1892,14 +1892,6 @@ const ( + OpLOONG64MOVVstoreidx + OpLOONG64MOVFstoreidx + OpLOONG64MOVDstoreidx +- OpLOONG64MOVBstorezero +- OpLOONG64MOVHstorezero +- OpLOONG64MOVWstorezero +- OpLOONG64MOVVstorezero +- OpLOONG64MOVBstorezeroidx +- OpLOONG64MOVHstorezeroidx +- OpLOONG64MOVWstorezeroidx +- OpLOONG64MOVVstorezeroidx + OpLOONG64MOVWfpgp + OpLOONG64MOVWgpfp + OpLOONG64MOVVfpgp +@@ -1970,6 +1962,7 @@ const ( + OpLOONG64PRELD + OpLOONG64PRELDX + OpLOONG64ADDshiftLLV ++ OpLOONG64ZERO + + OpMIPSADD + OpMIPSADDconst +@@ -24012,7 +24005,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24040,7 +24033,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24069,7 +24062,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24084,7 +24077,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24099,7 +24092,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24113,7 +24106,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24127,7 +24120,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24141,7 +24134,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24155,7 +24148,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24286,7 +24279,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24315,7 +24308,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24344,7 +24337,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24373,7 +24366,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24401,7 +24394,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24415,7 +24408,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24621,7 +24614,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24635,7 +24628,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24663,7 +24656,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24677,7 +24670,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24719,7 +24712,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24733,7 +24726,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24775,7 +24768,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24789,7 +24782,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24831,7 +24824,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24845,7 +24838,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24887,7 +24880,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -24929,7 +24922,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 +@@ -25389,7 +25382,7 @@ var opcodeTable = [...]opInfo{ + asm: loong64.AMOVB, + reg: regInfo{ + inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25403,7 +25396,7 @@ var opcodeTable = [...]opInfo{ + asm: loong64.AMOVH, + reg: regInfo{ + inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25417,7 +25410,7 @@ var opcodeTable = [...]opInfo{ + asm: loong64.AMOVW, + reg: regInfo{ + inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25431,7 +25424,7 @@ var opcodeTable = [...]opInfo{ + asm: loong64.AMOVV, + reg: regInfo{ + inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25471,7 +25464,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {2, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25483,7 +25476,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {2, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25495,7 +25488,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {2, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25507,7 +25500,7 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {2, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB + }, + }, +@@ -25536,102 +25529,6 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, +- { +- name: "MOVBstorezero", +- auxType: auxSymOff, +- argLen: 2, +- faultOnNilArg0: true, +- symEffect: SymWrite, +- asm: loong64.AMOVB, +- reg: regInfo{ +- inputs: []inputInfo{ +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVHstorezero", +- auxType: auxSymOff, +- argLen: 2, +- faultOnNilArg0: true, +- symEffect: SymWrite, +- asm: loong64.AMOVH, +- reg: regInfo{ +- inputs: []inputInfo{ +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVWstorezero", +- auxType: auxSymOff, +- argLen: 2, +- faultOnNilArg0: true, +- symEffect: SymWrite, +- asm: loong64.AMOVW, +- reg: regInfo{ +- inputs: []inputInfo{ +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVVstorezero", +- auxType: auxSymOff, +- argLen: 2, +- faultOnNilArg0: true, +- symEffect: SymWrite, +- asm: loong64.AMOVV, +- reg: regInfo{ +- inputs: []inputInfo{ +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVBstorezeroidx", +- argLen: 3, +- asm: loong64.AMOVB, +- reg: regInfo{ +- inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVHstorezeroidx", +- argLen: 3, +- asm: loong64.AMOVH, +- reg: regInfo{ +- inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVWstorezeroidx", +- argLen: 3, +- asm: loong64.AMOVW, +- reg: regInfo{ +- inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, +- { +- name: "MOVVstorezeroidx", +- argLen: 3, +- asm: loong64.AMOVV, +- reg: regInfo{ +- inputs: []inputInfo{ +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB +- }, +- }, +- }, + { + name: "MOVWfpgp", + argLen: 1, +@@ -26557,13 +26454,20 @@ var opcodeTable = [...]opInfo{ + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 +- {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + }, + outputs: []outputInfo{ + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 + }, + }, + }, ++ { ++ name: "ZERO", ++ argLen: 0, ++ zeroWidth: true, ++ fixedReg: true, ++ reg: regInfo{}, ++ }, + + { + name: "ADD", +@@ -42932,7 +42836,7 @@ var specialRegMaskARM64 = regMask(0) + var framepointerRegARM64 = int8(-1) + var linkRegARM64 = int8(28) + var registersLOONG64 = [...]Register{ +- {0, loong64.REG_R0, "R0"}, ++ {0, loong64.REGZERO, "ZERO"}, + {1, loong64.REG_R1, "R1"}, + {2, loong64.REGSP, "SP"}, + {3, loong64.REG_R4, "R4"}, +diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go +index f1e210fe9b..98d0949134 100644 +--- a/src/cmd/compile/internal/ssa/regalloc.go ++++ b/src/cmd/compile/internal/ssa/regalloc.go +@@ -1400,7 +1400,7 @@ func (s *regAllocState) regalloc(f *Func) { + case OpSB: + s.assignReg(s.SBReg, v, v) + s.sb = v.ID +- case OpARM64ZERO: ++ case OpARM64ZERO, OpLOONG64ZERO: + s.assignReg(s.ZeroIntReg, v, v) + default: + f.Fatalf("unknown fixed-register op %s", v) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index a4777fd160..983c3d0c85 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -350,10 +350,6 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64MOVBstore(v) + case OpLOONG64MOVBstoreidx: + return rewriteValueLOONG64_OpLOONG64MOVBstoreidx(v) +- case OpLOONG64MOVBstorezero: +- return rewriteValueLOONG64_OpLOONG64MOVBstorezero(v) +- case OpLOONG64MOVBstorezeroidx: +- return rewriteValueLOONG64_OpLOONG64MOVBstorezeroidx(v) + case OpLOONG64MOVDload: + return rewriteValueLOONG64_OpLOONG64MOVDload(v) + case OpLOONG64MOVDloadidx: +@@ -386,10 +382,6 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64MOVHstore(v) + case OpLOONG64MOVHstoreidx: + return rewriteValueLOONG64_OpLOONG64MOVHstoreidx(v) +- case OpLOONG64MOVHstorezero: +- return rewriteValueLOONG64_OpLOONG64MOVHstorezero(v) +- case OpLOONG64MOVHstorezeroidx: +- return rewriteValueLOONG64_OpLOONG64MOVHstorezeroidx(v) + case OpLOONG64MOVVload: + return rewriteValueLOONG64_OpLOONG64MOVVload(v) + case OpLOONG64MOVVloadidx: +@@ -402,10 +394,6 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64MOVVstore(v) + case OpLOONG64MOVVstoreidx: + return rewriteValueLOONG64_OpLOONG64MOVVstoreidx(v) +- case OpLOONG64MOVVstorezero: +- return rewriteValueLOONG64_OpLOONG64MOVVstorezero(v) +- case OpLOONG64MOVVstorezeroidx: +- return rewriteValueLOONG64_OpLOONG64MOVVstorezeroidx(v) + case OpLOONG64MOVWUload: + return rewriteValueLOONG64_OpLOONG64MOVWUload(v) + case OpLOONG64MOVWUloadidx: +@@ -422,10 +410,6 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64MOVWstore(v) + case OpLOONG64MOVWstoreidx: + return rewriteValueLOONG64_OpLOONG64MOVWstoreidx(v) +- case OpLOONG64MOVWstorezero: +- return rewriteValueLOONG64_OpLOONG64MOVWstorezero(v) +- case OpLOONG64MOVWstorezeroidx: +- return rewriteValueLOONG64_OpLOONG64MOVWstorezeroidx(v) + case OpLOONG64MULV: + return rewriteValueLOONG64_OpLOONG64MULV(v) + case OpLOONG64NEGV: +@@ -2899,22 +2883,6 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { + v.AddArg3(ptr, x, mem) + return true + } +- // match: (MOVBstore [off] {sym} ptr (MOVVconst [0]) mem) +- // result: (MOVBstorezero [off] {sym} ptr mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 { +- break +- } +- mem := v_2 +- v.reset(OpLOONG64MOVBstorezero) +- v.AuxInt = int32ToAuxInt(off) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } + // match: (MOVBstore [off] {sym} (ADDV ptr idx) val mem) + // cond: off == 0 && sym == nil + // result: (MOVBstoreidx ptr idx val mem) +@@ -2980,130 +2948,6 @@ func rewriteValueLOONG64_OpLOONG64MOVBstoreidx(v *Value) bool { + v.AddArg3(idx, val, mem) + return true + } +- // match: (MOVBstoreidx ptr idx (MOVVconst [0]) mem) +- // result: (MOVBstorezeroidx ptr idx mem) +- for { +- ptr := v_0 +- idx := v_1 +- if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 { +- break +- } +- mem := v_3 +- v.reset(OpLOONG64MOVBstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- config := b.Func.Config +- // match: (MOVBstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) +- // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVBstorezero [off1+int32(off2)] {sym} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDVconst { +- break +- } +- off2 := auxIntToInt64(v_0.AuxInt) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVBstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVBstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) +- // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVBstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym1 := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64MOVVaddr { +- break +- } +- off2 := auxIntToInt32(v_0.AuxInt) +- sym2 := auxToSym(v_0.Aux) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVBstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(mergeSym(sym1, sym2)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVBstorezero [off] {sym} (ADDV ptr idx) mem) +- // cond: off == 0 && sym == nil +- // result: (MOVBstorezeroidx ptr idx mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDV { +- break +- } +- idx := v_0.Args[1] +- ptr := v_0.Args[0] +- mem := v_1 +- if !(off == 0 && sym == nil) { +- break +- } +- v.reset(OpLOONG64MOVBstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVBstorezeroidx(v *Value) bool { +- v_2 := v.Args[2] +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (MOVBstorezeroidx ptr (MOVVconst [c]) mem) +- // cond: is32Bit(c) +- // result: (MOVBstorezero [int32(c)] ptr mem) +- for { +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVBstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVBstorezeroidx (MOVVconst [c]) idx mem) +- // cond: is32Bit(c) +- // result: (MOVBstorezero [int32(c)] idx mem) +- for { +- if v_0.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_0.AuxInt) +- idx := v_1 +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVBstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(idx, mem) +- return true +- } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool { +@@ -4230,22 +4074,6 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { + v.AddArg3(ptr, x, mem) + return true + } +- // match: (MOVHstore [off] {sym} ptr (MOVVconst [0]) mem) +- // result: (MOVHstorezero [off] {sym} ptr mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 { +- break +- } +- mem := v_2 +- v.reset(OpLOONG64MOVHstorezero) +- v.AuxInt = int32ToAuxInt(off) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } + // match: (MOVHstore [off] {sym} (ADDV ptr idx) val mem) + // cond: off == 0 && sym == nil + // result: (MOVHstoreidx ptr idx val mem) +@@ -4311,130 +4139,6 @@ func rewriteValueLOONG64_OpLOONG64MOVHstoreidx(v *Value) bool { + v.AddArg3(idx, val, mem) + return true + } +- // match: (MOVHstoreidx ptr idx (MOVVconst [0]) mem) +- // result: (MOVHstorezeroidx ptr idx mem) +- for { +- ptr := v_0 +- idx := v_1 +- if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 { +- break +- } +- mem := v_3 +- v.reset(OpLOONG64MOVHstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- config := b.Func.Config +- // match: (MOVHstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) +- // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVHstorezero [off1+int32(off2)] {sym} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDVconst { +- break +- } +- off2 := auxIntToInt64(v_0.AuxInt) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVHstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVHstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) +- // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVHstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym1 := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64MOVVaddr { +- break +- } +- off2 := auxIntToInt32(v_0.AuxInt) +- sym2 := auxToSym(v_0.Aux) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVHstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(mergeSym(sym1, sym2)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVHstorezero [off] {sym} (ADDV ptr idx) mem) +- // cond: off == 0 && sym == nil +- // result: (MOVHstorezeroidx ptr idx mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDV { +- break +- } +- idx := v_0.Args[1] +- ptr := v_0.Args[0] +- mem := v_1 +- if !(off == 0 && sym == nil) { +- break +- } +- v.reset(OpLOONG64MOVHstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVHstorezeroidx(v *Value) bool { +- v_2 := v.Args[2] +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (MOVHstorezeroidx ptr (MOVVconst [c]) mem) +- // cond: is32Bit(c) +- // result: (MOVHstorezero [int32(c)] ptr mem) +- for { +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVHstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVHstorezeroidx (MOVVconst [c]) idx mem) +- // cond: is32Bit(c) +- // result: (MOVHstorezero [int32(c)] idx mem) +- for { +- if v_0.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_0.AuxInt) +- idx := v_1 +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVHstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(idx, mem) +- return true +- } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { +@@ -4675,22 +4379,6 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { + v.AddArg3(ptr, val, mem) + return true + } +- // match: (MOVVstore [off] {sym} ptr (MOVVconst [0]) mem) +- // result: (MOVVstorezero [off] {sym} ptr mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 { +- break +- } +- mem := v_2 +- v.reset(OpLOONG64MOVVstorezero) +- v.AuxInt = int32ToAuxInt(off) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } + // match: (MOVVstore [off] {sym} (ADDV ptr idx) val mem) + // cond: off == 0 && sym == nil + // result: (MOVVstoreidx ptr idx val mem) +@@ -4756,130 +4444,6 @@ func rewriteValueLOONG64_OpLOONG64MOVVstoreidx(v *Value) bool { + v.AddArg3(idx, val, mem) + return true + } +- // match: (MOVVstoreidx ptr idx (MOVVconst [0]) mem) +- // result: (MOVVstorezeroidx ptr idx mem) +- for { +- ptr := v_0 +- idx := v_1 +- if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 { +- break +- } +- mem := v_3 +- v.reset(OpLOONG64MOVVstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- config := b.Func.Config +- // match: (MOVVstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) +- // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVVstorezero [off1+int32(off2)] {sym} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDVconst { +- break +- } +- off2 := auxIntToInt64(v_0.AuxInt) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVVstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVVstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) +- // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVVstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym1 := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64MOVVaddr { +- break +- } +- off2 := auxIntToInt32(v_0.AuxInt) +- sym2 := auxToSym(v_0.Aux) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVVstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(mergeSym(sym1, sym2)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVVstorezero [off] {sym} (ADDV ptr idx) mem) +- // cond: off == 0 && sym == nil +- // result: (MOVVstorezeroidx ptr idx mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDV { +- break +- } +- idx := v_0.Args[1] +- ptr := v_0.Args[0] +- mem := v_1 +- if !(off == 0 && sym == nil) { +- break +- } +- v.reset(OpLOONG64MOVVstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVVstorezeroidx(v *Value) bool { +- v_2 := v.Args[2] +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (MOVVstorezeroidx ptr (MOVVconst [c]) mem) +- // cond: is32Bit(c) +- // result: (MOVVstorezero [int32(c)] ptr mem) +- for { +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVVstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVVstorezeroidx (MOVVconst [c]) idx mem) +- // cond: is32Bit(c) +- // result: (MOVVstorezero [int32(c)] idx mem) +- for { +- if v_0.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_0.AuxInt) +- idx := v_1 +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVVstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(idx, mem) +- return true +- } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { +@@ -5571,22 +5135,6 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { + v.AddArg3(ptr, x, mem) + return true + } +- // match: (MOVWstore [off] {sym} ptr (MOVVconst [0]) mem) +- // result: (MOVWstorezero [off] {sym} ptr mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 { +- break +- } +- mem := v_2 +- v.reset(OpLOONG64MOVWstorezero) +- v.AuxInt = int32ToAuxInt(off) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } + // match: (MOVWstore [off] {sym} (ADDV ptr idx) val mem) + // cond: off == 0 && sym == nil + // result: (MOVWstoreidx ptr idx val mem) +@@ -5652,130 +5200,6 @@ func rewriteValueLOONG64_OpLOONG64MOVWstoreidx(v *Value) bool { + v.AddArg3(idx, val, mem) + return true + } +- // match: (MOVWstoreidx ptr idx (MOVVconst [0]) mem) +- // result: (MOVWstorezeroidx ptr idx mem) +- for { +- ptr := v_0 +- idx := v_1 +- if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 { +- break +- } +- mem := v_3 +- v.reset(OpLOONG64MOVWstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- config := b.Func.Config +- // match: (MOVWstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) +- // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVWstorezero [off1+int32(off2)] {sym} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDVconst { +- break +- } +- off2 := auxIntToInt64(v_0.AuxInt) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVWstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(sym) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVWstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) +- // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) +- // result: (MOVWstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +- for { +- off1 := auxIntToInt32(v.AuxInt) +- sym1 := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64MOVVaddr { +- break +- } +- off2 := auxIntToInt32(v_0.AuxInt) +- sym2 := auxToSym(v_0.Aux) +- ptr := v_0.Args[0] +- mem := v_1 +- if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { +- break +- } +- v.reset(OpLOONG64MOVWstorezero) +- v.AuxInt = int32ToAuxInt(off1 + int32(off2)) +- v.Aux = symToAux(mergeSym(sym1, sym2)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVWstorezero [off] {sym} (ADDV ptr idx) mem) +- // cond: off == 0 && sym == nil +- // result: (MOVWstorezeroidx ptr idx mem) +- for { +- off := auxIntToInt32(v.AuxInt) +- sym := auxToSym(v.Aux) +- if v_0.Op != OpLOONG64ADDV { +- break +- } +- idx := v_0.Args[1] +- ptr := v_0.Args[0] +- mem := v_1 +- if !(off == 0 && sym == nil) { +- break +- } +- v.reset(OpLOONG64MOVWstorezeroidx) +- v.AddArg3(ptr, idx, mem) +- return true +- } +- return false +-} +-func rewriteValueLOONG64_OpLOONG64MOVWstorezeroidx(v *Value) bool { +- v_2 := v.Args[2] +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (MOVWstorezeroidx ptr (MOVVconst [c]) mem) +- // cond: is32Bit(c) +- // result: (MOVWstorezero [int32(c)] ptr mem) +- for { +- ptr := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVWstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(ptr, mem) +- return true +- } +- // match: (MOVWstorezeroidx (MOVVconst [c]) idx mem) +- // cond: is32Bit(c) +- // result: (MOVWstorezero [int32(c)] idx mem) +- for { +- if v_0.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_0.AuxInt) +- idx := v_1 +- mem := v_2 +- if !(is32Bit(c)) { +- break +- } +- v.reset(OpLOONG64MOVWstorezero) +- v.AuxInt = int32ToAuxInt(int32(c)) +- v.AddArg2(idx, mem) +- return true +- } + return false + } + func rewriteValueLOONG64_OpLOONG64MULV(v *Value) bool { +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +index 94125ad683..02930e5e83 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64latelower.go +@@ -4,53 +4,21 @@ package ssa + + func rewriteValueLOONG64latelower(v *Value) bool { + switch v.Op { +- case OpLOONG64SGT: +- return rewriteValueLOONG64latelower_OpLOONG64SGT(v) +- case OpLOONG64SGTU: +- return rewriteValueLOONG64latelower_OpLOONG64SGTU(v) ++ case OpLOONG64MOVVconst: ++ return rewriteValueLOONG64latelower_OpLOONG64MOVVconst(v) + case OpLOONG64SLLVconst: + return rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v) + } + return false + } +-func rewriteValueLOONG64latelower_OpLOONG64SGT(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (SGT x (MOVVconst [c])) +- // cond: c == 0 +- // result: (SGTzero x) ++func rewriteValueLOONG64latelower_OpLOONG64MOVVconst(v *Value) bool { ++ // match: (MOVVconst [0]) ++ // result: (ZERO) + for { +- x := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- if !(c == 0) { +- break +- } +- v.reset(OpLOONG64SGTzero) +- v.AddArg(x) +- return true +- } +- return false +-} +-func rewriteValueLOONG64latelower_OpLOONG64SGTU(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- // match: (SGTU x (MOVVconst [c])) +- // cond: c == 0 +- // result: (SGTUzero x) +- for { +- x := v_0 +- if v_1.Op != OpLOONG64MOVVconst { +- break +- } +- c := auxIntToInt64(v_1.AuxInt) +- if !(c == 0) { ++ if auxIntToInt64(v.AuxInt) != 0 { + break + } +- v.reset(OpLOONG64SGTUzero) +- v.AddArg(x) ++ v.reset(OpLOONG64ZERO) + return true + } + return false +diff --git a/test/codegen/bitfield.go b/test/codegen/bitfield.go +index 6374d70650..51221266e1 100644 +--- a/test/codegen/bitfield.go ++++ b/test/codegen/bitfield.go +@@ -373,6 +373,6 @@ func shift(x uint32, y uint16, z uint8) uint64 { + // loong64:-`MOVBU`,-`SRLV\t[$]8` + c := uint64(z) >> 8 + // arm64:`MOVD\tZR`,-`ADD\tR[0-9]+>>16`,-`ADD\tR[0-9]+>>8`, +- // loong64:`MOVV\t[$]0`,-`ADDVU` ++ // loong64:`MOVV\tR0`,-`ADDVU` + return a + b + c + } +diff --git a/test/codegen/multiply.go b/test/codegen/multiply.go +index dc2910dab7..8c408cbfba 100644 +--- a/test/codegen/multiply.go ++++ b/test/codegen/multiply.go +@@ -12,7 +12,7 @@ package codegen + func m0(x int64) int64 { + // amd64: "XORL" + // arm64: "MOVD\tZR" +- // loong64: "MOVV\t[$]0" ++ // loong64: "MOVV\tR0" + return x * 0 + } + func m2(x int64) int64 { +diff --git a/test/codegen/shift.go b/test/codegen/shift.go +index 3ab0fcfabc..1c71b0f3ef 100644 +--- a/test/codegen/shift.go ++++ b/test/codegen/shift.go +@@ -25,19 +25,19 @@ func rshConst64Ux64(v uint64) uint64 { + } + + func rshConst64Ux64Overflow32(v uint32) uint64 { +- // loong64:"MOVV\t\\$0,",-"SRL\t" ++ // loong64:"MOVV\tR0,",-"SRL\t" + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 32 + } + + func rshConst64Ux64Overflow16(v uint16) uint64 { +- // loong64:"MOVV\t\\$0,",-"SRLV" ++ // loong64:"MOVV\tR0,",-"SRLV" + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 16 + } + + func rshConst64Ux64Overflow8(v uint8) uint64 { +- // loong64:"MOVV\t\\$0,",-"SRLV" ++ // loong64:"MOVV\tR0,",-"SRLV" + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 8 + } +-- +2.43.7 + diff --git a/0041-cmd-compile-absorb-NEGV-into-branch-on-loong64.patch b/0041-cmd-compile-absorb-NEGV-into-branch-on-loong64.patch new file mode 100644 index 0000000..5c4792d --- /dev/null +++ b/0041-cmd-compile-absorb-NEGV-into-branch-on-loong64.patch @@ -0,0 +1,71 @@ +From 48c371782ebc36f36911a3cbbca7eab2dc38b602 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 12 Aug 2025 19:23:46 +0800 +Subject: [PATCH 41/61] cmd/compile: absorb NEGV into branch on loong64 + +Removes 132 instructions from the go binary on loong64. + +Change-Id: Ia02dc305b12f63a64f3f48d120ef852d45cc2a7b +Reviewed-on: https://go-review.googlesource.com/c/go/+/695115 +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +Auto-Submit: Keith Randall +Reviewed-by: David Chase +--- + src/cmd/compile/internal/ssa/_gen/LOONG64.rules | 4 ++++ + src/cmd/compile/internal/ssa/rewriteLOONG64.go | 16 ++++++++++++++++ + 2 files changed, 20 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index c602e9d03e..f8b88628b5 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -959,6 +959,10 @@ + (GEZ (MOVVconst [c]) yes no) && c >= 0 => (First yes no) + (GEZ (MOVVconst [c]) yes no) && c < 0 => (First no yes) + ++// absorb NEGV into branches ++(EQZ (NEGV x) yes no) => (EQZ x yes no) ++(NEZ (NEGV x) yes no) => (NEZ x yes no) ++ + // Convert branch with zero to more optimal branch zero. + (BEQ (MOVVconst [0]) cond yes no) => (EQZ cond yes no) + (BEQ cond (MOVVconst [0]) yes no) => (EQZ cond yes no) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 983c3d0c85..48462bc5ca 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -11850,6 +11850,14 @@ func rewriteBlockLOONG64(b *Block) bool { + b.swapSuccessors() + return true + } ++ // match: (EQZ (NEGV x) yes no) ++ // result: (EQZ x yes no) ++ for b.Controls[0].Op == OpLOONG64NEGV { ++ v_0 := b.Controls[0] ++ x := v_0.Args[0] ++ b.resetWithControl(BlockLOONG64EQZ, x) ++ return true ++ } + case BlockLOONG64GEZ: + // match: (GEZ (MOVVconst [c]) yes no) + // cond: c >= 0 +@@ -12177,6 +12185,14 @@ func rewriteBlockLOONG64(b *Block) bool { + b.Reset(BlockFirst) + return true + } ++ // match: (NEZ (NEGV x) yes no) ++ // result: (NEZ x yes no) ++ for b.Controls[0].Op == OpLOONG64NEGV { ++ v_0 := b.Controls[0] ++ x := v_0.Args[0] ++ b.resetWithControl(BlockLOONG64NEZ, x) ++ return true ++ } + } + return false + } +-- +2.43.7 + diff --git a/0042-cmd-compile-simplify-zerorange-on-loong64.patch b/0042-cmd-compile-simplify-zerorange-on-loong64.patch new file mode 100644 index 0000000..576d90b --- /dev/null +++ b/0042-cmd-compile-simplify-zerorange-on-loong64.patch @@ -0,0 +1,81 @@ +From 2abe16e7af2ef9078ee6d623c791c10a06ba91d9 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Thu, 21 Aug 2025 19:46:47 +0800 +Subject: [PATCH 42/61] cmd/compile: simplify zerorange on loong64 + +Refer to CL 678936, we also did the same thing on loong64. + +Change-Id: I156a9110a034878192f64baf8018115424aa5f0b +Reviewed-on: https://go-review.googlesource.com/c/go/+/697957 +Reviewed-by: Carlos Amedee +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +Auto-Submit: Keith Randall +LUCI-TryBot-Result: Go LUCI +--- + src/cmd/compile/internal/loong64/ggen.go | 38 ++++-------------------- + 1 file changed, 6 insertions(+), 32 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ggen.go b/src/cmd/compile/internal/loong64/ggen.go +index 27d318a8bb..bb1b146346 100644 +--- a/src/cmd/compile/internal/loong64/ggen.go ++++ b/src/cmd/compile/internal/loong64/ggen.go +@@ -6,49 +6,23 @@ package loong64 + + import ( + "cmd/compile/internal/base" +- "cmd/compile/internal/ir" + "cmd/compile/internal/objw" +- "cmd/compile/internal/types" + "cmd/internal/obj" + "cmd/internal/obj/loong64" + ) + + func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, _ *uint32) *obj.Prog { +- if cnt == 0 { +- return p ++ if cnt%8 != 0 { ++ panic("zeroed region not aligned") + } + + // Adjust the frame to account for LR. + off += base.Ctxt.Arch.FixedFrameSize + +- if cnt < int64(4*types.PtrSize) { +- for i := int64(0); i < cnt; i += int64(types.PtrSize) { +- p = pp.Append(p, loong64.AMOVV, obj.TYPE_REG, loong64.REGZERO, 0, obj.TYPE_MEM, loong64.REGSP, off+i) +- } +- } else if cnt <= int64(128*types.PtrSize) { +- p = pp.Append(p, loong64.AADDV, obj.TYPE_CONST, 0, off, obj.TYPE_REG, loong64.REGRT1, 0) +- p.Reg = loong64.REGSP +- p = pp.Append(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0) +- p.To.Name = obj.NAME_EXTERN +- p.To.Sym = ir.Syms.Duffzero +- p.To.Offset = 8 * (128 - cnt/int64(types.PtrSize)) +- } else { +- // ADDV $(off), SP, r1 +- // ADDV $cnt, r1, r2 +- // loop: +- // MOVV R0, (r1) +- // ADDV $Widthptr, r1 +- // BNE r1, r2, loop +- p = pp.Append(p, loong64.AADDV, obj.TYPE_CONST, 0, off, obj.TYPE_REG, loong64.REGRT1, 0) +- p.Reg = loong64.REGSP +- p = pp.Append(p, loong64.AADDV, obj.TYPE_CONST, 0, cnt, obj.TYPE_REG, loong64.REGRT2, 0) +- p.Reg = loong64.REGRT1 +- p = pp.Append(p, loong64.AMOVV, obj.TYPE_REG, loong64.REGZERO, 0, obj.TYPE_MEM, loong64.REGRT1, 0) +- loop := p +- p = pp.Append(p, loong64.AADDV, obj.TYPE_CONST, 0, int64(types.PtrSize), obj.TYPE_REG, loong64.REGRT1, 0) +- p = pp.Append(p, loong64.ABNE, obj.TYPE_REG, loong64.REGRT1, 0, obj.TYPE_BRANCH, 0, 0) +- p.Reg = loong64.REGRT2 +- p.To.SetTarget(loop) ++ for cnt != 0 { ++ p = pp.Append(p, loong64.AMOVV, obj.TYPE_REG, loong64.REGZERO, 0, obj.TYPE_MEM, loong64.REGSP, off) ++ off += 8 ++ cnt -= 8 + } + + return p +-- +2.43.7 + diff --git a/0043-cmd-internal-obj-loong64-simplify-buildop.patch b/0043-cmd-internal-obj-loong64-simplify-buildop.patch new file mode 100644 index 0000000..8b79c4b --- /dev/null +++ b/0043-cmd-internal-obj-loong64-simplify-buildop.patch @@ -0,0 +1,83 @@ +From ba3efcded0de1c359598b7f9be618dada75dfc22 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 26 Aug 2025 16:25:21 +0800 +Subject: [PATCH 43/61] cmd/internal/obj/loong64: simplify buildop + +The length of array optab is readily available, remove the sentinel and +sentinel scan, like arm64. + +Change-Id: Iceeed22587ce2beeedeb5babdde3474e75d70f89 +Reviewed-on: https://go-review.googlesource.com/c/go/+/699095 +Reviewed-by: abner chenc +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Carlos Amedee +Reviewed-by: Cherry Mui +Reviewed-by: Meidan Li +--- + src/cmd/internal/obj/loong64/asm.go | 38 ++++++++++++----------------- + 1 file changed, 16 insertions(+), 22 deletions(-) + +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 062442cf4a..56eb05f847 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -438,8 +438,6 @@ var optab = []Optab{ + {obj.ANOP, C_FREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, + {obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP + {obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP +- +- {obj.AXXX, C_NONE, C_NONE, C_NONE, C_NONE, C_NONE, 0, 4, 0, 0}, + } + + var atomicInst = map[obj.As]uint32{ +@@ -1307,31 +1305,27 @@ func buildop(ctxt *obj.Link) { + return + } + +- var n int +- +- for i := 0; i < C_NCLASS; i++ { +- for n = 0; n < C_NCLASS; n++ { +- if cmp(n, i) { +- xcmp[i][n] = true ++ for i := range C_NCLASS { ++ for j := range C_NCLASS { ++ if cmp(j, i) { ++ xcmp[i][j] = true + } + } + } +- for n = 0; optab[n].as != obj.AXXX; n++ { +- } +- slices.SortFunc(optab[:n], ocmp) +- for i := 0; i < n; i++ { +- r := optab[i].as +- r0 := r & obj.AMask +- start := i +- for optab[i].as == r { +- i++ +- } +- oprange[r0] = optab[start:i] +- i-- + +- switch r { ++ slices.SortFunc(optab, ocmp) ++ for i := 0; i < len(optab); i++ { ++ as, start := optab[i].as, i ++ for ; i < len(optab)-1; i++ { ++ if optab[i+1].as != as { ++ break ++ } ++ } ++ r0 := as & obj.AMask ++ oprange[r0] = optab[start : i+1] ++ switch as { + default: +- ctxt.Diag("unknown op in build: %v", r) ++ ctxt.Diag("unknown op in build: %v", as) + ctxt.DiagFlush() + log.Fatalf("bad code") + +-- +2.43.7 + diff --git a/0044-internal-runtime-atomic-reset-wrong-jump-target-in-C.patch b/0044-internal-runtime-atomic-reset-wrong-jump-target-in-C.patch new file mode 100644 index 0000000..70d3892 --- /dev/null +++ b/0044-internal-runtime-atomic-reset-wrong-jump-target-in-C.patch @@ -0,0 +1,61 @@ +From 9c619d9031b1149ebafd23c35a731b9cf774bdbd Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Wed, 27 Aug 2025 14:45:58 +0800 +Subject: [PATCH 44/61] internal/runtime/atomic: reset wrong jump target in + Cas{,64} on loong64 + +The implementation here needs to be consistent with ssa.OpLOONG64LoweredAtomicCas{32,64}, +which was ignored in CL 613396. + +Change-Id: I72e8d2318e0c1935cc3a35ab5098f8a84e48bcd5 +Reviewed-on: https://go-review.googlesource.com/c/go/+/699395 +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Cherry Mui +Reviewed-by: sophie zhao +Reviewed-by: Meidan Li +--- + src/internal/runtime/atomic/atomic_loong64.s | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/internal/runtime/atomic/atomic_loong64.s b/src/internal/runtime/atomic/atomic_loong64.s +index 95d3e2bdab..4215af24fe 100644 +--- a/src/internal/runtime/atomic/atomic_loong64.s ++++ b/src/internal/runtime/atomic/atomic_loong64.s +@@ -19,7 +19,7 @@ TEXT ·Cas(SB), NOSPLIT, $0-17 + MOVW new+12(FP), R6 + + MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLAMCAS(SB), R8 +- BEQ R8, cas_again ++ BEQ R8, ll_sc + MOVV R5, R7 // backup old value + AMCASDBW R6, (R4), R5 + BNE R7, R5, cas_fail0 +@@ -30,6 +30,7 @@ cas_fail0: + MOVB R0, ret+16(FP) + RET + ++ll_sc: + // Implemented using the ll-sc instruction pair + DBAR $0x14 // LoadAcquire barrier + cas_again: +@@ -60,7 +61,7 @@ TEXT ·Cas64(SB), NOSPLIT, $0-25 + MOVV new+16(FP), R6 + + MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLAMCAS(SB), R8 +- BEQ R8, cas64_again ++ BEQ R8, ll_sc_64 + MOVV R5, R7 // backup old value + AMCASDBV R6, (R4), R5 + BNE R7, R5, cas64_fail0 +@@ -71,6 +72,7 @@ cas64_fail0: + MOVB R0, ret+24(FP) + RET + ++ll_sc_64: + // Implemented using the ll-sc instruction pair + DBAR $0x14 + cas64_again: +-- +2.43.7 + diff --git a/0045-cmd-internal-obj-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch b/0045-cmd-internal-obj-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch new file mode 100644 index 0000000..6171c7d --- /dev/null +++ b/0045-cmd-internal-obj-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch @@ -0,0 +1,222 @@ +From 0af93745a32ed312f9e140743b0d066055cd9b71 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Mon, 25 Aug 2025 15:22:09 +0800 +Subject: [PATCH 45/61] cmd/internal/obj/loong64: add LDPTR.{W/D} and + STPTR.{W/D} instructions support + +Go asm syntax: + MOVWP 4(R4), R5 + MOVVP 8(R4), R5 + MOVWP R4, 12(R5) + MOVVP R4, 16(R5) + +Equivalent platform assembler syntax: + ldptr.w r5, r4, $1 + ldptr.d r5, r4, $2 + stptr.w r4, r5, $3 + stptr.d r4, r5, $4 + +Change-Id: I50a341cee2d875cb7c5da9db08b23799c9dc6c64 +Reviewed-on: https://go-review.googlesource.com/c/go/+/699055 +Reviewed-by: abner chenc +Reviewed-by: Meidan Li +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Carlos Amedee +Reviewed-by: Cherry Mui +--- + .../asm/internal/asm/testdata/loong64enc1.s | 22 +++++++++++++ + src/cmd/internal/obj/loong64/a.out.go | 4 +++ + src/cmd/internal/obj/loong64/anames.go | 2 ++ + src/cmd/internal/obj/loong64/asm.go | 33 +++++++++++++++++++ + src/cmd/internal/obj/loong64/doc.go | 28 ++++++++++++++++ + 5 files changed, 89 insertions(+) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index ce953e72c6..e7e243007e 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -260,6 +260,28 @@ lable2: + MOVV FCC0, R4 // 04dc1401 + MOVV R4, FCC0 // 80d81401 + ++ // LDPTR.{W/D} and STPTR.{W/D} instructions ++ MOVWP R5, -32768(R4) // 85008025 ++ MOVWP R5, 32764(R4) // 85fc7f25 ++ MOVWP R5, 32(R4) // 85200025 ++ MOVWP R5, 4(R4) // 85040025 ++ MOVWP R5, (R4) // 85000025 ++ MOVVP R5, -32768(R4) // 85008027 ++ MOVVP R5, 32764(R4) // 85fc7f27 ++ MOVVP R5, 32(R4) // 85200027 ++ MOVVP R5, 4(R4) // 85040027 ++ MOVVP R5, (R4) // 85000027 ++ MOVWP -32768(R5), R4 // a4008024 ++ MOVWP 32764(R5), R4 // a4fc7f24 ++ MOVWP 32(R5), R4 // a4200024 ++ MOVWP 4(R5), R4 // a4040024 ++ MOVWP (R5), R4 // a4000024 ++ MOVVP -32768(R5), R4 // a4008026 ++ MOVVP 32764(R5), R4 // a4fc7f26 ++ MOVVP 32(R5), R4 // a4200026 ++ MOVVP 4(R5), R4 // a4040026 ++ MOVVP (R5), R4 // a4000026 ++ + // Loong64 atomic memory access instructions + AMSWAPB R14, (R13), R12 // ac395c38 + AMSWAPH R14, (R13), R12 // acb95c38 +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index ae1048636e..0c2cd55fed 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -666,6 +666,10 @@ const ( + ABSTRPICKW + ABSTRPICKV + ++ // 2.2.5.3 ++ AMOVWP ++ AMOVVP ++ + // 2.2.5.4. Prefetch Instructions + APRELD + APRELDX +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index 0770f80ce8..d99b843c90 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -202,6 +202,8 @@ var Anames = []string{ + "BSTRINSV", + "BSTRPICKW", + "BSTRPICKV", ++ "MOVWP", ++ "MOVVP", + "PRELD", + "PRELDX", + "CRCWBW", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 56eb05f847..6f7228fab2 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -212,6 +212,8 @@ var optab = []Optab{ + {AMOVV, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, + {AMOVB, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, + {AMOVBU, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, ++ {AMOVWP, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 73, 4, 0, 0}, ++ {AMOVWP, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 73, 4, 0, 0}, + + {AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, + {AMOVWU, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, +@@ -233,6 +235,8 @@ var optab = []Optab{ + {AMOVV, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, + {AMOVB, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, + {AMOVBU, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, ++ {AMOVWP, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 74, 4, 0, 0}, ++ {AMOVWP, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 74, 4, 0, 0}, + + {AMOVW, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, + {AMOVV, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, +@@ -1441,6 +1445,9 @@ func buildop(ctxt *obj.Link) { + case AMOVBU: + opset(AMOVHU, r0) + ++ case AMOVWP: ++ opset(AMOVVP, r0) ++ + case AMUL: + opset(AMULU, r0) + opset(AMULH, r0) +@@ -1944,6 +1951,10 @@ func OP_16IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { + return op | (i&0xFFFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 + } + ++func OP_14IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { ++ return op | (i&0x3FFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 ++} ++ + func OP_12IR_5I(op uint32, i1 uint32, r2 uint32, i2 uint32) uint32 { + return op | (i1&0xFFF)<<10 | (r2&0x1F)<<5 | (i2&0x1F)<<0 + } +@@ -2874,6 +2885,20 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o3 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP)) + } + o4 = OP_RRR(c.oprrr(p.As), uint32(REGTMP), uint32(r), uint32(p.To.Reg)) ++ ++ case 73: ++ v := c.regoff(&p.To) ++ if v&3 != 0 { ++ c.ctxt.Diag("%v: offset must be a multiple of 4.\n", p) ++ } ++ o1 = OP_14IRR(c.opirr(p.As), uint32(v>>2), uint32(p.To.Reg), uint32(p.From.Reg)) ++ ++ case 74: ++ v := c.regoff(&p.From) ++ if v&3 != 0 { ++ c.ctxt.Diag("%v: offset must be a multiple of 4.\n", p) ++ } ++ o1 = OP_14IRR(c.opirr(-p.As), uint32(v>>2), uint32(p.From.Reg), uint32(p.To.Reg)) + } + + out[0] = o1 +@@ -3959,6 +3984,10 @@ func (c *ctxt0) opirr(a obj.As) uint32 { + return 0x0ad << 22 + case AMOVD: + return 0x0af << 22 ++ case AMOVVP: ++ return 0x27 << 24 // stptr.d ++ case AMOVWP: ++ return 0x25 << 24 // stptr.w + case -AMOVB: + return 0x0a0 << 22 + case -AMOVBU: +@@ -3977,6 +4006,10 @@ func (c *ctxt0) opirr(a obj.As) uint32 { + return 0x0ac << 22 + case -AMOVD: + return 0x0ae << 22 ++ case -AMOVVP: ++ return 0x26 << 24 // ldptr.d ++ case -AMOVWP: ++ return 0x24 << 24 // ldptr.w + case -AVMOVQ: + return 0x0b0 << 22 // vld + case -AXVMOVQ: +diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go +index 64bb41ae5a..6c8f2618a2 100644 +--- a/src/cmd/internal/obj/loong64/doc.go ++++ b/src/cmd/internal/obj/loong64/doc.go +@@ -289,6 +289,34 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate) + + Go assembly | instruction Encoding + ALSLV $4, r4, r5, R6 | 002d9486 ++ ++5. Note of special memory access instructions ++ Instruction format: ++ MOVWP offset(Rj), Rd ++ MOVVP offset(Rj), Rd ++ MOVWP Rd, offset(Rj) ++ MOVVP Rd, offset(Rj) ++ ++ Mapping between Go and platform assembly: ++ Go assembly | platform assembly ++ MOVWP offset(Rj), Rd | ldptr.w rd, rj, si14 ++ MOVVP offset(Rj), Rd | ldptr.d rd, rj, si14 ++ MOVWP Rd, offset(Rj) | stptr.w rd, rj, si14 ++ MOVVP Rd, offset(Rj) | stptr.d rd, rj, si14 ++ ++ note: In Go assembly, for ease of understanding, offset is a 16-bit immediate number representing ++ the actual address offset, but in platform assembly, it need a 14-bit immediate number. ++ si14 = offset>>2 ++ ++ The addressing calculation for the above instruction involves logically left-shifting the 14-bit ++ immediate number si14 by 2 bits, then sign-extending it, and finally adding it to the value in the ++ general-purpose register rj to obtain the sum. ++ ++ For example: ++ ++ Go assembly | platform assembly ++ MOVWP 8(R4), R5 | ldptr.w r5, r4, $2 ++ + */ + + package loong64 +-- +2.43.7 + diff --git a/0046-cmd-compile-simplify-the-support-for-32bit-high-mult.patch b/0046-cmd-compile-simplify-the-support-for-32bit-high-mult.patch new file mode 100644 index 0000000..0f4d6df --- /dev/null +++ b/0046-cmd-compile-simplify-the-support-for-32bit-high-mult.patch @@ -0,0 +1,187 @@ +From e31cf4fa353ad134a7dd209833bca1fcf94a91a0 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Mon, 1 Sep 2025 15:49:34 +0800 +Subject: [PATCH 46/61] cmd/compile: simplify the support for 32bit high + multiply on loong64 + +Removes 152 instructions from the Go binary on loong64. + +Change-Id: Icf8ead4f4ca965f51add85ac5e45c3cca8916401 +Reviewed-on: https://go-review.googlesource.com/c/go/+/700335 +Reviewed-by: Keith Randall +Auto-Submit: Michael Pratt +Reviewed-by: Michael Pratt +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Meidan Li +Reviewed-by: abner chenc +--- + src/cmd/compile/internal/loong64/ssa.go | 2 +- + .../compile/internal/ssa/_gen/LOONG64.rules | 4 +- + .../compile/internal/ssa/_gen/LOONG64Ops.go | 2 + + src/cmd/compile/internal/ssa/opGen.go | 32 ++++++++++++ + .../compile/internal/ssa/rewriteLOONG64.go | 50 ++----------------- + 5 files changed, 41 insertions(+), 49 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 4cdb669973..7d96567fa9 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -184,7 +184,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + ssa.OpLOONG64MULD, + ssa.OpLOONG64DIVF, + ssa.OpLOONG64DIVD, +- ssa.OpLOONG64MULV, ssa.OpLOONG64MULHV, ssa.OpLOONG64MULHVU, ++ ssa.OpLOONG64MULV, ssa.OpLOONG64MULHV, ssa.OpLOONG64MULHVU, ssa.OpLOONG64MULH, ssa.OpLOONG64MULHU, + ssa.OpLOONG64DIVV, ssa.OpLOONG64REMV, ssa.OpLOONG64DIVVU, ssa.OpLOONG64REMVU, + ssa.OpLOONG64FCOPYSGD: + p := s.Prog(v.Op.Asm()) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index f8b88628b5..1ed5c635ce 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -17,8 +17,8 @@ + + (Hmul64 ...) => (MULHV ...) + (Hmul64u ...) => (MULHVU ...) +-(Hmul32 x y) => (SRAVconst (MULV (SignExt32to64 x) (SignExt32to64 y)) [32]) +-(Hmul32u x y) => (SRLVconst (MULV (ZeroExt32to64 x) (ZeroExt32to64 y)) [32]) ++(Hmul32 ...) => (MULH ...) ++(Hmul32u ...) => (MULHU ...) + + (Div64 x y) => (DIVV x y) + (Div64u ...) => (DIVVU ...) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index c063a82f5d..b0fcb8a714 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -200,6 +200,8 @@ func init() { + {name: "MULV", argLength: 2, reg: gp21, asm: "MULV", commutative: true, typ: "Int64"}, // arg0 * arg1 + {name: "MULHV", argLength: 2, reg: gp21, asm: "MULHV", commutative: true, typ: "Int64"}, // (arg0 * arg1) >> 64, signed + {name: "MULHVU", argLength: 2, reg: gp21, asm: "MULHVU", commutative: true, typ: "UInt64"}, // (arg0 * arg1) >> 64, unsigned ++ {name: "MULH", argLength: 2, reg: gp21, asm: "MULH", commutative: true, typ: "Int32"}, // (arg0 * arg1) >> 32, signed ++ {name: "MULHU", argLength: 2, reg: gp21, asm: "MULHU", commutative: true, typ: "UInt32"}, // (arg0 * arg1) >> 32, unsigned + {name: "DIVV", argLength: 2, reg: gp21, asm: "DIVV", typ: "Int64"}, // arg0 / arg1, signed + {name: "DIVVU", argLength: 2, reg: gp21, asm: "DIVVU", typ: "UInt64"}, // arg0 / arg1, unsigned + {name: "REMV", argLength: 2, reg: gp21, asm: "REMV", typ: "Int64"}, // arg0 / arg1, signed +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index efe63d914d..01dca2d3e0 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -1791,6 +1791,8 @@ const ( + OpLOONG64MULV + OpLOONG64MULHV + OpLOONG64MULHVU ++ OpLOONG64MULH ++ OpLOONG64MULHU + OpLOONG64DIVV + OpLOONG64DIVVU + OpLOONG64REMV +@@ -24099,6 +24101,36 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, ++ { ++ name: "MULH", ++ argLen: 2, ++ commutative: true, ++ asm: loong64.AMULH, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, ++ { ++ name: "MULHU", ++ argLen: 2, ++ commutative: true, ++ asm: loong64.AMULHU, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ {1, 1073741817}, // ZERO R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, + { + name: "DIVV", + argLen: 2, +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 48462bc5ca..740c2c2fd7 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -296,9 +296,11 @@ func rewriteValueLOONG64(v *Value) bool { + v.Op = OpLOONG64LoweredGetClosurePtr + return true + case OpHmul32: +- return rewriteValueLOONG64_OpHmul32(v) ++ v.Op = OpLOONG64MULH ++ return true + case OpHmul32u: +- return rewriteValueLOONG64_OpHmul32u(v) ++ v.Op = OpLOONG64MULHU ++ return true + case OpHmul64: + v.Op = OpLOONG64MULHV + return true +@@ -1569,50 +1571,6 @@ func rewriteValueLOONG64_OpEqPtr(v *Value) bool { + return true + } + } +-func rewriteValueLOONG64_OpHmul32(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- typ := &b.Func.Config.Types +- // match: (Hmul32 x y) +- // result: (SRAVconst (MULV (SignExt32to64 x) (SignExt32to64 y)) [32]) +- for { +- x := v_0 +- y := v_1 +- v.reset(OpLOONG64SRAVconst) +- v.AuxInt = int64ToAuxInt(32) +- v0 := b.NewValue0(v.Pos, OpLOONG64MULV, typ.Int64) +- v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) +- v1.AddArg(x) +- v2 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) +- v2.AddArg(y) +- v0.AddArg2(v1, v2) +- v.AddArg(v0) +- return true +- } +-} +-func rewriteValueLOONG64_OpHmul32u(v *Value) bool { +- v_1 := v.Args[1] +- v_0 := v.Args[0] +- b := v.Block +- typ := &b.Func.Config.Types +- // match: (Hmul32u x y) +- // result: (SRLVconst (MULV (ZeroExt32to64 x) (ZeroExt32to64 y)) [32]) +- for { +- x := v_0 +- y := v_1 +- v.reset(OpLOONG64SRLVconst) +- v.AuxInt = int64ToAuxInt(32) +- v0 := b.NewValue0(v.Pos, OpLOONG64MULV, typ.Int64) +- v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) +- v1.AddArg(x) +- v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) +- v2.AddArg(y) +- v0.AddArg2(v1, v2) +- v.AddArg(v0) +- return true +- } +-} + func rewriteValueLOONG64_OpIsInBounds(v *Value) bool { + v_1 := v.Args[1] + v_0 := v.Args[0] +-- +2.43.7 + diff --git a/0047-cmd-internal-obj-loong64-fix-the-usage-of-offset-in-.patch b/0047-cmd-internal-obj-loong64-fix-the-usage-of-offset-in-.patch new file mode 100644 index 0000000..e6b6a32 --- /dev/null +++ b/0047-cmd-internal-obj-loong64-fix-the-usage-of-offset-in-.patch @@ -0,0 +1,181 @@ +From a116f35486e0aab0029ba90c5fbb5eaff87f9f7d Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Fri, 29 Aug 2025 16:20:16 +0800 +Subject: [PATCH 47/61] cmd/internal/obj/loong64: fix the usage of offset in + the instructions [X]VLDREPL.{B/H/W/D} + +The previously defined usage of offset was ambiguous and not easy to understand. +For example, to fetch 4 bytes of data from the address base+8 and +broadcast it to each word element of vector register V5, the assembly +implementation is as follows: + previous: VMOVQ 2(base), V5.W4 + current: VMOVQ 8(base), V5.W4 + +Change-Id: I8bc84e35033ab63bd10f4c61618789f94314f78c +Reviewed-on: https://go-review.googlesource.com/c/go/+/699875 +Reviewed-by: Cherry Mui +Reviewed-by: Michael Pratt +Reviewed-by: abner chenc +Auto-Submit: Michael Pratt +Reviewed-by: Meidan Li +LUCI-TryBot-Result: Go LUCI +--- + .../asm/internal/asm/testdata/loong64enc1.s | 28 +++++++++++---- + src/cmd/internal/obj/loong64/asm.go | 35 ++++++++++++++++++- + src/cmd/internal/obj/loong64/doc.go | 9 +++++ + src/internal/chacha8rand/chacha8_loong64.s | 20 +++++------ + 4 files changed, 75 insertions(+), 17 deletions(-) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index e7e243007e..2e96be9154 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -538,13 +538,29 @@ lable2: + + // Load data from memory and broadcast to each element of a vector register: VMOVQ offset(Rj), . + VMOVQ (R4), V0.B16 // 80008030 +- VMOVQ 1(R4), V1.H8 // 81044030 +- VMOVQ 2(R4), V2.W4 // 82082030 +- VMOVQ 3(R4), V3.V2 // 830c1030 ++ VMOVQ 1(R4), V0.B16 // 80048030 ++ VMOVQ -3(R4), V0.B16 // 80f4bf30 ++ VMOVQ (R4), V1.H8 // 81004030 ++ VMOVQ 2(R4), V1.H8 // 81044030 ++ VMOVQ -6(R4), V1.H8 // 81f45f30 ++ VMOVQ (R4), V2.W4 // 82002030 ++ VMOVQ 8(R4), V2.W4 // 82082030 ++ VMOVQ -12(R4), V2.W4 // 82f42f30 ++ VMOVQ (R4), V3.V2 // 83001030 ++ VMOVQ 24(R4), V3.V2 // 830c1030 ++ VMOVQ -16(R4), V3.V2 // 83f81730 + XVMOVQ (R4), X0.B32 // 80008032 +- XVMOVQ 1(R4), X1.H16 // 81044032 +- XVMOVQ 2(R4), X2.W8 // 82082032 +- XVMOVQ 3(R4), X3.V4 // 830c1032 ++ XVMOVQ 1(R4), X0.B32 // 80048032 ++ XVMOVQ -5(R4), X0.B32 // 80ecbf32 ++ XVMOVQ (R4), X1.H16 // 81004032 ++ XVMOVQ 2(R4), X1.H16 // 81044032 ++ XVMOVQ -10(R4), X1.H16 // 81ec5f32 ++ XVMOVQ (R4), X2.W8 // 82002032 ++ XVMOVQ 8(R4), X2.W8 // 82082032 ++ XVMOVQ -20(R4), X2.W8 // 82ec2f32 ++ XVMOVQ (R4), X3.V4 // 83001032 ++ XVMOVQ 24(R4), X3.V4 // 830c1032 ++ XVMOVQ -24(R4), X3.V4 // 83f41732 + + // VSEQ{B,H,W,V}, XVSEQ{B,H,W,V} instruction + VSEQB V1, V2, V3 // 43040070 +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 6f7228fab2..614eeba5b0 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -1963,6 +1963,18 @@ func OP_12IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { + return op | (i&0xFFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 + } + ++func OP_11IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { ++ return op | (i&0x7FF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 ++} ++ ++func OP_10IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { ++ return op | (i&0x3FF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 ++} ++ ++func OP_9IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { ++ return op | (i&0x1FF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 ++} ++ + func OP_8IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 { + return op | (i&0xFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0 + } +@@ -2515,7 +2527,28 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + si := c.regoff(&p.From) + Rj := uint32(p.From.Reg & EXT_REG_MASK) + Vd := uint32(p.To.Reg & EXT_REG_MASK) +- o1 = v | uint32(si<<10) | (Rj << 5) | Vd ++ switch v & 0xc00000 { ++ case 0x800000: // [x]vldrepl.b ++ o1 = OP_12IRR(v, uint32(si), Rj, Vd) ++ case 0x400000: // [x]vldrepl.h ++ if si&1 != 0 { ++ c.ctxt.Diag("%v: offset must be a multiple of 2.\n", p) ++ } ++ o1 = OP_11IRR(v, uint32(si>>1), Rj, Vd) ++ case 0x0: ++ switch v & 0x300000 { ++ case 0x200000: // [x]vldrepl.w ++ if si&3 != 0 { ++ c.ctxt.Diag("%v: offset must be a multiple of 4.\n", p) ++ } ++ o1 = OP_10IRR(v, uint32(si>>2), Rj, Vd) ++ case 0x100000: // [x]vldrepl.d ++ if si&7 != 0 { ++ c.ctxt.Diag("%v: offset must be a multiple of 8.\n", p) ++ } ++ o1 = OP_9IRR(v, uint32(si>>3), Rj, Vd) ++ } ++ } + + case 47: // preld offset(Rbase), $hint + offs := c.regoff(&p.From) +diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go +index 6c8f2618a2..20c5a9e0a6 100644 +--- a/src/cmd/internal/obj/loong64/doc.go ++++ b/src/cmd/internal/obj/loong64/doc.go +@@ -220,6 +220,15 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate) + XVMOVQ offset(Rj), Xd.W8 | xvldrepl.w Xd, Rj, si10 | for i in range(8) : XR[xd].w[i] = load 32 bit memory data from (GR[rj]+SignExtend(si10<<2)) + XVMOVQ offset(Rj), Xd.V4 | xvldrepl.d Xd, Rj, si9 | for i in range(4) : XR[xd].d[i] = load 64 bit memory data from (GR[rj]+SignExtend(si9<<3)) + ++ note: In Go assembly, for ease of understanding, offset representing the actual address offset. ++ However, during platform encoding, the offset is shifted to increase the encodable offset range, as follows: ++ ++ Go assembly | platform assembly ++ VMOVQ 1(R4), V5.B16 | vldrepl.b v5, r4, $1 ++ VMOVQ 2(R4), V5.H8 | vldrepl.h v5, r4, $1 ++ VMOVQ 8(R4), V5.W4 | vldrepl.w v5, r4, $2 ++ VMOVQ 8(R4), V5.V2 | vldrepl.d v5, r4, $1 ++ + # Special instruction encoding definition and description on LoongArch + + 1. DBAR hint encoding for LA664(Loongson 3A6000) and later micro-architectures, paraphrased +diff --git a/src/internal/chacha8rand/chacha8_loong64.s b/src/internal/chacha8rand/chacha8_loong64.s +index 5e6857ed3a..73a1e5bf05 100644 +--- a/src/internal/chacha8rand/chacha8_loong64.s ++++ b/src/internal/chacha8rand/chacha8_loong64.s +@@ -50,22 +50,22 @@ lsx_chacha8: + + // load contants + VMOVQ (R10), V0.W4 +- VMOVQ 1(R10), V1.W4 +- VMOVQ 2(R10), V2.W4 +- VMOVQ 3(R10), V3.W4 ++ VMOVQ 4(R10), V1.W4 ++ VMOVQ 8(R10), V2.W4 ++ VMOVQ 12(R10), V3.W4 + + // load 4-32bit data from incRotMatrix added to counter + VMOVQ (R11), V30 + + // load seed + VMOVQ (R4), V4.W4 +- VMOVQ 1(R4), V5.W4 +- VMOVQ 2(R4), V6.W4 +- VMOVQ 3(R4), V7.W4 +- VMOVQ 4(R4), V8.W4 +- VMOVQ 5(R4), V9.W4 +- VMOVQ 6(R4), V10.W4 +- VMOVQ 7(R4), V11.W4 ++ VMOVQ 4(R4), V5.W4 ++ VMOVQ 8(R4), V6.W4 ++ VMOVQ 12(R4), V7.W4 ++ VMOVQ 16(R4), V8.W4 ++ VMOVQ 20(R4), V9.W4 ++ VMOVQ 24(R4), V10.W4 ++ VMOVQ 28(R4), V11.W4 + + // load counter and update counter + VMOVQ R6, V12.W4 +-- +2.43.7 + diff --git a/0048-cmd-compile-simplify-memory-load-and-store-operation.patch b/0048-cmd-compile-simplify-memory-load-and-store-operation.patch new file mode 100644 index 0000000..81b547c --- /dev/null +++ b/0048-cmd-compile-simplify-memory-load-and-store-operation.patch @@ -0,0 +1,212 @@ +From 194d0a623848c58eac90a625b9e3a18487b7183c Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Wed, 3 Sep 2025 09:41:08 +0800 +Subject: [PATCH 48/61] cmd/compile: simplify memory load and store operations + on loong64 + +If the memory load and store operations use the same ptr, they are +combined into a direct move operation between registers, like riscv64. + +Change-Id: I889e51a5146aee7f15340114bc4abd12eb6b8a1f +Reviewed-on: https://go-review.googlesource.com/c/go/+/700535 +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +LUCI-TryBot-Result: Go LUCI +Reviewed-by: abner chenc +Reviewed-by: Michael Pratt +Auto-Submit: Keith Randall +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 4 + + .../compile/internal/ssa/rewriteLOONG64.go | 119 ++++++++++++++++++ + 2 files changed, 123 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 1ed5c635ce..71c9dc76f8 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -471,6 +471,10 @@ + (MOVWUload [off] {sym} ptr (MOVFstore [off] {sym} ptr val _)) => (ZeroExt32to64 (MOVWfpgp val)) + (MOVFload [off] {sym} ptr (MOVWstore [off] {sym} ptr val _)) => (MOVWgpfp val) + ++// If the memory load and store operations use the same ptr, they are combined into a direct move operation between registers. ++(MOV(V|W|H|B)load [off] {sym} ptr (MOV(V|W|H|B)store [off] {sym} ptr x _)) => (MOV(V|W|H|B)reg x) ++(MOV(W|H|B)Uload [off] {sym} ptr (MOV(W|H|B)store [off] {sym} ptr x _)) => (MOV(W|H|B)Ureg x) ++ + // Similarly for stores, if we see a store after FPR <=> GPR move, then redirect store to use the other register set. + (MOVVstore [off] {sym} ptr (MOVVfpgp val) mem) => (MOVDstore [off] {sym} ptr val mem) + (MOVDstore [off] {sym} ptr (MOVVgpfp val) mem) => (MOVVstore [off] {sym} ptr val mem) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 740c2c2fd7..efd0f0ffa2 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -2242,6 +2242,23 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config ++ // match: (MOVBUload [off] {sym} ptr (MOVBstore [off] {sym} ptr x _)) ++ // result: (MOVBUreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVBstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVBUreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVBUload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVBUload [off1+int32(off2)] {sym} ptr mem) +@@ -2519,6 +2536,23 @@ func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config ++ // match: (MOVBload [off] {sym} ptr (MOVBstore [off] {sym} ptr x _)) ++ // result: (MOVBreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVBstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVBreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVBload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVBload [off1+int32(off2)] {sym} ptr mem) +@@ -3439,6 +3473,23 @@ func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config ++ // match: (MOVHUload [off] {sym} ptr (MOVHstore [off] {sym} ptr x _)) ++ // result: (MOVHUreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVHstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVHUreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVHUload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVHUload [off1+int32(off2)] {sym} ptr mem) +@@ -3678,6 +3729,23 @@ func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config ++ // match: (MOVHload [off] {sym} ptr (MOVHstore [off] {sym} ptr x _)) ++ // result: (MOVHreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVHstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVHreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVHload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVHload [off1+int32(off2)] {sym} ptr mem) +@@ -4121,6 +4189,23 @@ func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { + v.AddArg(val) + return true + } ++ // match: (MOVVload [off] {sym} ptr (MOVVstore [off] {sym} ptr x _)) ++ // result: (MOVVreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVVstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVVreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVVload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVVload [off1+int32(off2)] {sym} ptr mem) +@@ -4429,6 +4514,23 @@ func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { + v.AddArg(v0) + return true + } ++ // match: (MOVWUload [off] {sym} ptr (MOVWstore [off] {sym} ptr x _)) ++ // result: (MOVWUreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVWstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVWUreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVWUload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVWUload [off1+int32(off2)] {sym} ptr mem) +@@ -4701,6 +4803,23 @@ func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config ++ // match: (MOVWload [off] {sym} ptr (MOVWstore [off] {sym} ptr x _)) ++ // result: (MOVWreg x) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ ptr := v_0 ++ if v_1.Op != OpLOONG64MOVWstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym { ++ break ++ } ++ x := v_1.Args[1] ++ if ptr != v_1.Args[0] { ++ break ++ } ++ v.reset(OpLOONG64MOVWreg) ++ v.AddArg(x) ++ return true ++ } + // match: (MOVWload [off1] {sym} (ADDVconst [off2] ptr) mem) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) + // result: (MOVWload [off1+int32(off2)] {sym} ptr mem) +-- +2.43.7 + diff --git a/0049-cmd-internal-obj-loong64-add-ADDU16I.D-instruction-s.patch b/0049-cmd-internal-obj-loong64-add-ADDU16I.D-instruction-s.patch new file mode 100644 index 0000000..1784e9f --- /dev/null +++ b/0049-cmd-internal-obj-loong64-add-ADDU16I.D-instruction-s.patch @@ -0,0 +1,155 @@ +From f25da21da119e151a50a83538e74b135630b25dc Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 26 Aug 2025 15:40:57 +0800 +Subject: [PATCH 49/61] cmd/internal/obj/loong64: add ADDU16I.D instruction + support + +Go asm syntax: + ADDV16 $(1<<16), R4, R5 + +Equivalent platform assembler syntax: + addu16i.d r5, r4, $1 + +Change-Id: Ica4a4e779d0a107cda3eade86027abd6458779a4 +Reviewed-on: https://go-review.googlesource.com/c/go/+/699056 +Reviewed-by: abner chenc +Reviewed-by: Michael Pratt +Auto-Submit: Michael Pratt +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Cherry Mui +--- + src/cmd/asm/internal/asm/testdata/loong64enc1.s | 7 +++++++ + src/cmd/asm/internal/asm/testdata/loong64error.s | 2 ++ + src/cmd/internal/obj/loong64/a.out.go | 3 +++ + src/cmd/internal/obj/loong64/anames.go | 1 + + src/cmd/internal/obj/loong64/asm.go | 15 ++++++++++++++- + src/cmd/internal/obj/loong64/doc.go | 12 ++++++++++++ + 6 files changed, 39 insertions(+), 1 deletion(-) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index 2e96be9154..760175c3e7 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -282,6 +282,13 @@ lable2: + MOVVP 4(R5), R4 // a4040026 + MOVVP (R5), R4 // a4000026 + ++ // ADDU16I.D instruction ++ ADDV16 $(-32768<<16), R4, R5 // ADDV16 $-2147483648, R4, R5 // 85000012 ++ ADDV16 $(0<<16), R4, R5 // ADDV16 $0, R4, R5 // 85000010 ++ ADDV16 $(8<<16), R4, R5 // ADDV16 $524288, R4, R5 // 85200010 ++ ADDV16 $(32767<<16), R4, R5 // ADDV16 $2147418112, R4, R5 // 85fcff11 ++ ADDV16 $(16<<16), R4 // ADDV16 $1048576, R4 // 84400010 ++ + // Loong64 atomic memory access instructions + AMSWAPB R14, (R13), R12 // ac395c38 + AMSWAPH R14, (R13), R12 // acb95c38 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64error.s b/src/cmd/asm/internal/asm/testdata/loong64error.s +index 9272ce51c3..2dcd34bf61 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64error.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64error.s +@@ -5,3 +5,5 @@ + TEXT errors(SB),$0 + VSHUF4IV $16, V1, V2 // ERROR "operand out of range 0 to 15" + XVSHUF4IV $16, X1, X2 // ERROR "operand out of range 0 to 15" ++ ADDV16 $1, R4, R5 // ERROR "the constant must be a multiple of 65536." ++ ADDV16 $65535, R4, R5 // ERROR "the constant must be a multiple of 65536." +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index 0c2cd55fed..9cb62dd8e2 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -567,6 +567,9 @@ const ( + AMOVVF + AMOVVD + ++ // 2.2.1.2 ++ AADDV16 ++ + // 2.2.1.3 + AALSLW + AALSLWU +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index d99b843c90..d507612422 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -125,6 +125,7 @@ var Anames = []string{ + "MOVDV", + "MOVVF", + "MOVVD", ++ "ADDV16", + "ALSLW", + "ALSLWU", + "ALSLV", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 614eeba5b0..8b714b06e8 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -267,6 +267,9 @@ var optab = []Optab{ + {AADDV, C_U12CON, C_REG, C_NONE, C_REG, C_NONE, 10, 8, 0, 0}, + {AADDV, C_U12CON, C_NONE, C_NONE, C_REG, C_NONE, 10, 8, 0, 0}, + ++ {AADDV16, C_32CON, C_REG, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, ++ {AADDV16, C_32CON, C_NONE, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, ++ + {AAND, C_UU12CON, C_REG, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, + {AAND, C_UU12CON, C_NONE, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, + {AAND, C_S12CON, C_REG, C_NONE, C_REG, C_NONE, 10, 8, 0, 0}, +@@ -1526,6 +1529,7 @@ func buildop(ctxt *obj.Link) { + APRELD, + APRELDX, + AFSEL, ++ AADDV16, + obj.ANOP, + obj.ATEXT, + obj.AFUNCDATA, +@@ -2071,7 +2075,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + if r == 0 { + r = int(p.To.Reg) + } +- o1 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.To.Reg)) ++ if p.As == AADDV16 { ++ if v&65535 != 0 { ++ c.ctxt.Diag("%v: the constant must be a multiple of 65536.\n", p) ++ } ++ o1 = OP_16IRR(c.opirr(p.As), uint32(v>>16), uint32(r), uint32(p.To.Reg)) ++ } else { ++ o1 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.To.Reg)) ++ } + + case 5: // syscall + v := c.regoff(&p.From) +@@ -3970,6 +3981,8 @@ func (c *ctxt0) opirr(a obj.As) uint32 { + return 0x00b << 22 + case AADDVU: + return 0x00b << 22 ++ case AADDV16: ++ return 0x4 << 26 + + case AJMP: + return 0x14 << 26 +diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go +index 20c5a9e0a6..f7e5a4fb42 100644 +--- a/src/cmd/internal/obj/loong64/doc.go ++++ b/src/cmd/internal/obj/loong64/doc.go +@@ -326,6 +326,18 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate) + Go assembly | platform assembly + MOVWP 8(R4), R5 | ldptr.w r5, r4, $2 + ++6. Note of special add instrction ++ Mapping between Go and platform assembly: ++ Go assembly | platform assembly ++ ADDV16 si16<<16, Rj, Rd | addu16i.d rd, rj, si16 ++ ++ note: si16 is a 16-bit immediate number, and si16<<16 is the actual operand. ++ ++ The addu16i.d instruction logically left-shifts the 16-bit immediate number si16 by 16 bits, then ++ sign-extends it. The resulting data is added to the [63:0] bits of data in the general-purpose register ++ rj, and the sum is written into the general-purpose register rd. ++ The addu16i.d instruction is used in conjunction with the ldptr.w/d and stptr.w/d instructions to ++ accelerate access based on the GOT table in position-independent code. + */ + + package loong64 +-- +2.43.7 + diff --git a/0050-runtime-cgo-save-and-restore-R31-for-crosscall1-on-l.patch b/0050-runtime-cgo-save-and-restore-R31-for-crosscall1-on-l.patch new file mode 100644 index 0000000..742af34 --- /dev/null +++ b/0050-runtime-cgo-save-and-restore-R31-for-crosscall1-on-l.patch @@ -0,0 +1,88 @@ +From a111320119d1636a0dad71877b6ac385bec8c5e8 Mon Sep 17 00:00:00 2001 +From: Guoqi Chen +Date: Thu, 4 Sep 2025 17:02:01 +0800 +Subject: [PATCH 50/61] runtime/cgo: save and restore R31 for crosscall1 on + loong64 + +According to the Loong64 procedure call standard [1], R31 is a static +register and therefore needs to be saved and restored. + +Also, the R2 (thread pointer) register has been removed here, as it is +not involved in allocation. + +[1]: https://github.com/loongson/la-abi-specs/blob/release/lapcs.adoc + +Change-Id: I02e5d4bedf131e491f1a262aa3cbc0896cbc9488 +--- + src/runtime/cgo/gcc_loong64.S | 42 +++++++++++++++++------------------ + 1 file changed, 21 insertions(+), 21 deletions(-) + +diff --git a/src/runtime/cgo/gcc_loong64.S b/src/runtime/cgo/gcc_loong64.S +index fa2eddb819..d2b062f49f 100644 +--- a/src/runtime/cgo/gcc_loong64.S ++++ b/src/runtime/cgo/gcc_loong64.S +@@ -8,23 +8,23 @@ + * void crosscall1(void (*fn)(void), void (*setg_gcc)(void *g), void *g) + * + * Calling into the gc tool chain, where all registers are caller save. +- * Called from standard lp64 ABI, where $r1, $r3, $r23-$r30, and $f24-$f31 ++ * Called from standard lp64d ABI, where $r1, $r3, $r22-$r31, and $f24-$f31 + * are callee-save, so they must be saved explicitly, along with $r1 (LR). + */ + .globl crosscall1 + crosscall1: + addi.d $r3, $r3, -160 + st.d $r1, $r3, 0 +- st.d $r23, $r3, 8 +- st.d $r24, $r3, 16 +- st.d $r25, $r3, 24 +- st.d $r26, $r3, 32 +- st.d $r27, $r3, 40 +- st.d $r28, $r3, 48 +- st.d $r29, $r3, 56 +- st.d $r30, $r3, 64 +- st.d $r2, $r3, 72 +- st.d $r22, $r3, 80 ++ st.d $r22, $r3, 8 ++ st.d $r23, $r3, 16 ++ st.d $r24, $r3, 24 ++ st.d $r25, $r3, 32 ++ st.d $r26, $r3, 40 ++ st.d $r27, $r3, 48 ++ st.d $r28, $r3, 56 ++ st.d $r29, $r3, 64 ++ st.d $r30, $r3, 72 ++ st.d $r31, $r3, 80 + fst.d $f24, $r3, 88 + fst.d $f25, $r3, 96 + fst.d $f26, $r3, 104 +@@ -40,16 +40,16 @@ crosscall1: + jirl $r1, $r5, 0 // call setg_gcc (clobbers R4) + jirl $r1, $r23, 0 // call fn + +- ld.d $r23, $r3, 8 +- ld.d $r24, $r3, 16 +- ld.d $r25, $r3, 24 +- ld.d $r26, $r3, 32 +- ld.d $r27, $r3, 40 +- ld.d $r28, $r3, 48 +- ld.d $r29, $r3, 56 +- ld.d $r30, $r3, 64 +- ld.d $r2, $r3, 72 +- ld.d $r22, $r3, 80 ++ ld.d $r22, $r3, 8 ++ ld.d $r23, $r3, 16 ++ ld.d $r24, $r3, 24 ++ ld.d $r25, $r3, 32 ++ ld.d $r26, $r3, 40 ++ ld.d $r27, $r3, 48 ++ ld.d $r28, $r3, 56 ++ ld.d $r29, $r3, 64 ++ ld.d $r30, $r3, 72 ++ ld.d $r31, $r3, 80 + fld.d $f24, $r3, 88 + fld.d $f25, $r3, 96 + fld.d $f26, $r3, 104 +-- +2.43.7 + diff --git a/0051-cmd-compile-simplify-specific-addition-operations-us.patch b/0051-cmd-compile-simplify-specific-addition-operations-us.patch new file mode 100644 index 0000000..a72e000 --- /dev/null +++ b/0051-cmd-compile-simplify-specific-addition-operations-us.patch @@ -0,0 +1,154 @@ +From d7c7f1483ddea3ef1b6d932719ea97741ea8bf92 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Wed, 3 Sep 2025 15:43:21 +0800 +Subject: [PATCH 51/61] cmd/compile: simplify specific addition operations + using the ADDV16 instruction + +On loong64, the addi.d instruction can only directly handle 12-bit +immediate numbers. If a larger immediate number needs to be processed, +it must first be placed in a register, and then the add.d instruction +is used to complete the processing of the larger immediate number. +If a larger immediate number c satisfies is32Bit(c) && c&0xffff == 0, +then the ADDV16 instruction can be used to complete the addition operation. + +Removes 164 instructions from the go binary on loong64. + +Change-Id: I404de93cc4eaaa12fe424f5a0d61b03231215d1a +Reviewed-on: https://go-review.googlesource.com/c/go/+/700536 +Reviewed-by: Meidan Li +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +Auto-Submit: Michael Pratt +Reviewed-by: abner chenc +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Michael Pratt +--- + src/cmd/compile/internal/loong64/ssa.go | 1 + + src/cmd/compile/internal/ssa/_gen/LOONG64.rules | 1 + + src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go | 9 +++++---- + src/cmd/compile/internal/ssa/opGen.go | 15 +++++++++++++++ + src/cmd/compile/internal/ssa/rewriteLOONG64.go | 14 ++++++++++++++ + test/codegen/arithmetic.go | 5 +++++ + 6 files changed, 41 insertions(+), 4 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 7d96567fa9..9e24b63cd0 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -275,6 +275,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg() + case ssa.OpLOONG64ADDVconst, ++ ssa.OpLOONG64ADDV16const, + ssa.OpLOONG64SUBVconst, + ssa.OpLOONG64ANDconst, + ssa.OpLOONG64ORconst, +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 71c9dc76f8..50c34d45f2 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -834,6 +834,7 @@ + (SUBVconst [c] (SUBVconst [d] x)) && is32Bit(-c-d) => (ADDVconst [-c-d] x) + (SUBVconst [c] (ADDVconst [d] x)) && is32Bit(-c+d) => (ADDVconst [-c+d] x) + (SUBV (MOVVconst [c]) (NEGV (SUBVconst [d] x))) => (ADDVconst [c-d] x) ++(ADDVconst [c] x) && is32Bit(c) && c&0xffff == 0 && c != 0 => (ADDV16const [c] x) + (SLLVconst [c] (MOVVconst [d])) => (MOVVconst [d< (MOVVconst [int64(uint64(d)>>uint64(c))]) + (SRAVconst [c] (MOVVconst [d])) => (MOVVconst [d>>uint64(c)]) +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index b0fcb8a714..d58b24c1a6 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -192,10 +192,11 @@ func init() { + {name: "VPCNT16", argLength: 1, reg: fp11, asm: "VPCNTH"}, // count set bits for each 16-bit unit and store the result in each 16-bit unit + + // binary ops +- {name: "ADDV", argLength: 2, reg: gp21, asm: "ADDVU", commutative: true}, // arg0 + arg1 +- {name: "ADDVconst", argLength: 1, reg: gp11sp, asm: "ADDVU", aux: "Int64"}, // arg0 + auxInt. auxInt is 32-bit, also in other *const ops. +- {name: "SUBV", argLength: 2, reg: gp21, asm: "SUBVU"}, // arg0 - arg1 +- {name: "SUBVconst", argLength: 1, reg: gp11, asm: "SUBVU", aux: "Int64"}, // arg0 - auxInt ++ {name: "ADDV", argLength: 2, reg: gp21, asm: "ADDVU", commutative: true}, // arg0 + arg1 ++ {name: "ADDVconst", argLength: 1, reg: gp11sp, asm: "ADDVU", aux: "Int64"}, // arg0 + auxInt. auxInt is 32-bit, also in other *const ops. ++ {name: "ADDV16const", argLength: 1, reg: gp11sp, asm: "ADDV16", aux: "Int64"}, // arg0 + auxInt. auxInt is signed 32-bit and is a multiple of 65536, also in other *const ops. ++ {name: "SUBV", argLength: 2, reg: gp21, asm: "SUBVU"}, // arg0 - arg1 ++ {name: "SUBVconst", argLength: 1, reg: gp11, asm: "SUBVU", aux: "Int64"}, // arg0 - auxInt + + {name: "MULV", argLength: 2, reg: gp21, asm: "MULV", commutative: true, typ: "Int64"}, // arg0 * arg1 + {name: "MULHV", argLength: 2, reg: gp21, asm: "MULHV", commutative: true, typ: "Int64"}, // (arg0 * arg1) >> 64, signed +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index 01dca2d3e0..44750e7b09 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -1786,6 +1786,7 @@ const ( + OpLOONG64VPCNT16 + OpLOONG64ADDV + OpLOONG64ADDVconst ++ OpLOONG64ADDV16const + OpLOONG64SUBV + OpLOONG64SUBVconst + OpLOONG64MULV +@@ -24028,6 +24029,20 @@ var opcodeTable = [...]opInfo{ + }, + }, + }, ++ { ++ name: "ADDV16const", ++ auxType: auxInt64, ++ argLen: 1, ++ asm: loong64.AADDV16, ++ reg: regInfo{ ++ inputs: []inputInfo{ ++ {0, 1073741820}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ outputs: []outputInfo{ ++ {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 ++ }, ++ }, ++ }, + { + name: "SUBV", + argLen: 2, +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index efd0f0ffa2..93115d8d44 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -2001,6 +2001,20 @@ func rewriteValueLOONG64_OpLOONG64ADDVconst(v *Value) bool { + v.AddArg(x) + return true + } ++ // match: (ADDVconst [c] x) ++ // cond: is32Bit(c) && c&0xffff == 0 && c != 0 ++ // result: (ADDV16const [c] x) ++ for { ++ c := auxIntToInt64(v.AuxInt) ++ x := v_0 ++ if !(is32Bit(c) && c&0xffff == 0 && c != 0) { ++ break ++ } ++ v.reset(OpLOONG64ADDV16const) ++ v.AuxInt = int64ToAuxInt(c) ++ v.AddArg(x) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64AND(v *Value) bool { +diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go +index 67adb50fa5..f5fd7ef2aa 100644 +--- a/test/codegen/arithmetic.go ++++ b/test/codegen/arithmetic.go +@@ -51,6 +51,11 @@ func AddLargeConst(a uint64, out []uint64) { + out[9] = a - 32769 + } + ++func AddLargeConst2(a int, out []int) { ++ // loong64: -"ADDVU","ADDV16" ++ out[0] = a + 0x10000 ++} ++ + // ----------------- // + // Subtraction // + // ----------------- // +-- +2.43.7 + diff --git a/0052-cmd-compile-optimize-loads-from-readonly-globals-int.patch b/0052-cmd-compile-optimize-loads-from-readonly-globals-int.patch new file mode 100644 index 0000000..6faf027 --- /dev/null +++ b/0052-cmd-compile-optimize-loads-from-readonly-globals-int.patch @@ -0,0 +1,231 @@ +From 830211f33cb8e629ecf73cdbca64ebce1256ceb7 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Thu, 4 Sep 2025 19:13:23 +0800 +Subject: [PATCH 52/61] cmd/compile: optimize loads from readonly globals into + constants on loong64 + +Ref: CL 141118 +Update #26498 + +Change-Id: I9c4ad2bedc4d50bd273bbe9119a898d4fca95e45 +Reviewed-on: https://go-review.googlesource.com/c/go/+/700875 +Reviewed-by: abner chenc +Reviewed-by: Michael Pratt +Reviewed-by: Meidan Li +Auto-Submit: Michael Pratt +Reviewed-by: Cherry Mui +LUCI-TryBot-Result: Go LUCI +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 9 ++ + .../compile/internal/ssa/rewriteLOONG64.go | 91 +++++++++++++++++++ + test/codegen/strings.go | 6 ++ + 3 files changed, 106 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 50c34d45f2..75bcb23407 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -989,3 +989,12 @@ + && isInlinableMemmove(dst, src, sz, config) + && clobber(call) + => (Move [sz] dst src mem) ++ ++// fold readonly sym load ++(MOVBUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read8(sym, int64(off)))]) ++(MOVHUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read16(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++(MOVWUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read32(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++(MOVVload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read64(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++(MOVBload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int8(read8(sym, int64(off))))]) ++(MOVHload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int16(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))]) ++(MOVWload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))]) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 93115d8d44..cf8788a761 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -2335,6 +2335,19 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVBUload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(read8(sym, int64(off)))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(read8(sym, int64(off)))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVBUloadidx(v *Value) bool { +@@ -2629,6 +2642,19 @@ func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVBload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(int8(read8(sym, int64(off))))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(int8(read8(sym, int64(off))))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVBloadidx(v *Value) bool { +@@ -3566,6 +3592,19 @@ func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVHUload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(read16(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(read16(sym, int64(off), config.ctxt.Arch.ByteOrder))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVHUloadidx(v *Value) bool { +@@ -3822,6 +3861,19 @@ func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVHload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(int16(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(int16(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVHloadidx(v *Value) bool { +@@ -4282,6 +4334,19 @@ func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVVload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(read64(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(read64(sym, int64(off), config.ctxt.Arch.ByteOrder))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVVloadidx(v *Value) bool { +@@ -4607,6 +4672,19 @@ func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVWUload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(read32(sym, int64(off), config.ctxt.Arch.ByteOrder))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(read32(sym, int64(off), config.ctxt.Arch.ByteOrder))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVWUloadidx(v *Value) bool { +@@ -4896,6 +4974,19 @@ func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { + v.AddArg3(ptr, idx, mem) + return true + } ++ // match: (MOVWload [off] {sym} (SB) _) ++ // cond: symIsRO(sym) ++ // result: (MOVVconst [int64(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))]) ++ for { ++ off := auxIntToInt32(v.AuxInt) ++ sym := auxToSym(v.Aux) ++ if v_0.Op != OpSB || !(symIsRO(sym)) { ++ break ++ } ++ v.reset(OpLOONG64MOVVconst) ++ v.AuxInt = int64ToAuxInt(int64(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))) ++ return true ++ } + return false + } + func rewriteValueLOONG64_OpLOONG64MOVWloadidx(v *Value) bool { +diff --git a/test/codegen/strings.go b/test/codegen/strings.go +index 64dcf4c842..fbcef57cd1 100644 +--- a/test/codegen/strings.go ++++ b/test/codegen/strings.go +@@ -39,6 +39,7 @@ func ConstantLoad() { + // 386:`MOVW\t\$12592, \(`,`MOVB\t\$50, 2\(` + // arm:`MOVW\t\$48`,`MOVW\t\$49`,`MOVW\t\$50` + // arm64:`MOVD\t\$12592`,`MOVD\t\$50` ++ // loong64:`MOVV\t\$12592`,`MOVV\t\$50` + // wasm:`I64Const\t\$12592`,`I64Store16\t\$0`,`I64Const\t\$50`,`I64Store8\t\$2` + // mips64:`MOVV\t\$48`,`MOVV\t\$49`,`MOVV\t\$50` + bsink = []byte("012") +@@ -48,6 +49,7 @@ func ConstantLoad() { + // amd64:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(` + // 386:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(` + // arm64:`MOVD\t\$858927408`,`MOVD\t\$13620` ++ // loong64:`MOVV\t\$858927408`,`MOVV\t\$13620` + // wasm:`I64Const\t\$858927408`,`I64Store32\t\$0`,`I64Const\t\$13620`,`I64Store16\t\$4` + bsink = []byte("012345") + +@@ -56,19 +58,23 @@ func ConstantLoad() { + // amd64:`MOVQ\t\$3978425819141910832`,`MOVQ\t\$7306073769690871863` + // 386:`MOVL\t\$858927408, \(`,`DUFFCOPY` + // arm64:`MOVD\t\$3978425819141910832`,`MOVD\t\$7306073769690871863`,`MOVD\t\$15` ++ // loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$7306073769690871863`,`MOVV\t\$15` + // wasm:`I64Const\t\$3978425819141910832`,`I64Store\t\$0`,`I64Const\t\$7306073769690871863`,`I64Store\t\$7` + bsink = []byte("0123456789abcde") + + // 56 = 0x38 + // amd64:`MOVQ\t\$3978425819141910832`,`MOVB\t\$56` ++ // loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$56` + bsink = []byte("012345678") + + // 14648 = 0x3938 + // amd64:`MOVQ\t\$3978425819141910832`,`MOVW\t\$14648` ++ // loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$14648` + bsink = []byte("0123456789") + + // 1650538808 = 0x62613938 + // amd64:`MOVQ\t\$3978425819141910832`,`MOVL\t\$1650538808` ++ // loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$1650538808` + bsink = []byte("0123456789ab") + } + +-- +2.43.7 + diff --git a/0053-cmd-compile-fold-constant-in-ADDshift-op-on-loong64.patch b/0053-cmd-compile-fold-constant-in-ADDshift-op-on-loong64.patch new file mode 100644 index 0000000..40914d9 --- /dev/null +++ b/0053-cmd-compile-fold-constant-in-ADDshift-op-on-loong64.patch @@ -0,0 +1,93 @@ +From 5310b1227a1e9665e3c9078d8109b7186bfd6e0e Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Mon, 8 Sep 2025 18:00:52 +0800 +Subject: [PATCH 53/61] cmd/compile: fold constant in ADDshift op on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Removes 918 instructions from the go binary on loong64. + + file before after Δ + go 1633120 1632948 -172 + gofmt 323470 323334 -136 + asm 568024 568024 -0 + cgo 488030 487890 -140 + compile 2501050 2500728 -322 + cover 530124 530124 -0 + link 723532 723520 -12 + preprofile 240568 240568 -0 + vet 819392 819256 -136 + +Change-Id: Id4015c66b2073323b7ad257b3ed05bb99f81e9a1 +Reviewed-on: https://go-review.googlesource.com/c/go/+/701655 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +Auto-Submit: Keith Randall +Reviewed-by: Mark Freeman +--- + .../compile/internal/ssa/_gen/LOONG64.rules | 3 +++ + .../compile/internal/ssa/rewriteLOONG64.go | 25 +++++++++++++++++++ + 2 files changed, 28 insertions(+) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 75bcb23407..476f3d893b 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -770,6 +770,9 @@ + + (ADDV x0 x1:(SLLVconst [c] y)) && x1.Uses == 1 && c > 0 && c <= 4 => (ADDshiftLLV x0 y [c]) + ++// fold constant in ADDshift op ++(ADDshiftLLV x (MOVVconst [c]) [d]) && is12Bit(c< (ADDVconst x [c< x + (DIVVU x (MOVVconst [c])) && isPowerOfTwo(c) => (SRLVconst [log64(c)] x) +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index cf8788a761..7fef365958 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -324,6 +324,8 @@ func rewriteValueLOONG64(v *Value) bool { + return rewriteValueLOONG64_OpLOONG64ADDV(v) + case OpLOONG64ADDVconst: + return rewriteValueLOONG64_OpLOONG64ADDVconst(v) ++ case OpLOONG64ADDshiftLLV: ++ return rewriteValueLOONG64_OpLOONG64ADDshiftLLV(v) + case OpLOONG64AND: + return rewriteValueLOONG64_OpLOONG64AND(v) + case OpLOONG64ANDconst: +@@ -2017,6 +2019,29 @@ func rewriteValueLOONG64_OpLOONG64ADDVconst(v *Value) bool { + } + return false + } ++func rewriteValueLOONG64_OpLOONG64ADDshiftLLV(v *Value) bool { ++ v_1 := v.Args[1] ++ v_0 := v.Args[0] ++ // match: (ADDshiftLLV x (MOVVconst [c]) [d]) ++ // cond: is12Bit(c< +Date: Thu, 11 Sep 2025 16:30:38 +0800 +Subject: [PATCH 54/61] cmd/internal/obj/loong64: use the MOVVP instruction to + optimize prologue +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The MOVVP instruction has a larger offset range, and removes 928 +instructions from the go binary on loong64. + + file before after Δ + go 1634208 1634064 -144 + gofmt 323324 323240 -84 + asm 567870 567778 -92 + cgo 487694 487598 -96 + compile 2500266 2500142 -124 + cover 530590 530498 -92 + link 723804 723692 -112 + preprofile 240562 240474 -88 + vet 819672 819576 -96 + +Change-Id: Ib0efcb006d3ae3f2bceec0d6e88f3794d5e99831 +Reviewed-on: https://go-review.googlesource.com/c/go/+/702715 +Reviewed-by: abner chenc +Reviewed-by: Mark Freeman +Reviewed-by: Meidan Li +Reviewed-by: Michael Knyszek +LUCI-TryBot-Result: Go LUCI +--- + src/cmd/internal/obj/loong64/obj.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go +index f75e2d8716..7c4b4071b8 100644 +--- a/src/cmd/internal/obj/loong64/obj.go ++++ b/src/cmd/internal/obj/loong64/obj.go +@@ -366,7 +366,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { + q = c.ctxt.StartUnsafePoint(q, c.newprog) + + q = obj.Appendp(q, newprog) +- q.As = mov ++ q.As = AMOVVP + q.Pos = p.Pos + q.From.Type = obj.TYPE_REG + q.From.Reg = REGLINK +-- +2.43.7 + diff --git a/0055-cmd-compile-implement-jump-table-on-loong64.patch b/0055-cmd-compile-implement-jump-table-on-loong64.patch new file mode 100644 index 0000000..205b26f --- /dev/null +++ b/0055-cmd-compile-implement-jump-table-on-loong64.patch @@ -0,0 +1,236 @@ +From 76bc52b60d51b22665b5d2fba59a5be0e406a390 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Fri, 19 Sep 2025 11:18:13 +0800 +Subject: [PATCH 55/61] cmd/compile: implement jump table on loong64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Following CL 357330, use jump tables on Loong64. + +goos: linux +goarch: loong64 +pkg: cmd/compile/internal/test +cpu: Loongson-3A6000-HV @ 2500.00MHz + │ old │ new │ + │ sec/op │ sec/op vs base │ +Switch8Predictable 2.352n ± 0% 2.101n ± 0% -10.65% (p=0.000 n=10) +Switch8Unpredictable 11.99n ± 0% 10.25n ± 0% -14.51% (p=0.000 n=10) +Switch32Predictable 3.153n ± 0% 1.887n ± 1% -40.14% (p=0.000 n=10) +Switch32Unpredictable 12.47n ± 0% 10.22n ± 0% -18.00% (p=0.000 n=10) +SwitchStringPredictable 3.162n ± 0% 3.352n ± 0% +6.01% (p=0.000 n=10) +SwitchStringUnpredictable 14.70n ± 0% 13.31n ± 0% -9.46% (p=0.000 n=10) +SwitchTypePredictable 3.702n ± 0% 2.201n ± 0% -40.55% (p=0.000 n=10) +SwitchTypeUnpredictable 16.18n ± 0% 14.48n ± 0% -10.51% (p=0.000 n=10) +SwitchInterfaceTypePredictable 7.654n ± 0% 9.680n ± 0% +26.47% (p=0.000 n=10) +SwitchInterfaceTypeUnpredictable 22.04n ± 0% 22.44n ± 0% +1.81% (p=0.000 n=10) +geomean 7.441n 6.469n -13.07% + +Change-Id: Id6f30fa73349c60fac17670084daee56973a955f +Reviewed-on: https://go-review.googlesource.com/c/go/+/705396 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Junyang Shao +Reviewed-by: Michael Knyszek +Reviewed-by: abner chenc +--- + src/cmd/compile/internal/loong64/ssa.go | 23 ++++++++++++++ + .../compile/internal/ssa/_gen/LOONG64.rules | 2 ++ + .../compile/internal/ssa/_gen/LOONG64Ops.go | 6 ++++ + src/cmd/compile/internal/ssa/opGen.go | 30 ++++++++++--------- + .../compile/internal/ssa/rewriteLOONG64.go | 13 ++++++++ + src/cmd/internal/obj/loong64/asm.go | 9 ++++++ + src/cmd/internal/sys/arch.go | 1 + + test/codegen/switch.go | 2 ++ + 8 files changed, 72 insertions(+), 14 deletions(-) + +diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go +index 9e24b63cd0..35acfd0ccc 100644 +--- a/src/cmd/compile/internal/loong64/ssa.go ++++ b/src/cmd/compile/internal/loong64/ssa.go +@@ -1060,6 +1060,29 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) { + p.From.Reg = b.Controls[0].Reg() + } + } ++ case ssa.BlockLOONG64JUMPTABLE: ++ // ALSLV $3, Rarg0, Rarg1, REGTMP ++ // MOVV (REGTMP), REGTMP ++ // JMP (REGTMP) ++ p := s.Prog(loong64.AALSLV) ++ p.From.Type = obj.TYPE_CONST ++ p.From.Offset = 3 // idx*8 ++ p.Reg = b.Controls[0].Reg() ++ p.AddRestSourceReg(b.Controls[1].Reg()) ++ p.To.Type = obj.TYPE_REG ++ p.To.Reg = loong64.REGTMP ++ p1 := s.Prog(loong64.AMOVV) ++ p1.From.Type = obj.TYPE_MEM ++ p1.From.Reg = loong64.REGTMP ++ p1.From.Offset = 0 ++ p1.To.Type = obj.TYPE_REG ++ p1.To.Reg = loong64.REGTMP ++ p2 := s.Prog(obj.AJMP) ++ p2.To.Type = obj.TYPE_MEM ++ p2.To.Reg = loong64.REGTMP ++ // Save jump tables for later resolution of the target blocks. ++ s.JumpTables = append(s.JumpTables, b) ++ + default: + b.Fatalf("branch not implemented: %s", b.LongString()) + } +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +index 476f3d893b..1c89e55c33 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +@@ -546,6 +546,8 @@ + (MOVBUreg x:((SGT|SGTU) _ _)) => x + (MOVBUreg x:(XOR (MOVVconst [1]) ((SGT|SGTU) _ _))) => x + ++(JumpTable idx) => (JUMPTABLE {makeJumpTableSym(b)} idx (MOVVaddr {makeJumpTableSym(b)} (SB))) ++ + // Write barrier. + (WB ...) => (LoweredWB ...) + +diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +index d58b24c1a6..afa5533939 100644 +--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go ++++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +@@ -592,6 +592,12 @@ func init() { + {name: "BLT", controls: 2}, // controls[0] < controls[1] + {name: "BGEU", controls: 2}, // controls[0] >= controls[1], unsigned + {name: "BLTU", controls: 2}, // controls[0] < controls[1], unsigned ++ ++ // JUMPTABLE implements jump tables. ++ // Aux is the symbol (an *obj.LSym) for the jump table. ++ // control[0] is the index into the jump table. ++ // control[1] is the address of the jump table (the address of the symbol stored in Aux). ++ {name: "JUMPTABLE", controls: 2, aux: "Sym"}, + } + + archs = append(archs, arch{ +diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go +index 44750e7b09..89a4555df3 100644 +--- a/src/cmd/compile/internal/ssa/opGen.go ++++ b/src/cmd/compile/internal/ssa/opGen.go +@@ -108,6 +108,7 @@ const ( + BlockLOONG64BLT + BlockLOONG64BGEU + BlockLOONG64BLTU ++ BlockLOONG64JUMPTABLE + + BlockMIPSEQ + BlockMIPSNE +@@ -250,20 +251,21 @@ var blockString = [...]string{ + BlockARM64GEnoov: "GEnoov", + BlockARM64JUMPTABLE: "JUMPTABLE", + +- BlockLOONG64EQZ: "EQZ", +- BlockLOONG64NEZ: "NEZ", +- BlockLOONG64LTZ: "LTZ", +- BlockLOONG64LEZ: "LEZ", +- BlockLOONG64GTZ: "GTZ", +- BlockLOONG64GEZ: "GEZ", +- BlockLOONG64FPT: "FPT", +- BlockLOONG64FPF: "FPF", +- BlockLOONG64BEQ: "BEQ", +- BlockLOONG64BNE: "BNE", +- BlockLOONG64BGE: "BGE", +- BlockLOONG64BLT: "BLT", +- BlockLOONG64BGEU: "BGEU", +- BlockLOONG64BLTU: "BLTU", ++ BlockLOONG64EQZ: "EQZ", ++ BlockLOONG64NEZ: "NEZ", ++ BlockLOONG64LTZ: "LTZ", ++ BlockLOONG64LEZ: "LEZ", ++ BlockLOONG64GTZ: "GTZ", ++ BlockLOONG64GEZ: "GEZ", ++ BlockLOONG64FPT: "FPT", ++ BlockLOONG64FPF: "FPF", ++ BlockLOONG64BEQ: "BEQ", ++ BlockLOONG64BNE: "BNE", ++ BlockLOONG64BGE: "BGE", ++ BlockLOONG64BLT: "BLT", ++ BlockLOONG64BGEU: "BGEU", ++ BlockLOONG64BLTU: "BLTU", ++ BlockLOONG64JUMPTABLE: "JUMPTABLE", + + BlockMIPSEQ: "EQ", + BlockMIPSNE: "NE", +diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +index 7fef365958..5d4544fdf8 100644 +--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go ++++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go +@@ -12127,6 +12127,19 @@ func rewriteBlockLOONG64(b *Block) bool { + b.resetWithControl(BlockLOONG64NEZ, v0) + return true + } ++ case BlockJumpTable: ++ // match: (JumpTable idx) ++ // result: (JUMPTABLE {makeJumpTableSym(b)} idx (MOVVaddr {makeJumpTableSym(b)} (SB))) ++ for { ++ idx := b.Controls[0] ++ v0 := b.NewValue0(b.Pos, OpLOONG64MOVVaddr, typ.Uintptr) ++ v0.Aux = symToAux(makeJumpTableSym(b)) ++ v1 := b.NewValue0(b.Pos, OpSB, typ.Uintptr) ++ v0.AddArg(v1) ++ b.resetWithControl2(BlockLOONG64JUMPTABLE, idx, v0) ++ b.Aux = symToAux(makeJumpTableSym(b)) ++ return true ++ } + case BlockLOONG64LEZ: + // match: (LEZ (MOVVconst [c]) yes no) + // cond: c <= 0 +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 8b714b06e8..1de9690520 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -709,6 +709,15 @@ func span0(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { + // so instruction sequences that use REGTMP are unsafe to + // preempt asynchronously. + obj.MarkUnsafePoints(c.ctxt, c.cursym.Func().Text, c.newprog, c.isUnsafePoint, c.isRestartable) ++ ++ // Now that we know byte offsets, we can generate jump table entries. ++ for _, jt := range cursym.Func().JumpTables { ++ for i, p := range jt.Targets { ++ // The ith jumptable entry points to the p.Pc'th ++ // byte in the function symbol s. ++ jt.Sym.WriteAddr(ctxt, int64(i)*8, 8, cursym, p.Pc) ++ } ++ } + } + + // isUnsafePoint returns whether p is an unsafe point. +diff --git a/src/cmd/internal/sys/arch.go b/src/cmd/internal/sys/arch.go +index 484538f28f..3c92a6bbf2 100644 +--- a/src/cmd/internal/sys/arch.go ++++ b/src/cmd/internal/sys/arch.go +@@ -145,6 +145,7 @@ var ArchLoong64 = &Arch{ + MinLC: 4, + Alignment: 8, // Unaligned accesses are not guaranteed to be fast + CanMergeLoads: true, ++ CanJumpTable: true, + HasLR: true, + FixedFrameSize: 8, // LR + } +diff --git a/test/codegen/switch.go b/test/codegen/switch.go +index 509343110a..1a66a5ddf8 100644 +--- a/test/codegen/switch.go ++++ b/test/codegen/switch.go +@@ -25,6 +25,7 @@ func f(x string) int { + func square(x int) int { + // amd64:`JMP\s\(.*\)\(.*\)$` + // arm64:`MOVD\s\(R.*\)\(R.*<<3\)`,`JMP\s\(R.*\)$` ++ // loong64: `ALSLV`,`MOVV`,`JMP` + switch x { + case 1: + return 1 +@@ -51,6 +52,7 @@ func square(x int) int { + func length(x string) int { + // amd64:`JMP\s\(.*\)\(.*\)$` + // arm64:`MOVD\s\(R.*\)\(R.*<<3\)`,`JMP\s\(R.*\)$` ++ // loong64:`ALSLV`,`MOVV`,`JMP` + switch x { + case "a": + return 1 +-- +2.43.7 + diff --git a/0056-cmd-link-cmd-internal-obj-fix-a-remote-call-failure-.patch b/0056-cmd-link-cmd-internal-obj-fix-a-remote-call-failure-.patch new file mode 100644 index 0000000..3007031 --- /dev/null +++ b/0056-cmd-link-cmd-internal-obj-fix-a-remote-call-failure-.patch @@ -0,0 +1,63 @@ +From eb5d49664fca8a6ad7d6201df85f4fe8ee81f066 Mon Sep 17 00:00:00 2001 +From: limeidan +Date: Mon, 24 Nov 2025 17:28:42 +0800 +Subject: [PATCH 56/61] cmd/link, cmd/internal/obj: fix a remote call failure + issue + +When a function call exceeds the immediate value range of the instruction, +a trampoline is required to assist in the jump. Trampoline is only omitted +when plt is needed; otherwise, a check is required. + +Change-Id: I7fe2e08d75f6f574475837b560e650bbd4215858 +Reviewed-on: https://go-review.googlesource.com/c/go/+/724580 +Reviewed-by: abner chenc +LUCI-TryBot-Result: Go LUCI +Reviewed-by: sophie zhao +Reviewed-by: Cherry Mui +Reviewed-by: Dmitri Shuralyov +--- + src/cmd/internal/obj/loong64/asm.go | 3 +++ + src/cmd/link/internal/loong64/asm.go | 13 ++++++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 1de9690520..001af0cddc 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -2174,6 +2174,9 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + v := int32(0) + if p.To.Target() != nil { + v = int32(p.To.Target().Pc-p.Pc) >> 2 ++ if v < -1<<25 || v >= 1<<25 { ++ c.ctxt.Diag("branch too far \n%v", p) ++ } + } + o1 = OP_B_BL(c.opirr(p.As), uint32(v)) + if p.To.Sym != nil { +diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go +index 5f8b517569..e2f682b0d1 100644 +--- a/src/cmd/link/internal/loong64/asm.go ++++ b/src/cmd/link/internal/loong64/asm.go +@@ -885,11 +885,14 @@ func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri int, rs, s loader.Sym) { + relocs := ldr.Relocs(s) + r := relocs.At(ri) + switch r.Type() { +- case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_PLT_PCREL): +- // Nothing to do. +- // The plt symbol has not been added. If we add tramp +- // here, plt will not work. +- case objabi.R_CALLLOONG64: ++ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SOP_PUSH_PLT_PCREL), objabi.R_CALLLOONG64: ++ if ldr.SymType(rs) == sym.SDYNIMPORT { ++ // Nothing to do. ++ // The plt symbol has not been added. If we add tramp ++ // here, plt will not work. ++ return ++ } ++ + var t int64 + // ldr.SymValue(rs) == 0 indicates a cross-package jump to a function that is not yet + // laid out. Conservatively use a trampoline. This should be rare, as we lay out packages +-- +2.43.7 + diff --git a/0057-cmd-internal-obj-loong64-add-MULW.D.W-U-instructions.patch b/0057-cmd-internal-obj-loong64-add-MULW.D.W-U-instructions.patch new file mode 100644 index 0000000..dcc091f --- /dev/null +++ b/0057-cmd-internal-obj-loong64-add-MULW.D.W-U-instructions.patch @@ -0,0 +1,100 @@ +From 3451476f8d04eb62d4891ea24ba6a3d55d07f0b8 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 18 Nov 2025 10:55:19 +0800 +Subject: [PATCH 57/61] cmd/internal/obj/loong64: add MULW.D.W[U] instructions + +Go asm syntax: + MULWVW RK, RJ, RD + MULWVWU RK, RJ, RD + +Equivalent platform assembler syntax: + mulw.d.w rd, rj, rk + mulw.d.wu rd, rj, rk + +Change-Id: Ie46a21904a4c25d04200b0663f83072c38a76c6f +Reviewed-on: https://go-review.googlesource.com/c/go/+/721521 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: abner chenc +Reviewed-by: Meidan Li +Reviewed-by: Mark Freeman +Reviewed-by: Keith Randall +(cherry picked from commit e4eec28d23b175a449e067dd4c4a1937c622e29b) +--- + src/cmd/asm/internal/asm/testdata/loong64enc1.s | 6 ++++++ + src/cmd/internal/obj/loong64/a.out.go | 4 ++++ + src/cmd/internal/obj/loong64/anames.go | 2 ++ + src/cmd/internal/obj/loong64/asm.go | 6 ++++++ + 4 files changed, 18 insertions(+) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index 760175c3e7..cf7753e815 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -212,6 +212,12 @@ lable2: + SRLV $32, R4, R5 // 85804500 + SRLV $32, R4 // 84804500 + ++ // MULW.D.W[U] instructions ++ MULWVW R4, R5 // a5101f00 ++ MULWVW R4, R5, R6 // a6101f00 ++ MULWVWU R4, R5 // a5901f00 ++ MULWVWU R4, R5, R6 // a6901f00 ++ + MASKEQZ R4, R5, R6 // a6101300 + MASKNEZ R4, R5, R6 // a6901300 + +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index 9cb62dd8e2..b7ba128d5f 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -579,6 +579,10 @@ const ( + AORN + AANDN + ++ // 2.2.1.12 ++ AMULWVW ++ AMULWVWU ++ + // 2.2.7. Atomic Memory Access Instructions + AAMSWAPB + AAMSWAPH +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index d507612422..3b7158e9ff 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -131,6 +131,8 @@ var Anames = []string{ + "ALSLV", + "ORN", + "ANDN", ++ "MULWVW", ++ "MULWVWU", + "AMSWAPB", + "AMSWAPH", + "AMSWAPW", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 001af0cddc..e1d6c7632e 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -1468,6 +1468,8 @@ func buildop(ctxt *obj.Link) { + opset(AREMU, r0) + opset(ADIV, r0) + opset(ADIVU, r0) ++ opset(AMULWVW, r0) ++ opset(AMULWVWU, r0) + + case AMULV: + opset(AMULVU, r0) +@@ -3083,6 +3085,10 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + return 0x3c << 15 // mulh.d + case AMULHVU: + return 0x3d << 15 // mulhu.d ++ case AMULWVW: ++ return 0x3e << 15 // mulw.d.w ++ case AMULWVWU: ++ return 0x3f << 15 // mulw.d.wu + case ADIV: + return 0x40 << 15 // div.w + case ADIVU: +-- +2.43.7 + diff --git a/0058-cmd-internal-obj-loong64-optimize-duplicate-optab-en.patch b/0058-cmd-internal-obj-loong64-optimize-duplicate-optab-en.patch new file mode 100644 index 0000000..a984070 --- /dev/null +++ b/0058-cmd-internal-obj-loong64-optimize-duplicate-optab-en.patch @@ -0,0 +1,127 @@ +From 34d1a741d2e937df70f2f3354a44dd44795d6a6f Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 18 Nov 2025 17:36:24 +0800 +Subject: [PATCH 58/61] cmd/internal/obj/loong64: optimize duplicate optab + entries + +Change-Id: I28b79d178a2ed3d304f0e61613439813c4dcf79e +Reviewed-on: https://go-review.googlesource.com/c/go/+/721600 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: abner chenc +Reviewed-by: Junyang Shao +Reviewed-by: Mark Freeman +Reviewed-by: Meidan Li +(cherry picked from commit 457b80e300f9141251cfb57590192930cccc5757) +--- + src/cmd/internal/obj/loong64/asm.go | 53 ++++++++++++----------------- + 1 file changed, 22 insertions(+), 31 deletions(-) + +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index e1d6c7632e..44a9d1570a 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -63,26 +63,19 @@ var optab = []Optab{ + {AMOVWU, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 12, 4, 0, 0}, + + {ASUB, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {ASUBV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADD, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADDV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AAND, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASUB, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {ASUBV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADD, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADDV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AAND, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ANEGW, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {ANEGV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AMASKEQZ, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLLV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLLV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {AMUL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {AMUL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {AMULV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, +- {AMULV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADDF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 2, 4, 0, 0}, + {AADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 2, 4, 0, 0}, + {ACMPEQF, C_FREG, C_FREG, C_NONE, C_FCCREG, C_NONE, 2, 4, 0, 0}, +@@ -1460,26 +1453,6 @@ func buildop(ctxt *obj.Link) { + case AMOVWP: + opset(AMOVVP, r0) + +- case AMUL: +- opset(AMULU, r0) +- opset(AMULH, r0) +- opset(AMULHU, r0) +- opset(AREM, r0) +- opset(AREMU, r0) +- opset(ADIV, r0) +- opset(ADIVU, r0) +- opset(AMULWVW, r0) +- opset(AMULWVWU, r0) +- +- case AMULV: +- opset(AMULVU, r0) +- opset(AMULHV, r0) +- opset(AMULHVU, r0) +- opset(AREMV, r0) +- opset(AREMVU, r0) +- opset(ADIVV, r0) +- opset(ADIVVU, r0) +- + case ASLL: + opset(ASRL, r0) + opset(ASRA, r0) +@@ -1498,9 +1471,26 @@ func buildop(ctxt *obj.Link) { + case ASUB: + opset(ASUBU, r0) + opset(ANOR, r0) +- +- case ASUBV: ++ opset(ASUBV, r0) + opset(ASUBVU, r0) ++ opset(AMUL, r0) ++ opset(AMULU, r0) ++ opset(AMULH, r0) ++ opset(AMULHU, r0) ++ opset(AREM, r0) ++ opset(AREMU, r0) ++ opset(ADIV, r0) ++ opset(ADIVU, r0) ++ opset(AMULV, r0) ++ opset(AMULVU, r0) ++ opset(AMULHV, r0) ++ opset(AMULHVU, r0) ++ opset(AREMV, r0) ++ opset(AREMVU, r0) ++ opset(ADIVV, r0) ++ opset(ADIVVU, r0) ++ opset(AMULWVW, r0) ++ opset(AMULWVWU, r0) + + case ASYSCALL: + opset(ADBAR, r0) +@@ -1520,6 +1510,9 @@ func buildop(ctxt *obj.Link) { + opset(AALSLW, r0) + opset(AALSLWU, r0) + ++ case ANEGW: ++ opset(ANEGV, r0) ++ + case AMOVW, + AMOVD, + AMOVF, +@@ -1534,8 +1527,6 @@ func buildop(ctxt *obj.Link) { + ALLV, + ASC, + ASCV, +- ANEGW, +- ANEGV, + AWORD, + APRELD, + APRELDX, +-- +2.43.7 + diff --git a/0059-cmd-internal-obj-loong64-add-aliases-to-32-bit-arith.patch b/0059-cmd-internal-obj-loong64-add-aliases-to-32-bit-arith.patch new file mode 100644 index 0000000..0545ab3 --- /dev/null +++ b/0059-cmd-internal-obj-loong64-add-aliases-to-32-bit-arith.patch @@ -0,0 +1,262 @@ +From f81ee13fccaf76f66881eb71c6c04f2384c5f19f Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Tue, 18 Nov 2025 16:00:35 +0800 +Subject: [PATCH 59/61] cmd/internal/obj/loong64: add aliases to 32-bit + arithmetic instructions + +Both the MULW and MUL instructions point to the mul.w instruction +in the loong64 ISA. Previously, MULW was not encoded; now it is +encoded and used as an alias for MUL. +The same applies to the following instructions: ADD, SUB, DIV. +For consistency, we have added additional aliases for DIVU, REM and REMU. + +Change-Id: Iba201a3c4c2893ff7d301ef877fad9c81e54291b +(cherry picked from commit 8b5e9b538101291b6d29a0d4dfe0838b2f17520b) +--- + .../asm/internal/asm/testdata/loong64enc1.s | 16 +++++++++++++ + .../asm/internal/asm/testdata/loong64enc2.s | 4 ++++ + .../asm/internal/asm/testdata/loong64enc3.s | 4 ++++ + src/cmd/internal/obj/loong64/a.out.go | 3 +++ + src/cmd/internal/obj/loong64/anames.go | 3 +++ + src/cmd/internal/obj/loong64/asm.go | 23 ++++++++++++------- + 6 files changed, 45 insertions(+), 8 deletions(-) + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index cf7753e815..9bc2f075d2 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -33,13 +33,17 @@ lable2: + MOVV R4, R5 // 85001500 + MOVBU R4, R5 // 85fc4303 + SUB R4, R5, R6 // a6101100 ++ SUBW R4, R5, R6 // a6101100 + SUBV R4, R5, R6 // a6901100 + ADD R4, R5, R6 // a6101000 ++ ADDW R4, R5, R6 // a6101000 + ADDV R4, R5, R6 // a6901000 + AND R4, R5, R6 // a6901400 + SUB R4, R5 // a5101100 ++ SUBW R4, R5 // a5101100 + SUBV R4, R5 // a5901100 + ADD R4, R5 // a5101000 ++ ADDW R4, R5 // a5101000 + ADDV R4, R5 // a5901000 + AND R4, R5 // a5901400 + NEGW R4, R5 // 05101100 +@@ -115,6 +119,8 @@ lable2: + MOVV $1, R4 // 04048003 + ADD $-1, R4, R5 // 85fcbf02 + ADD $-1, R4 // 84fcbf02 ++ ADDW $-1, R4, R5 // 85fcbf02 ++ ADDW $-1, R4 // 84fcbf02 + ADDV $-1, R4, R5 // 85fcff02 + ADDV $-1, R4 // 84fcff02 + AND $1, R4, R5 // 85044003 +@@ -165,6 +171,8 @@ lable2: + // mul + MUL R4, R5 // a5101c00 + MUL R4, R5, R6 // a6101c00 ++ MULW R4, R5 // a5101c00 ++ MULW R4, R5, R6 // a6101c00 + MULV R4, R5 // a5901d00 + MULV R4, R5, R6 // a6901d00 + MULVU R4, R5 // a5901d00 +@@ -199,12 +207,20 @@ lable2: + MULHU R4, R5, R6 // a6101d00 + REM R4, R5 // a5902000 + REM R4, R5, R6 // a6902000 ++ REMW R4, R5 // a5902000 ++ REMW R4, R5, R6 // a6902000 + REMU R4, R5 // a5902100 + REMU R4, R5, R6 // a6902100 ++ REMWU R4, R5 // a5902100 ++ REMWU R4, R5, R6 // a6902100 + DIV R4, R5 // a5102000 + DIV R4, R5, R6 // a6102000 ++ DIVW R4, R5 // a5102000 ++ DIVW R4, R5, R6 // a6102000 + DIVU R4, R5 // a5102100 + DIVU R4, R5, R6 // a6102100 ++ DIVWU R4, R5 // a5102100 ++ DIVWU R4, R5, R6 // a6102100 + SRLV R4, R5 // a5101900 + SRLV R4, R5, R6 // a6101900 + SRLV $4, R4, R5 // 85104500 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc2.s b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +index 3c43b0dd3a..30cf7a842c 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc2.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +@@ -21,6 +21,10 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + ADD $4096, R4, R5 // 3e00001485781000 + ADD $65536, R4 // 1e02001484781000 + ADD $4096, R4 // 3e00001484781000 ++ ADDW $65536, R4, R5 // 1e02001485781000 ++ ADDW $4096, R4, R5 // 3e00001485781000 ++ ADDW $65536, R4 // 1e02001484781000 ++ ADDW $4096, R4 // 3e00001484781000 + ADDV $65536, R4, R5 // 1e02001485f81000 + ADDV $4096, R4, R5 // 3e00001485f81000 + ADDV $65536, R4 // 1e02001484f81000 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc3.s b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +index 2d83bd719a..51fa77598f 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc3.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +@@ -11,12 +11,16 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + MOVV $4096(R4), R5 // 3e000014de03800385f81000 + ADD $74565, R4 // 5e020014de178d0384781000 + ADD $4097, R4 // 3e000014de07800384781000 ++ ADDW $74565, R4 // 5e020014de178d0384781000 ++ ADDW $4097, R4 // 3e000014de07800384781000 + ADDV $74565, R4 // 5e020014de178d0384f81000 + ADDV $4097, R4 // 3e000014de07800384f81000 + AND $74565, R4 // 5e020014de178d0384f81400 + AND $4097, R4 // 3e000014de07800384f81400 + ADD $74565, R4, R5 // 5e020014de178d0385781000 + ADD $4097, R4, R5 // 3e000014de07800385781000 ++ ADDW $74565, R4, R5 // 5e020014de178d0385781000 ++ ADDW $4097, R4, R5 // 3e000014de07800385781000 + ADDV $74565, R4, R5 // 5e020014de178d0385f81000 + ADDV $4097, R4, R5 // 3e000014de07800385f81000 + AND $74565, R4, R5 // 5e020014de178d0385f81400 +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index b7ba128d5f..91e1a7a625 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -458,6 +458,7 @@ const ( + ADIVF + ADIVU + ADIVW ++ ADIVWU + + ALL + ALLV +@@ -498,7 +499,9 @@ const ( + ANOR + AOR + AREM ++ AREMW + AREMU ++ AREMWU + + ARFE + +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index 3b7158e9ff..e94d20223a 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -43,6 +43,7 @@ var Anames = []string{ + "DIVF", + "DIVU", + "DIVW", ++ "DIVWU", + "LL", + "LLV", + "LUI", +@@ -74,7 +75,9 @@ var Anames = []string{ + "NOR", + "OR", + "REM", ++ "REMW", + "REMU", ++ "REMWU", + "RFE", + "SC", + "SCV", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index 44a9d1570a..a60812e3bc 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -1389,6 +1389,7 @@ func buildop(ctxt *obj.Link) { + opset(AFTINTRNEVD, r0) + + case AADD: ++ opset(AADDW, r0) + opset(ASGT, r0) + opset(ASGTU, r0) + opset(AADDU, r0) +@@ -1469,18 +1470,24 @@ func buildop(ctxt *obj.Link) { + opset(ABSTRINSV, r0) + + case ASUB: ++ opset(ASUBW, r0) + opset(ASUBU, r0) + opset(ANOR, r0) + opset(ASUBV, r0) + opset(ASUBVU, r0) + opset(AMUL, r0) ++ opset(AMULW, r0) + opset(AMULU, r0) + opset(AMULH, r0) + opset(AMULHU, r0) + opset(AREM, r0) ++ opset(AREMW, r0) + opset(AREMU, r0) ++ opset(AREMWU, r0) + opset(ADIV, r0) ++ opset(ADIVW, r0) + opset(ADIVU, r0) ++ opset(ADIVWU, r0) + opset(AMULV, r0) + opset(AMULVU, r0) + opset(AMULHV, r0) +@@ -3007,7 +3014,7 @@ func (c *ctxt0) oprrrr(a obj.As) uint32 { + + func (c *ctxt0) oprrr(a obj.As) uint32 { + switch a { +- case AADD: ++ case AADD, AADDW: + return 0x20 << 15 + case AADDU: + return 0x20 << 15 +@@ -3029,7 +3036,7 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + return 0x2c << 15 // orn + case AANDN: + return 0x2d << 15 // andn +- case ASUB: ++ case ASUB, ASUBW: + return 0x22 << 15 + case ASUBU, ANEGW: + return 0x22 << 15 +@@ -3060,7 +3067,7 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + case ASUBVU, ANEGV: + return 0x23 << 15 + +- case AMUL: ++ case AMUL, AMULW: + return 0x38 << 15 // mul.w + case AMULU: + return 0x38 << 15 // mul.w +@@ -3080,17 +3087,17 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + return 0x3e << 15 // mulw.d.w + case AMULWVWU: + return 0x3f << 15 // mulw.d.wu +- case ADIV: ++ case ADIV, ADIVW: + return 0x40 << 15 // div.w +- case ADIVU: ++ case ADIVU, ADIVWU: + return 0x42 << 15 // div.wu + case ADIVV: + return 0x44 << 15 // div.d + case ADIVVU: + return 0x46 << 15 // div.du +- case AREM: ++ case AREM, AREMW: + return 0x41 << 15 // mod.w +- case AREMU: ++ case AREMU, AREMWU: + return 0x43 << 15 // mod.wu + case AREMV: + return 0x45 << 15 // mod.d +@@ -3964,7 +3971,7 @@ func (c *ctxt0) opir(a obj.As) uint32 { + + func (c *ctxt0) opirr(a obj.As) uint32 { + switch a { +- case AADD, AADDU: ++ case AADD, AADDW, AADDU: + return 0x00a << 22 + case ASGT: + return 0x008 << 22 +-- +2.43.7 + diff --git a/0060-cmd-internal-obj-loong64-remove-the-incorrect-unsign.patch b/0060-cmd-internal-obj-loong64-remove-the-incorrect-unsign.patch new file mode 100644 index 0000000..76821f7 --- /dev/null +++ b/0060-cmd-internal-obj-loong64-remove-the-incorrect-unsign.patch @@ -0,0 +1,258 @@ +From 0e14cb2808f5adcc223c51404d651c7ee3833eca Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Fri, 21 Nov 2025 17:22:05 +0800 +Subject: [PATCH 60/61] cmd/internal/obj/loong64: remove the incorrect unsigned + instructions + +The loong64 ISA does not support the 32-bit unsigned arithmetic +instructions ADDU, SUBU and MULU. + +Change-Id: Ifa67de9c59aa12d08844189ed23e6daad0cc11ea +Reviewed-on: https://go-review.googlesource.com/c/go/+/722760 +Reviewed-by: abner chenc +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Dmitri Shuralyov +Reviewed-by: Cherry Mui +--- + src/cmd/asm/internal/arch/loong64.go | 2 +- + .../asm/internal/asm/testdata/loong64enc1.s | 2 -- + .../asm/internal/asm/testdata/loong64enc2.s | 4 ---- + .../asm/internal/asm/testdata/loong64enc3.s | 4 ---- + src/cmd/internal/obj/loong64/a.out.go | 3 --- + src/cmd/internal/obj/loong64/anames.go | 3 --- + src/cmd/internal/obj/loong64/asm.go | 20 +++++-------------- + src/cmd/internal/obj/loong64/obj.go | 7 ------- + 8 files changed, 6 insertions(+), 39 deletions(-) + +diff --git a/src/cmd/asm/internal/arch/loong64.go b/src/cmd/asm/internal/arch/loong64.go +index bf5175f4a0..69e32ded21 100644 +--- a/src/cmd/asm/internal/arch/loong64.go ++++ b/src/cmd/asm/internal/arch/loong64.go +@@ -27,7 +27,7 @@ func jumpLoong64(word string) bool { + // one of the MUL/DIV/REM instructions that require special handling. + func IsLoong64MUL(op obj.As) bool { + switch op { +- case loong64.AMUL, loong64.AMULU, loong64.AMULV, loong64.AMULVU, ++ case loong64.AMUL, loong64.AMULV, loong64.AMULVU, + loong64.ADIV, loong64.ADIVU, loong64.ADIVV, loong64.ADIVVU, + loong64.AREM, loong64.AREMU, loong64.AREMV, loong64.AREMVU: + return true +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index 9bc2f075d2..a7c4e2f6f1 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -199,8 +199,6 @@ lable2: + MOVHU R4, 1(R5) // a4044029 + MOVHU y+8(FP), R4 // 6440402a + MOVHU 1(R5), R4 // a404402a +- MULU R4, R5 // a5101c00 +- MULU R4, R5, R6 // a6101c00 + MULH R4, R5 // a5901c00 + MULH R4, R5, R6 // a6901c00 + MULHU R4, R5 // a5101d00 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc2.s b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +index 30cf7a842c..50d4ba2479 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc2.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc2.s +@@ -41,10 +41,6 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + SGTU $4096, R4, R5 // 3e00001485f81200 + SGTU $65536, R4 // 1e02001484f81200 + SGTU $4096, R4 // 3e00001484f81200 +- ADDU $65536, R4, R5 // 1e02001485781000 +- ADDU $4096, R4, R5 // 3e00001485781000 +- ADDU $65536, R4 // 1e02001484781000 +- ADDU $4096, R4 // 3e00001484781000 + ADDVU $65536, R4, R5 // 1e02001485f81000 + ADDVU $4096, R4, R5 // 3e00001485f81000 + ADDVU $65536, R4 // 1e02001484f81000 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc3.s b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +index 51fa77598f..23374ac828 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc3.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +@@ -109,10 +109,6 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + SGTU $74565, R4, R5 // 5e020014de178d0385f81200 + SGTU $4097, R4 // 3e000014de07800384f81200 + SGTU $4097, R4, R5 // 3e000014de07800385f81200 +- ADDU $74565, R4 // 5e020014de178d0384781000 +- ADDU $74565, R4, R5 // 5e020014de178d0385781000 +- ADDU $4097, R4 // 3e000014de07800384781000 +- ADDU $4097, R4, R5 // 3e000014de07800385781000 + ADDVU $4097, R4 // 3e000014de07800384f81000 + ADDVU $4097, R4, R5 // 3e000014de07800385f81000 + ADDVU $74565, R4 // 5e020014de178d0384f81000 +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index 91e1a7a625..d16088a57a 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -419,7 +419,6 @@ const ( + AADD + AADDD + AADDF +- AADDU + + AADDW + AAND +@@ -485,7 +484,6 @@ const ( + AMUL + AMULD + AMULF +- AMULU + AMULH + AMULHU + AMULW +@@ -521,7 +519,6 @@ const ( + ASUBD + ASUBF + +- ASUBU + ASUBW + ADBAR + ASYSCALL +diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go +index e94d20223a..3ace1f1373 100644 +--- a/src/cmd/internal/obj/loong64/anames.go ++++ b/src/cmd/internal/obj/loong64/anames.go +@@ -10,7 +10,6 @@ var Anames = []string{ + "ADD", + "ADDD", + "ADDF", +- "ADDU", + "ADDW", + "AND", + "BEQ", +@@ -63,7 +62,6 @@ var Anames = []string{ + "MUL", + "MULD", + "MULF", +- "MULU", + "MULH", + "MULHU", + "MULW", +@@ -92,7 +90,6 @@ var Anames = []string{ + "SUB", + "SUBD", + "SUBF", +- "SUBU", + "SUBW", + "DBAR", + "SYSCALL", +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index a60812e3bc..a4675de23a 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -1392,7 +1392,6 @@ func buildop(ctxt *obj.Link) { + opset(AADDW, r0) + opset(ASGT, r0) + opset(ASGTU, r0) +- opset(AADDU, r0) + + case AADDV: + opset(AADDVU, r0) +@@ -1471,13 +1470,11 @@ func buildop(ctxt *obj.Link) { + + case ASUB: + opset(ASUBW, r0) +- opset(ASUBU, r0) + opset(ANOR, r0) + opset(ASUBV, r0) + opset(ASUBVU, r0) + opset(AMUL, r0) + opset(AMULW, r0) +- opset(AMULU, r0) + opset(AMULH, r0) + opset(AMULHU, r0) + opset(AREM, r0) +@@ -2036,8 +2033,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 := uint32(0) + o5 := uint32(0) + +- add := AADDU +- add = AADDVU ++ add := AADDVU + + switch o.type_ { + default: +@@ -2161,7 +2157,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + v := c.regoff(&p.From) + a := AOR + if v < 0 { +- a = AADDU ++ a = AADD + } + o1 = OP_12IRR(c.opirr(a), uint32(v), uint32(0), uint32(REGTMP)) + r := int(p.Reg) +@@ -2423,7 +2419,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + + case 34: // mov $con,fr + v := c.regoff(&p.From) +- a := AADDU ++ a := AADD + if v > 0 { + a = AOR + } +@@ -3016,8 +3012,6 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + switch a { + case AADD, AADDW: + return 0x20 << 15 +- case AADDU: +- return 0x20 << 15 + case ASGT: + return 0x24 << 15 // SLT + case ASGTU: +@@ -3036,9 +3030,7 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + return 0x2c << 15 // orn + case AANDN: + return 0x2d << 15 // andn +- case ASUB, ASUBW: +- return 0x22 << 15 +- case ASUBU, ANEGW: ++ case ASUB, ASUBW, ANEGW: + return 0x22 << 15 + case ANOR: + return 0x28 << 15 +@@ -3069,8 +3061,6 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { + + case AMUL, AMULW: + return 0x38 << 15 // mul.w +- case AMULU: +- return 0x38 << 15 // mul.w + case AMULH: + return 0x39 << 15 // mulh.w + case AMULHU: +@@ -3971,7 +3961,7 @@ func (c *ctxt0) opir(a obj.As) uint32 { + + func (c *ctxt0) opirr(a obj.As) uint32 { + switch a { +- case AADD, AADDW, AADDU: ++ case AADD, AADDW: + return 0x00a << 22 + case ASGT: + return 0x008 << 22 +diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go +index 7c4b4071b8..fc63483344 100644 +--- a/src/cmd/internal/obj/loong64/obj.go ++++ b/src/cmd/internal/obj/loong64/obj.go +@@ -68,12 +68,6 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { + p.As = AADD + } + +- case ASUBU: +- if p.From.Type == obj.TYPE_CONST { +- p.From.Offset = -p.From.Offset +- p.As = AADDU +- } +- + case ASUBV: + if p.From.Type == obj.TYPE_CONST { + p.From.Offset = -p.From.Offset +@@ -579,7 +573,6 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { + q.Link = q1 + + case AADD, +- AADDU, + AADDV, + AADDVU: + if p.To.Type == obj.TYPE_REG && p.To.Reg == REGSP && p.From.Type == obj.TYPE_CONST { +-- +2.43.7 + diff --git a/0061-cmd-internal-obj-cmd-asm-reclassify-the-offset-of-me.patch b/0061-cmd-internal-obj-cmd-asm-reclassify-the-offset-of-me.patch new file mode 100644 index 0000000..b1e8184 --- /dev/null +++ b/0061-cmd-internal-obj-cmd-asm-reclassify-the-offset-of-me.patch @@ -0,0 +1,581 @@ +From 755edc76a75fb9be81c22dea832a0c1c48582ff4 Mon Sep 17 00:00:00 2001 +From: Xiaolin Zhao +Date: Wed, 24 Sep 2025 17:21:40 +0800 +Subject: [PATCH 61/61] cmd/internal/obj, cmd/asm: reclassify the offset of + memory access operations on loong64 + +This CL also fixes the encoding error of LL/SC[V] instruction and +adds the handling of offset greater than 16 bits in MOV{W/V}P instructions. + +Change-Id: I7a8fab4b68a6839da81c5e59af1f42289d00ef61 +Reviewed-on: https://go-review.googlesource.com/c/go/+/706435 +Reviewed-by: David Chase +Reviewed-by: Meidan Li +LUCI-TryBot-Result: Go LUCI +Reviewed-by: abner chenc +Reviewed-by: Michael Knyszek +(cherry picked from commit 753ab5543e6126cefeaeedfc0eba74b6b24a46dd) +--- + src/cmd/asm/internal/asm/endtoend_test.go | 1 + + .../asm/internal/asm/testdata/loong64enc1.s | 12 +- + .../asm/internal/asm/testdata/loong64enc3.s | 21 +- + .../asm/internal/asm/testdata/loong64enc6.s | 12 ++ + .../asm/internal/asm/testdata/loong64error.s | 5 + + src/cmd/internal/obj/loong64/a.out.go | 22 +- + src/cmd/internal/obj/loong64/asm.go | 202 ++++++++++++------ + 7 files changed, 195 insertions(+), 80 deletions(-) + create mode 100644 src/cmd/asm/internal/asm/testdata/loong64enc6.s + +diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go +index afaf02815f..9571afc326 100644 +--- a/src/cmd/asm/internal/asm/endtoend_test.go ++++ b/src/cmd/asm/internal/asm/endtoend_test.go +@@ -467,6 +467,7 @@ func TestLOONG64Encoder(t *testing.T) { + testEndToEnd(t, "loong64", "loong64enc3") + testEndToEnd(t, "loong64", "loong64enc4") + testEndToEnd(t, "loong64", "loong64enc5") ++ testEndToEnd(t, "loong64", "loong64enc6") + testEndToEnd(t, "loong64", "loong64") + } + +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +index a7c4e2f6f1..5a8c57fb51 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s +@@ -97,8 +97,8 @@ lable2: + MOVV R4, 1(R5) // a404c029 + MOVB R4, 1(R5) // a4040029 + MOVBU R4, 1(R5) // a4040029 +- SC R4, 1(R5) // a4040021 +- SCV R4, 1(R5) // a4040023 ++ SC R4, 4096(R5) // a4001021 ++ SCV R4, 4096(R5) // a4001023 + MOVW y+8(FP), R4 // 64408028 + MOVWU y+8(FP), R4 // 6440802a + MOVV y+8(FP), R4 // 6440c028 +@@ -109,8 +109,8 @@ lable2: + MOVV 1(R5), R4 // a404c028 + MOVB 1(R5), R4 // a4040028 + MOVBU 1(R5), R4 // a404002a +- LL 1(R5), R4 // a4040020 +- LLV 1(R5), R4 // a4040022 ++ LL 4096(R5), R4 // a4001020 ++ LLV 4096(R5), R4 // a4001022 + MOVW $4(R4), R5 // 8510c002 + MOVV $4(R4), R5 // 8510c002 + MOVW $-1, R4 // 04fcff02 +@@ -281,22 +281,18 @@ lable2: + MOVV R4, FCC0 // 80d81401 + + // LDPTR.{W/D} and STPTR.{W/D} instructions +- MOVWP R5, -32768(R4) // 85008025 + MOVWP R5, 32764(R4) // 85fc7f25 + MOVWP R5, 32(R4) // 85200025 + MOVWP R5, 4(R4) // 85040025 + MOVWP R5, (R4) // 85000025 +- MOVVP R5, -32768(R4) // 85008027 + MOVVP R5, 32764(R4) // 85fc7f27 + MOVVP R5, 32(R4) // 85200027 + MOVVP R5, 4(R4) // 85040027 + MOVVP R5, (R4) // 85000027 +- MOVWP -32768(R5), R4 // a4008024 + MOVWP 32764(R5), R4 // a4fc7f24 + MOVWP 32(R5), R4 // a4200024 + MOVWP 4(R5), R4 // a4040024 + MOVWP (R5), R4 // a4000024 +- MOVVP -32768(R5), R4 // a4008026 + MOVVP 32764(R5), R4 // a4fc7f26 + MOVVP 32(R5), R4 // a4200026 + MOVVP 4(R5), R4 // a4040026 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc3.s b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +index 23374ac828..8b5f96bf4a 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64enc3.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc3.s +@@ -46,8 +46,10 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + MOVB R4, 4096(R5) // 3e000014de971000c4030029 + MOVBU R4, 65536(R5) // 1e020014de971000c4030029 + MOVBU R4, 4096(R5) // 3e000014de971000c4030029 +- SC R4, 65536(R5) // 1e020014de971000c4030021 +- SC R4, 4096(R5) // 3e000014de971000c4030021 ++ SC R4, 65536(R5) // 1e040010de971000c4030021 ++ SCV R4, 65536(R5) // 1e040010de971000c4030023 ++ LL 65536(R5), R4 // 1e040010de971000c4030020 ++ LLV 65536(R5), R4 // 1e040010de971000c4030022 + MOVW y+65540(FP), R4 // 1e020014de8f1000c4338028 + MOVWU y+65540(FP), R4 // 1e020014de8f1000c433802a + MOVV y+65540(FP), R4 // 1e020014de8f1000c433c028 +@@ -122,6 +124,21 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 + XOR $4097, R4 // 3e000014de07800384f81500 + XOR $4097, R4, R5 // 3e000014de07800385f81500 + ++ MOVWP R5, -32768(R4) // 1efcff13de931000c5038025 ++ MOVWP R5, 32768(R4) // 1e000010de931000c5038025 ++ MOVWP R5, 65536(R4) // 1e040010de931000c5030025 ++ MOVWP R5, 1048576(R4) // 1e400010de931000c5030025 ++ MOVVP R5, -32768(R4) // 1efcff13de931000c5038027 ++ MOVVP R5, 65536(R4) // 1e040010de931000c5030027 ++ MOVVP R5, 1048576(R4) // 1e400010de931000c5030027 ++ MOVWP -32768(R5), R4 // 1efcff13de971000c4038024 ++ MOVWP 2229248(R5), R4 // 1e880010de971000c4030424 ++ MOVWP -2145518592(R5), R4 // 1e740012de971000c403fc24 ++ MOVVP -32768(R5), R4 // 1efcff13de971000c4038026 ++ MOVVP 2229248(R5), R4 // 1e880010de971000c4030426 ++ MOVVP -2145518592(R5), R4 // 1e740012de971000c403fc26 ++ ++ + // MOVV C_DCON32_12S, r + MOVV $0x27312345fffff800, R4 // MOVV $2824077224892692480, R4 // 0400a002a468241684cc0903 + MOVV $0xf7312345fffff800, R4 // MOVV $-634687288927848448, R4 // 0400a002a468241684cc3d03 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc6.s b/src/cmd/asm/internal/asm/testdata/loong64enc6.s +new file mode 100644 +index 0000000000..bd19ea7601 +--- /dev/null ++++ b/src/cmd/asm/internal/asm/testdata/loong64enc6.s +@@ -0,0 +1,12 @@ ++// Copyright 2025 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++#include "../../../../../runtime/textflag.h" ++ ++TEXT asmtest(SB),DUPOK|NOSPLIT,$0 ++ // MOVWP LOREG_64(Rx), Ry ++ MOVWP 81985529216486896(R4), R5 // 9e571315dec3b703feac6816de4b000384f8100085000025 ++ MOVWP -81985529216486896(R4), R5 // 7ea8ec14de4388031e539717deb73f0384f8100085000025 ++ MOVWP R4, 81985529216486896(R5) // 9e571315dec3b703feac6816de4b0003a5f81000a4000025 ++ MOVWP R4, -81985529216486896(R5) // 7ea8ec14de4388031e539717deb73f03a5f81000a4000025 +diff --git a/src/cmd/asm/internal/asm/testdata/loong64error.s b/src/cmd/asm/internal/asm/testdata/loong64error.s +index 2dcd34bf61..1bc0ddea55 100644 +--- a/src/cmd/asm/internal/asm/testdata/loong64error.s ++++ b/src/cmd/asm/internal/asm/testdata/loong64error.s +@@ -7,3 +7,8 @@ TEXT errors(SB),$0 + XVSHUF4IV $16, X1, X2 // ERROR "operand out of range 0 to 15" + ADDV16 $1, R4, R5 // ERROR "the constant must be a multiple of 65536." + ADDV16 $65535, R4, R5 // ERROR "the constant must be a multiple of 65536." ++ SC R4, 1(R5) // ERROR "offset must be a multiple of 4." ++ SCV R4, 1(R5) // ERROR "offset must be a multiple of 4." ++ LL 1(R5), R4 // ERROR "offset must be a multiple of 4." ++ LLV 1(R5), R4 // ERROR "offset must be a multiple of 4." ++ +diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go +index d16088a57a..c490c2188b 100644 +--- a/src/cmd/internal/obj/loong64/a.out.go ++++ b/src/cmd/internal/obj/loong64/a.out.go +@@ -251,7 +251,13 @@ func init() { + } + + const ( +- BIG = 2046 ++ BIG_8 = 128 - 2 // FIXME (not sure if -2 is appropriate) ++ BIG_9 = 256 - 2 ++ BIG_10 = 512 - 2 ++ BIG_11 = 1024 - 2 ++ BIG_12 = 2046 ++ BIG_16 = 32768 - 2 ++ BIG_32 = 2147483648 - 2 + ) + + const ( +@@ -399,10 +405,16 @@ const ( + C_BRAN + C_SAUTO + C_LAUTO +- C_ZOREG +- C_SOREG +- C_LOREG +- C_ROFF // register offset ++ C_ZOREG // An $0+reg memory op ++ C_SOREG_8 // An $n+reg memory arg where n is a 8 bit signed offset ++ C_SOREG_9 // An $n+reg memory arg where n is a 9 bit signed offset ++ C_SOREG_10 // An $n+reg memory arg where n is a 10 bit signed offset ++ C_SOREG_11 // An $n+reg memory arg where n is a 11 bit signed offset ++ C_SOREG_12 // An $n+reg memory arg where n is a 12 bit signed offset ++ C_SOREG_16 // An $n+reg memory arg where n is a 16 bit signed offset ++ C_LOREG_32 // An $n+reg memory arg where n is a 32 bit signed offset ++ C_LOREG_64 // An $n+reg memory arg where n is a 64 bit signed offset ++ C_ROFF // register offset + C_ADDR + C_TLS_LE + C_TLS_IE +diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go +index a4675de23a..5108110efa 100644 +--- a/src/cmd/internal/obj/loong64/asm.go ++++ b/src/cmd/internal/obj/loong64/asm.go +@@ -155,46 +155,41 @@ var optab = []Optab{ + {AMOVV, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, + {AMOVB, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, + {AMOVBU, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, +- {AMOVW, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AMOVWU, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AMOVV, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AMOVB, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AMOVBU, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AVMOVQ, C_VREG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {AXVMOVQ, C_XREG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, ++ {AMOVW, C_REG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AMOVWU, C_REG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AMOVV, C_REG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AMOVB, C_REG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AMOVBU, C_REG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AVMOVQ, C_VREG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, ++ {AXVMOVQ, C_XREG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 7, 4, REGZERO, 0}, + {AVMOVQ, C_VREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGZERO, 0}, + {AXVMOVQ, C_XREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGZERO, 0}, +- {ASC, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, +- {ASCV, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, + + {AMOVW, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, + {AMOVWU, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, + {AMOVV, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, + {AMOVB, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, + {AMOVBU, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, +- {AMOVW, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {AMOVWU, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {AMOVV, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {AMOVB, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {AMOVBU, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {AVMOVQ, C_SOREG, C_NONE, C_NONE, C_VREG, C_NONE, 8, 4, REGZERO, 0}, +- {AXVMOVQ, C_SOREG, C_NONE, C_NONE, C_XREG, C_NONE, 8, 4, REGZERO, 0}, ++ {AMOVW, C_SOREG_12, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, ++ {AMOVWU, C_SOREG_12, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, ++ {AMOVV, C_SOREG_12, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, ++ {AMOVB, C_SOREG_12, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, ++ {AMOVBU, C_SOREG_12, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, ++ {AVMOVQ, C_SOREG_12, C_NONE, C_NONE, C_VREG, C_NONE, 8, 4, REGZERO, 0}, ++ {AXVMOVQ, C_SOREG_12, C_NONE, C_NONE, C_XREG, C_NONE, 8, 4, REGZERO, 0}, + {AVMOVQ, C_SAUTO, C_NONE, C_NONE, C_VREG, C_NONE, 8, 4, REGZERO, 0}, + {AXVMOVQ, C_SAUTO, C_NONE, C_NONE, C_XREG, C_NONE, 8, 4, REGZERO, 0}, +- {ALL, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, +- {ALLV, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, + + {AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, + {AMOVWU, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, + {AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, + {AMOVBU, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, +- {AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, +- {AMOVWU, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, +- {AMOVV, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, +- {AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, +- {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, +- {ASC, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, ++ {AMOVW, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 35, 12, REGZERO, 0}, ++ {AMOVWU, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 35, 12, REGZERO, 0}, ++ {AMOVV, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 35, 12, REGZERO, 0}, ++ {AMOVB, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 35, 12, REGZERO, 0}, ++ {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 35, 12, REGZERO, 0}, + {AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, + {AMOVWU, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, +@@ -205,19 +200,20 @@ var optab = []Optab{ + {AMOVV, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, + {AMOVB, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, + {AMOVBU, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, +- {AMOVWP, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 73, 4, 0, 0}, +- {AMOVWP, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 73, 4, 0, 0}, ++ {AMOVWP, C_REG, C_NONE, C_NONE, C_SOREG_16, C_NONE, 73, 4, 0, 0}, ++ {AMOVWP, C_REG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 73, 12, 0, 0}, ++ {AMOVWP, C_REG, C_NONE, C_NONE, C_LOREG_64, C_NONE, 73, 24, 0, 0}, + + {AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, + {AMOVWU, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, + {AMOVV, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, + {AMOVB, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, + {AMOVBU, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, +- {AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, +- {AMOVWU, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, +- {AMOVV, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, +- {AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, +- {AMOVBU, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, ++ {AMOVW, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, ++ {AMOVWU, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, ++ {AMOVV, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, ++ {AMOVB, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, ++ {AMOVBU, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, + {AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, + {AMOVWU, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, + {AMOVV, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, +@@ -228,8 +224,9 @@ var optab = []Optab{ + {AMOVV, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, + {AMOVB, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, + {AMOVBU, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, +- {AMOVWP, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 74, 4, 0, 0}, +- {AMOVWP, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 74, 4, 0, 0}, ++ {AMOVWP, C_SOREG_16, C_NONE, C_NONE, C_REG, C_NONE, 74, 4, 0, 0}, ++ {AMOVWP, C_LOREG_32, C_NONE, C_NONE, C_REG, C_NONE, 74, 12, 0, 0}, ++ {AMOVWP, C_LOREG_64, C_NONE, C_NONE, C_REG, C_NONE, 74, 24, 0, 0}, + + {AMOVW, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, + {AMOVV, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, +@@ -326,25 +323,25 @@ var optab = []Optab{ + + {AMOVF, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGSP, 0}, + {AMOVD, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGSP, 0}, +- {AMOVF, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGZERO, 0}, +- {AMOVD, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGZERO, 0}, ++ {AMOVF, C_SOREG_12, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGZERO, 0}, ++ {AMOVD, C_SOREG_12, C_NONE, C_NONE, C_FREG, C_NONE, 28, 4, REGZERO, 0}, + + {AMOVF, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGSP, 0}, + {AMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGSP, 0}, +- {AMOVF, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGZERO, 0}, +- {AMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGZERO, 0}, ++ {AMOVF, C_LOREG_32, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGZERO, 0}, ++ {AMOVD, C_LOREG_32, C_NONE, C_NONE, C_FREG, C_NONE, 28, 12, REGZERO, 0}, + {AMOVF, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, + {AMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, + + {AMOVF, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 29, 4, REGSP, 0}, + {AMOVD, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 29, 4, REGSP, 0}, +- {AMOVF, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 29, 4, REGZERO, 0}, +- {AMOVD, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 29, 4, REGZERO, 0}, ++ {AMOVF, C_FREG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 29, 4, REGZERO, 0}, ++ {AMOVD, C_FREG, C_NONE, C_NONE, C_SOREG_12, C_NONE, 29, 4, REGZERO, 0}, + + {AMOVF, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 29, 12, REGSP, 0}, + {AMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 29, 12, REGSP, 0}, +- {AMOVF, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 29, 12, REGZERO, 0}, +- {AMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 29, 12, REGZERO, 0}, ++ {AMOVF, C_FREG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 29, 12, REGZERO, 0}, ++ {AMOVD, C_FREG, C_NONE, C_NONE, C_LOREG_32, C_NONE, 29, 12, REGZERO, 0}, + {AMOVF, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, + {AMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, + +@@ -419,11 +416,11 @@ var optab = []Optab{ + + {AVMOVQ, C_ELEM, C_NONE, C_NONE, C_ARNG, C_NONE, 45, 4, 0, 0}, + +- {AVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, +- {AXVMOVQ, C_SOREG, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, ++ {AVMOVQ, C_SOREG_12, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, ++ {AXVMOVQ, C_SOREG_12, C_NONE, C_NONE, C_ARNG, C_NONE, 46, 4, 0, 0}, + +- {APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 47, 4, 0, 0}, +- {APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 48, 20, 0, 0}, ++ {APRELD, C_SOREG_12, C_U5CON, C_NONE, C_NONE, C_NONE, 47, 4, 0, 0}, ++ {APRELDX, C_SOREG_16, C_DCON, C_U5CON, C_NONE, C_NONE, 48, 20, 0, 0}, + + {AALSLV, C_U3CON, C_REG, C_REG, C_REG, C_NONE, 64, 4, 0, 0}, + +@@ -673,7 +670,7 @@ func span0(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { + + bp := c.cursym.P + var i int32 +- var out [5]uint32 ++ var out [6]uint32 + for p := c.cursym.Func().Text.Link; p != nil; p = p.Link { + c.pc = p.Pc + o = c.oplook(p) +@@ -777,7 +774,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + a.Reg = obj.REG_NONE + } + c.instoffset = int64(c.autosize) + a.Offset +- if c.instoffset >= -BIG && c.instoffset < BIG { ++ if c.instoffset >= -BIG_12 && c.instoffset < BIG_12 { + return C_SAUTO + } + return C_LAUTO +@@ -789,7 +786,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + a.Reg = obj.REG_NONE + } + c.instoffset = int64(c.autosize) + a.Offset + c.ctxt.Arch.FixedFrameSize +- if c.instoffset >= -BIG && c.instoffset < BIG { ++ if c.instoffset >= -BIG_12 && c.instoffset < BIG_12 { + return C_SAUTO + } + return C_LAUTO +@@ -807,10 +804,23 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + if c.instoffset == 0 { + return C_ZOREG + } +- if c.instoffset >= -BIG && c.instoffset < BIG { +- return C_SOREG ++ if c.instoffset >= -BIG_8 && c.instoffset < BIG_8 { ++ return C_SOREG_8 ++ } else if c.instoffset >= -BIG_9 && c.instoffset < BIG_9 { ++ return C_SOREG_9 ++ } else if c.instoffset >= -BIG_10 && c.instoffset < BIG_10 { ++ return C_SOREG_10 ++ } else if c.instoffset >= -BIG_11 && c.instoffset < BIG_11 { ++ return C_SOREG_11 ++ } else if c.instoffset >= -BIG_12 && c.instoffset < BIG_12 { ++ return C_SOREG_12 ++ } else if c.instoffset >= -BIG_16 && c.instoffset < BIG_16 { ++ return C_SOREG_16 ++ } else if c.instoffset >= -BIG_32 && c.instoffset < BIG_32 { ++ return C_LOREG_32 ++ } else { ++ return C_LOREG_64 + } +- return C_LOREG + + case obj.NAME_GOTREF: + return C_GOTADDR +@@ -827,7 +837,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + case obj.NAME_NONE: + c.instoffset = a.Offset + if a.Reg != 0 { +- if -BIG <= c.instoffset && c.instoffset <= BIG { ++ if -BIG_12 <= c.instoffset && c.instoffset <= BIG_12 { + return C_SACON + } + if isint32(c.instoffset) { +@@ -856,7 +866,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + a.Reg = obj.REG_NONE + } + c.instoffset = int64(c.autosize) + a.Offset +- if c.instoffset >= -BIG && c.instoffset < BIG { ++ if c.instoffset >= -BIG_12 && c.instoffset < BIG_12 { + return C_SACON + } + return C_LACON +@@ -868,7 +878,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { + a.Reg = obj.REG_NONE + } + c.instoffset = int64(c.autosize) + a.Offset + c.ctxt.Arch.FixedFrameSize +- if c.instoffset >= -BIG && c.instoffset < BIG { ++ if c.instoffset >= -BIG_12 && c.instoffset < BIG_12 { + return C_SACON + } + return C_LACON +@@ -1270,10 +1280,33 @@ func cmp(a int, b int) bool { + case C_REG: + return b == C_ZCON + +- case C_LOREG: +- return b == C_ZOREG || b == C_SOREG ++ case C_LOREG_64: ++ if b == C_ZOREG || b == C_SOREG_8 || ++ b == C_SOREG_9 || b == C_SOREG_10 || ++ b == C_SOREG_11 || b == C_SOREG_12 || ++ b == C_SOREG_16 || b == C_LOREG_32 { ++ return true ++ } ++ ++ case C_LOREG_32: ++ return cmp(C_SOREG_16, b) ++ ++ case C_SOREG_16: ++ return cmp(C_SOREG_12, b) ++ ++ case C_SOREG_12: ++ return cmp(C_SOREG_11, b) ++ ++ case C_SOREG_11: ++ return cmp(C_SOREG_10, b) ++ ++ case C_SOREG_10: ++ return cmp(C_SOREG_9, b) + +- case C_SOREG: ++ case C_SOREG_9: ++ return cmp(C_SOREG_8, b) ++ ++ case C_SOREG_8: + return b == C_ZOREG + } + +@@ -1452,6 +1485,10 @@ func buildop(ctxt *obj.Link) { + + case AMOVWP: + opset(AMOVVP, r0) ++ opset(ASC, r0) ++ opset(ASCV, r0) ++ opset(ALL, r0) ++ opset(ALLV, r0) + + case ASLL: + opset(ASRL, r0) +@@ -2032,6 +2069,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o3 := uint32(0) + o4 := uint32(0) + o5 := uint32(0) ++ o6 := uint32(0) + + add := AADDVU + +@@ -2939,18 +2977,51 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + o4 = OP_RRR(c.oprrr(p.As), uint32(REGTMP), uint32(r), uint32(p.To.Reg)) + + case 73: +- v := c.regoff(&p.To) ++ v := c.vregoff(&p.To) ++ r := p.To.Reg + if v&3 != 0 { + c.ctxt.Diag("%v: offset must be a multiple of 4.\n", p) + } +- o1 = OP_14IRR(c.opirr(p.As), uint32(v>>2), uint32(p.To.Reg), uint32(p.From.Reg)) ++ ++ switch o.size { ++ case 4: // 16 bit ++ o1 = OP_14IRR(c.opirr(p.As), uint32(v>>2), uint32(r), uint32(p.From.Reg)) ++ case 12: // 32 bit ++ o1 = OP_16IRR(c.opirr(AADDV16), uint32(v>>16), uint32(REG_R0), uint32(REGTMP)) ++ o2 = OP_RRR(c.oprrr(add), uint32(r), uint32(REGTMP), uint32(REGTMP)) ++ o3 = OP_14IRR(c.opirr(p.As), uint32(v>>2), uint32(REGTMP), uint32(p.From.Reg)) ++ case 24: // 64 bit ++ o1 = OP_IR(c.opir(ALU12IW), uint32(v>>12), uint32(REGTMP)) ++ o2 = OP_12IRR(c.opirr(AOR), uint32(v), uint32(REGTMP), uint32(REGTMP)) ++ o3 = OP_IR(c.opir(ALU32ID), uint32(v>>32), uint32(REGTMP)) ++ o4 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP)) ++ o5 = OP_RRR(c.oprrr(add), uint32(REGTMP), uint32(r), uint32(r)) ++ o6 = OP_14IRR(c.opirr(p.As), uint32(0), uint32(r), uint32(p.From.Reg)) ++ } + + case 74: +- v := c.regoff(&p.From) ++ v := c.vregoff(&p.From) ++ r := p.From.Reg + if v&3 != 0 { + c.ctxt.Diag("%v: offset must be a multiple of 4.\n", p) + } +- o1 = OP_14IRR(c.opirr(-p.As), uint32(v>>2), uint32(p.From.Reg), uint32(p.To.Reg)) ++ ++ switch o.size { ++ case 4: // 16 bit ++ o1 = OP_14IRR(c.opirr(-p.As), uint32(v>>2), uint32(r), uint32(p.To.Reg)) ++ case 12: // 32 bit ++ o1 = OP_16IRR(c.opirr(AADDV16), uint32(v>>16), uint32(REG_R0), uint32(REGTMP)) ++ o2 = OP_RRR(c.oprrr(add), uint32(r), uint32(REGTMP), uint32(REGTMP)) ++ o3 = OP_14IRR(c.opirr(-p.As), uint32(v>>2), uint32(REGTMP), uint32(p.To.Reg)) ++ case 24: // 64 bit ++ o1 = OP_IR(c.opir(ALU12IW), uint32(v>>12), uint32(REGTMP)) ++ o2 = OP_12IRR(c.opirr(AOR), uint32(v), uint32(REGTMP), uint32(REGTMP)) ++ o3 = OP_IR(c.opir(ALU32ID), uint32(v>>32), uint32(REGTMP)) ++ o4 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP)) ++ o5 = OP_RRR(c.oprrr(add), uint32(REGTMP), uint32(r), uint32(r)) ++ o6 = OP_14IRR(c.opirr(p.As), uint32(0), uint32(r), uint32(p.To.Reg)) ++ } ++ + } + + out[0] = o1 +@@ -2958,6 +3029,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { + out[2] = o3 + out[3] = o4 + out[4] = o5 ++ out[5] = o6 + } + + // checkoperand checks if operand >= 0 && operand <= maxoperand +@@ -4079,13 +4151,13 @@ func (c *ctxt0) opirr(a obj.As) uint32 { + case AROTRV: + return 0x004d << 16 + case -ALL: +- return 0x020 << 24 ++ return 0x020 << 24 // ll.w + case -ALLV: +- return 0x022 << 24 ++ return 0x022 << 24 // ll.d + case ASC: +- return 0x021 << 24 ++ return 0x021 << 24 // sc.w + case ASCV: +- return 0x023 << 24 ++ return 0x023 << 24 // sc.d + case AVANDB: + return 0x1CF4 << 18 // vandi.b + case AVORB: +-- +2.43.7 + diff --git a/golang.spec b/golang.spec index 6ed03de..670d4f7 100644 --- a/golang.spec +++ b/golang.spec @@ -1,4 +1,4 @@ -%define anolis_release .0.1 +%define anolis_release .0.2 %undefine _missing_build_ids_terminate_build %global bcond_with strict_fips @@ -30,20 +30,20 @@ # Define GOROOT macros %global goroot %{_prefix}/lib/%{name} %global gopath %{_datadir}/gocode -%global golang_arches x86_64 aarch64 ppc64le s390x +%global golang_arches x86_64 aarch64 ppc64le s390x loongarch64 %global golibdir %{_libdir}/%{name} # Golang build options. # Build golang using external/internal(close to cgo disabled) linking. -%ifarch x86_64 ppc64le %{arm} aarch64 s390x +%ifarch x86_64 ppc64le %{arm} aarch64 s390x loongarch64 %global external_linker 1 %else %global external_linker 0 %endif # Build golang with cgo enabled/disabled(later equals more or less to internal linking). -%ifarch x86_64 ppc64le %{arm} aarch64 s390x +%ifarch x86_64 ppc64le %{arm} aarch64 s390x loongarch64 %global cgo_enabled 1 %else %global cgo_enabled 0 @@ -92,6 +92,9 @@ %ifarch s390x %global gohostarch s390x %endif +%ifarch loongarch64 +%global gohostarch loong64 +%endif %global go_api 1.25 %global go_version 1.25.3 @@ -119,8 +122,11 @@ Source0: https://github.com/golang/go/archive/refs/tags/go%{version}.tar. Source1: https://github.com/golang-fips/go/archive/refs/tags/go%{version}-%{pkg_release}-openssl-fips.tar.gz # make possible to override default traceback level at build time by setting build tag rpm_crashtraceback Source2: fedora.go + Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{llvm_compiler_rt_version}/compiler-rt-%{llvm_compiler_rt_version}.src.tar.xz +Source4: race_linux_loong64.syso + # The compiler is written in Go. Needs go(1.4+) compiler for build. # Actual Go based bootstrap compiler provided by above source. %if !%{golang_bootstrap} @@ -159,6 +165,68 @@ Patch6: skip_TestCrashDumpsAllThreads.patch # Related: https://sourceware.org/bugzilla/show_bug.cgi?id=33204 Patch7: revert_dwarf5.patch +# loongarch64 support patches +Patch1001: 0001-ABI1.0-fix-runtime-defs_linux_loong64.patch +Patch1002: 0002-ABI1.0-fix-misc-cgo-test-sigaltstack-size-on-loong64.patch +Patch1003: 0003-ABI1.0-fix-mabi-to-lp64-for-loong64.patch +Patch1004: 0004-ABI1.0-fix-test-issue11656-for-loong64.patch +Patch1005: 0005-ABI1.0-fixup-stack-growth-after-fork-in-runtime.sigf.patch +Patch1006: 0006-ABI1.0-runtime-fix-the-vDSO-symbol-version-for-kerne.patch +Patch1007: 0007-ABI1.0-fix-the-definition-of-members-in-the-PtraceRe.patch +Patch1008: 0008-ABI1.0-cmd-link-correct-the-dynamic-linker-path-of-l.patch +Patch1009: 0009-ABI1.0-fix-the-definition-of-members-in-the-sigconte.patch +Patch1010: 0010-ABI1.0-cmd-cgo-internal-testsanitizers-skip-tsan8-on.patch +Patch1011: 0011-ABI1.0-switch-the-relocations-to-ABI1.0-s-style.patch +Patch1013: 0013-ABI1.0-skipped-due-to-git-unknown-option-object-form.patch +Patch1014: 0014-crypto-sha256-use-const-table-for-key-loading-on-loo.patch +Patch1015: 0015-crypto-sha512-use-const-table-for-key-loading-on-loo.patch +Patch1016: 0016-runtime-add-reference-to-debugPinnerV1.patch +Patch1017: 0017-cmd-internal-obj-loong64-add-X-VLDREPL.-B-H-W-D-inst.patch +Patch1018: 0018-cmd-compile-fold-negation-into-multiplication-on-loo.patch +Patch1019: 0019-internal-chacha8rand-replace-WORD-with-instruction-V.patch +Patch1020: 0020-cmd-compile-avoid-extending-when-already-sufficientl.patch +Patch1021: 0021-cmd-internal-obj-loong64-adjust-the-case-number-of-t.patch +Patch1022: 0022-internal-bytealg-optimize-Index-IndexString-on-loong.patch +Patch1023: 0023-cmd-internal-obj-loong64-add-support-for-FSEL-instru.patch +Patch1024: 0024-cmd-compile-internal-ssa-fix-typo-in-LOONG64Ops.go-c.patch +Patch1025: 0025-cmd-internal-obj-loong64-add-new-instructions-ALSL-W.patch +Patch1026: 0026-cmd-compile-optimize-multiplication-rules-on-loong64.patch +Patch1027: 0027-cmd-compile-internal-ssa-optimise-more-branches-with.patch +Patch1028: 0028-cmd-compile-internal-ssa-use-BEQ-BNE-to-optimize-the.patch +Patch1029: 0029-cmd-compile-internal-ssa-eliminate-unnecessary-exten.patch +Patch1030: 0030-cmd-compile-internal-optimize-SGT-operation-using-R0.patch +Patch1031: 0031-cmd-compile-internal-optimize-multiplication-use-new.patch +Patch1032: 0032-cmd-compile-convert-branch-with-zero-to-more-optimal.patch +Patch1033: 0033-cmd-compile-internal-optimizing-add-sll-rule-using-A.patch +Patch1034: 0034-runtime-save-and-restore-all-fcc-registers-in-async-.patch +Patch1035: 0035-test-codegen-add-Mul2-and-DivPow2-test-for-loong64.patch +Patch1036: 0036-test-codegen-add-Mul-test-for-loong64.patch +Patch1037: 0037-test-codegen-add-sqrt-abs-and-copysign-test-for-loon.patch +Patch1038: 0038-cmd-compile-optimize-some-patterns-into-revb2h-revb4.patch +Patch1039: 0039-cmd-compile-optimize-rule-x-x-c-to-x-c-1-on-loong64.patch +Patch1040: 0040-cmd-compile-use-zero-register-instead-of-specialized.patch +Patch1041: 0041-cmd-compile-absorb-NEGV-into-branch-on-loong64.patch +Patch1042: 0042-cmd-compile-simplify-zerorange-on-loong64.patch +Patch1043: 0043-cmd-internal-obj-loong64-simplify-buildop.patch +Patch1044: 0044-internal-runtime-atomic-reset-wrong-jump-target-in-C.patch +Patch1045: 0045-cmd-internal-obj-loong64-add-LDPTR.-W-D-and-STPTR.-W.patch +Patch1046: 0046-cmd-compile-simplify-the-support-for-32bit-high-mult.patch +Patch1047: 0047-cmd-internal-obj-loong64-fix-the-usage-of-offset-in-.patch +Patch1048: 0048-cmd-compile-simplify-memory-load-and-store-operation.patch +Patch1049: 0049-cmd-internal-obj-loong64-add-ADDU16I.D-instruction-s.patch +Patch1050: 0050-runtime-cgo-save-and-restore-R31-for-crosscall1-on-l.patch +Patch1051: 0051-cmd-compile-simplify-specific-addition-operations-us.patch +Patch1052: 0052-cmd-compile-optimize-loads-from-readonly-globals-int.patch +Patch1053: 0053-cmd-compile-fold-constant-in-ADDshift-op-on-loong64.patch +Patch1054: 0054-cmd-internal-obj-loong64-use-the-MOVVP-instruction-t.patch +Patch1055: 0055-cmd-compile-implement-jump-table-on-loong64.patch +Patch1056: 0056-cmd-link-cmd-internal-obj-fix-a-remote-call-failure-.patch +Patch1057: 0057-cmd-internal-obj-loong64-add-MULW.D.W-U-instructions.patch +Patch1058: 0058-cmd-internal-obj-loong64-optimize-duplicate-optab-en.patch +Patch1059: 0059-cmd-internal-obj-loong64-add-aliases-to-32-bit-arith.patch +Patch1060: 0060-cmd-internal-obj-loong64-remove-the-incorrect-unsign.patch +Patch1061: 0061-cmd-internal-obj-cmd-asm-reclassify-the-offset-of-me.patch + # Having documentation separate was broken Obsoletes: %{name}-docs < 1.1-4 @@ -290,6 +358,9 @@ uname -a cat /proc/cpuinfo cat /proc/meminfo +%ifarch loongarch64 +cp -rfv %{SOURCE4} ./src/runtime/race/race_linux_%{gohostarch}.syso +%else # Build race detector .syso's from llvm sources # The race detector requests a -fno-exceptions build. %global tsan_buildflags %(rpm -D 'toolchain clang' -E '%{optflags}' | sed 's/-fexceptions//') @@ -322,7 +393,7 @@ pushd "${tsan_go_dir}" popd cp "${tsan_go_dir}"/race_linux_%{gohostarch}.syso ./src/runtime/race/race_linux_%{gohostarch}.syso %endif - +%endif # bootstrap compiler GOROOT %if !%{golang_bootstrap} @@ -591,6 +662,42 @@ cd .. %endif %changelog +* Tue Dec 16 2025 chenguoqi - 1.25.3-1.0.2 +- Add uapi support for Linux 4.19 on loong64 +- internal/bytealg: optimize Index/IndexString on loong64 +- crypto/sha256: use const table for key loading on loong64 +- crypto/sha512: use const table for key loading on loong64 +- cmd/compile: fold negation into multiplication on loong64 +- cmd/compile: avoid extending when already sufficiently masked on loong64 +- cmd/compile: optimize multiplication rules on loong64 +- cmd/compile/internal/ssa: optimise more branches with SGTconst/SGTUconst on loong64 +- cmd/compile/internal/ssa: use BEQ/BNE to optimize the combination of XOR and EQZ/NEZ on loong64 +- cmd/compile/internal/ssa: eliminate unnecessary extension operations +- cmd/compile/internal: optimize SGT operation using R0 in case of constant zero +- cmd/compile/internal: optimize multiplication use new operation 'ADDshiftLLV' on loong64 +- cmd/compile: convert branch with zero to more optimal branch zero on loong64 +- cmd/compile: optimize some patterns into revb2h/revb4h instruction on loong64 +- cmd/compile: optimize rule (x + x) << c to x << c+1 on loong64 +- cmd/compile: use zero register instead of specialized *zero instructions on loong64 +- cmd/compile: simplify zerorange on loong64 +- cmd/compile: simplify the support for 32bit high multiply on loong64 +- cmd/compile: simplify specific addition operations using the ADDV16 instruction +- cmd/compile: fold constant in ADDshift op on loong64 +- cmd/internal/obj/loong64: use the MOVVP instruction to optimize prologue +- cmd/internal/obj, cmd/asm: reclassify the offset of memory access operations on loong64 +- cmd/compile: implement jump table on loong64 +- runtime/cgo: save and restore R31 for crosscall1 on loong64 +- runtime: save and restore all fcc registers in async preempt on loong64 +- runtime: add reference to debugPinnerV1 +- internal/chacha8rand: replace WORD with instruction VMOVQ +- cmd/internal/obj/loong64: adjust the case number of the Optab entry +- cmd/internal/obj/loong64: add MULW.D.W[U] instructions +- cmd/internal/obj/loong64: add [X]VLDREPL.{B/H/W/D} instructions support +- cmd/internal/obj/loong64: add support for FSEL instruction +- cmd/internal/obj/loong64: add new instructions ALSL{W/WU/V} for loong64 +- cmd/internal/obj/loong64: add LDPTR.{W/D} and STPTR.{W/D} instructions support +- cmd/internal/obj/loong64: add ADDU16I.D instruction support + * Mon Dec 08 2025 Chang Gao - 1.25.3-1.0.1 - disable DISABLE_BoringCertAlgs_TEST test diff --git a/race_linux_loong64.syso b/race_linux_loong64.syso new file mode 100644 index 0000000000000000000000000000000000000000..6f77f654c94d86486e9345f7632da4d0f2dddeed GIT binary patch literal 1814096 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