diff options
| author | Xiaolin Zhao <zhaoxiaolin@loongson.cn> | 2024-11-05 15:30:45 +0800 |
|---|---|---|
| committer | abner chenc <chenguoqi@loongson.cn> | 2024-11-08 01:05:48 +0000 |
| commit | e6cc9d228a913b871fb20a3fa23021bd5231dbc0 (patch) | |
| tree | ae79e9601b394e6a8a7cb9aa975918158ff3e220 /test/codegen | |
| parent | 2751443e92d9ac6adee2ce0433253fd7b2c04b0f (diff) | |
| download | go-e6cc9d228a913b871fb20a3fa23021bd5231dbc0.tar.xz | |
cmd/compile: implement FMA codegen for loong64
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 <git@xen0n.name>
Change-Id: I88b89d23f00864f9173a182a47ee135afec7ed6e
Reviewed-on: https://go-review.googlesource.com/c/go/+/625335
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/floats.go | 6 | ||||
| -rw-r--r-- | test/codegen/math.go | 1 |
2 files changed, 7 insertions, 0 deletions
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" |
