aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
authorWayne Zuo <wdvxdr@golangcn.org>2022-07-29 22:14:53 +0800
committerJoel Sing <joel@sing.id.au>2022-08-27 05:43:59 +0000
commita6219737e3eb062282e6483a915c395affb30c69 (patch)
tree3c07947b23e300c7566781cfb87e7f9d4ae32185 /test/codegen
parent969f48a3a24032c3dd1ec351302b5b62407dfb88 (diff)
downloadgo-a6219737e3eb062282e6483a915c395affb30c69.tar.xz
cmd/compile: intrinsify Sub64 on riscv64
After this CL, the performance difference in crypto/elliptic benchmarks on linux/riscv64 are: name old time/op new time/op delta ScalarBaseMult/P256 1.64ms ± 1% 1.60ms ± 1% -2.36% (p=0.008 n=5+5) ScalarBaseMult/P224 1.53ms ± 1% 1.47ms ± 2% -4.24% (p=0.008 n=5+5) ScalarBaseMult/P384 5.12ms ± 2% 5.03ms ± 2% ~ (p=0.095 n=5+5) ScalarBaseMult/P521 22.3ms ± 2% 13.8ms ± 1% -37.89% (p=0.008 n=5+5) ScalarMult/P256 4.49ms ± 2% 4.26ms ± 2% -5.13% (p=0.008 n=5+5) ScalarMult/P224 4.33ms ± 1% 4.09ms ± 1% -5.59% (p=0.008 n=5+5) ScalarMult/P384 16.3ms ± 1% 15.5ms ± 2% -4.78% (p=0.008 n=5+5) ScalarMult/P521 101ms ± 0% 47ms ± 2% -53.36% (p=0.008 n=5+5) Change-Id: I31cf0506e27f9d85f576af1813630a19c20dda8a Reviewed-on: https://go-review.googlesource.com/c/go/+/420095 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Joel Sing <joel@sing.id.au> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/mathbits.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/test/codegen/mathbits.go b/test/codegen/mathbits.go
index f36916ad03..9c643647ee 100644
--- a/test/codegen/mathbits.go
+++ b/test/codegen/mathbits.go
@@ -621,6 +621,7 @@ func Sub(x, y, ci uint) (r, co uint) {
// ppc64:"SUBC", "SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", "SUBE", "SUBZE", "NEG"
// s390x:"SUBE"
+ // riscv64: "SUB","SLTU"
return bits.Sub(x, y, ci)
}
@@ -630,6 +631,7 @@ func SubC(x, ci uint) (r, co uint) {
// ppc64:"SUBC", "SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", "SUBE", "SUBZE", "NEG"
// s390x:"SUBE"
+ // riscv64: "SUB","SLTU"
return bits.Sub(x, 7, ci)
}
@@ -639,6 +641,7 @@ func SubZ(x, y uint) (r, co uint) {
// ppc64:"SUBC", -"SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", -"SUBE", "SUBZE", "NEG"
// s390x:"SUBC"
+ // riscv64: "SUB","SLTU"
return bits.Sub(x, y, 0)
}
@@ -648,6 +651,7 @@ func SubR(x, y, ci uint) uint {
// ppc64:"SUBC", "SUBE", -"SUBZE", -"NEG"
// ppc64le:"SUBC", "SUBE", -"SUBZE", -"NEG"
// s390x:"SUBE"
+ // riscv64: "SUB",-"SLTU"
r, _ := bits.Sub(x, y, ci)
return r
}
@@ -669,6 +673,7 @@ func Sub64(x, y, ci uint64) (r, co uint64) {
// ppc64:"SUBC", "SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", "SUBE", "SUBZE", "NEG"
// s390x:"SUBE"
+ // riscv64: "SUB","SLTU"
return bits.Sub64(x, y, ci)
}
@@ -678,6 +683,7 @@ func Sub64C(x, ci uint64) (r, co uint64) {
// ppc64:"SUBC", "SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", "SUBE", "SUBZE", "NEG"
// s390x:"SUBE"
+ // riscv64: "SUB","SLTU"
return bits.Sub64(x, 7, ci)
}
@@ -687,6 +693,7 @@ func Sub64Z(x, y uint64) (r, co uint64) {
// ppc64:"SUBC", -"SUBE", "SUBZE", "NEG"
// ppc64le:"SUBC", -"SUBE", "SUBZE", "NEG"
// s390x:"SUBC"
+ // riscv64: "SUB","SLTU"
return bits.Sub64(x, y, 0)
}
@@ -696,6 +703,7 @@ func Sub64R(x, y, ci uint64) uint64 {
// ppc64:"SUBC", "SUBE", -"SUBZE", -"NEG"
// ppc64le:"SUBC", "SUBE", -"SUBZE", -"NEG"
// s390x:"SUBE"
+ // riscv64: "SUB",-"SLTU"
r, _ := bits.Sub64(x, y, ci)
return r
}