mirror of
https://github.com/golang/go
synced 2024-09-29 19:24:33 -06:00
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>
This commit is contained in:
parent
89f249a40d
commit
fe70838598
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
51
src/math/big/arith_riscv64.s
Normal file
51
src/math/big/arith_riscv64.s
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user