diff options
| author | Joel Sing <joel@sing.id.au> | 2020-02-26 03:09:59 +1100 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2020-02-25 16:47:02 +0000 |
| commit | fe708385987231fa99d34df5b8c9d14afa0d35cf (patch) | |
| tree | 74ec483e9f86ba927041da73e346f240f10c4786 /src/math | |
| parent | 89f249a40d6317620243bc2dac083dffafcb4448 (diff) | |
| download | go-fe708385987231fa99d34df5b8c9d14afa0d35cf.tar.xz | |
math/big: initial vector arithmetic in riscv64 assembly
Provide an assembly implementation of mulWW - for now all others run the
Go code.
Change-Id: Icb594c31048255f131bdea8d64f56784fc9db4d1
Reviewed-on: https://go-review.googlesource.com/c/go/+/220919
Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/math')
| -rw-r--r-- | src/math/big/arith_decl.go | 2 | ||||
| -rw-r--r-- | src/math/big/arith_decl_pure.go | 2 | ||||
| -rw-r--r-- | src/math/big/arith_riscv64.s | 51 |
3 files changed, 53 insertions, 2 deletions
diff --git a/src/math/big/arith_decl.go b/src/math/big/arith_decl.go index 53ab012988..41e592334c 100644 --- a/src/math/big/arith_decl.go +++ b/src/math/big/arith_decl.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. -// +build !math_big_pure_go,!riscv64 +// +build !math_big_pure_go package big diff --git a/src/math/big/arith_decl_pure.go b/src/math/big/arith_decl_pure.go index 4021a6d299..305f7ee03b 100644 --- a/src/math/big/arith_decl_pure.go +++ b/src/math/big/arith_decl_pure.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. -// +build math_big_pure_go riscv64 +// +build math_big_pure_go package big diff --git a/src/math/big/arith_riscv64.s b/src/math/big/arith_riscv64.s new file mode 100644 index 0000000000..59065c3f7b --- /dev/null +++ b/src/math/big/arith_riscv64.s @@ -0,0 +1,51 @@ +// Copyright 2020 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. + +// +build !math_big_pure_go,riscv64 + +#include "textflag.h" + +// This file provides fast assembly versions for the elementary +// arithmetic operations on vectors implemented in arith.go. + +// func mulWW(x, y Word) (z1, z0 Word) +TEXT ·mulWW(SB),NOSPLIT,$0 + MOV x+0(FP), X5 + MOV y+8(FP), X6 + MULHU X5, X6, X7 + MUL X5, X6, X8 + MOV X7, z1+16(FP) + MOV X8, z0+24(FP) + RET + +// func divWW(x1, x0, y Word) (q, r Word) +TEXT ·divWW(SB),NOSPLIT,$0 + JMP ·divWW_g(SB) // riscv64 has no multiword division + +TEXT ·addVV(SB),NOSPLIT,$0 + JMP ·addVV_g(SB) + +TEXT ·subVV(SB),NOSPLIT,$0 + JMP ·subVV_g(SB) + +TEXT ·addVW(SB),NOSPLIT,$0 + JMP ·addVW_g(SB) + +TEXT ·subVW(SB),NOSPLIT,$0 + JMP ·subVW_g(SB) + +TEXT ·shlVU(SB),NOSPLIT,$0 + JMP ·shlVU_g(SB) + +TEXT ·shrVU(SB),NOSPLIT,$0 + JMP ·shrVU_g(SB) + +TEXT ·mulAddVWW(SB),NOSPLIT,$0 + JMP ·mulAddVWW_g(SB) + +TEXT ·addMulVVW(SB),NOSPLIT,$0 + JMP ·addMulVVW_g(SB) + +TEXT ·divWVW(SB),NOSPLIT,$0 + JMP ·divWVW_g(SB) |
