diff options
| author | Wayne Zuo <wdvxdr@golangcn.org> | 2022-07-29 22:14:53 +0800 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2022-08-27 05:43:59 +0000 |
| commit | a6219737e3eb062282e6483a915c395affb30c69 (patch) | |
| tree | 3c07947b23e300c7566781cfb87e7f9d4ae32185 /test/codegen | |
| parent | 969f48a3a24032c3dd1ec351302b5b62407dfb88 (diff) | |
| download | go-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.go | 8 |
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 } |
