| // 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) |