From e6cc9d228a913b871fb20a3fa23021bd5231dbc0 Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Tue, 5 Nov 2024 15:30:45 +0800 Subject: cmd/compile: implement FMA codegen for loong64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Benchmark results on Loongson 3A5000 and 3A6000: goos: linux goarch: loong64 pkg: math cpu: Loongson-3A6000 @ 2500.00MHz | bench.old | bench.new | | sec/op | sec/op vs base | FMA 25.930n ± 0% 2.002n ± 0% -92.28% (p=0.000 n=10) goos: linux goarch: loong64 pkg: math cpu: Loongson-3A5000 @ 2500.00MHz | bench.old | bench.new | | sec/op | sec/op vs base | FMA 32.840n ± 0% 2.002n ± 0% -93.90% (p=0.000 n=10) Updates #59120 This patch is a copy of CL 483355. Co-authored-by: WANG Xuerui Change-Id: I88b89d23f00864f9173a182a47ee135afec7ed6e Reviewed-on: https://go-review.googlesource.com/c/go/+/625335 Reviewed-by: abner chenc LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Carlos Amedee --- test/codegen/floats.go | 6 ++++++ test/codegen/math.go | 1 + 2 files changed, 7 insertions(+) (limited to 'test/codegen') diff --git a/test/codegen/floats.go b/test/codegen/floats.go index a77843d0e7..1b85eba352 100644 --- a/test/codegen/floats.go +++ b/test/codegen/floats.go @@ -72,6 +72,7 @@ func FusedAdd32(x, y, z float32) float32 { // s390x:"FMADDS\t" // ppc64x:"FMADDS\t" // arm64:"FMADDS" + // loong64:"FMADDF\t" // riscv64:"FMADDS\t" return x*y + z } @@ -80,11 +81,13 @@ func FusedSub32_a(x, y, z float32) float32 { // s390x:"FMSUBS\t" // ppc64x:"FMSUBS\t" // riscv64:"FMSUBS\t" + // loong64:"FMSUBF\t" return x*y - z } func FusedSub32_b(x, y, z float32) float32 { // arm64:"FMSUBS" + // loong64:"FNMSUBF\t" // riscv64:"FNMSUBS\t" return z - x*y } @@ -93,6 +96,7 @@ func FusedAdd64(x, y, z float64) float64 { // s390x:"FMADD\t" // ppc64x:"FMADD\t" // arm64:"FMADDD" + // loong64:"FMADDD\t" // riscv64:"FMADDD\t" return x*y + z } @@ -101,11 +105,13 @@ func FusedSub64_a(x, y, z float64) float64 { // s390x:"FMSUB\t" // ppc64x:"FMSUB\t" // riscv64:"FMSUBD\t" + // loong64:"FMSUBD\t" return x*y - z } func FusedSub64_b(x, y, z float64) float64 { // arm64:"FMSUBD" + // loong64:"FNMSUBD\t" // riscv64:"FNMSUBD\t" return z - x*y } diff --git a/test/codegen/math.go b/test/codegen/math.go index 806f909648..4ce5fa419d 100644 --- a/test/codegen/math.go +++ b/test/codegen/math.go @@ -132,6 +132,7 @@ func fma(x, y, z float64) float64 { // amd64:"VFMADD231SD" // arm/6:"FMULAD" // arm64:"FMADDD" + // loong64:"FMADDD" // s390x:"FMADD" // ppc64x:"FMADD" // riscv64:"FMADDD" -- cgit v1.3-5-g9baa