mirror of
https://github.com/golang/go.git
synced 2025-05-28 02:41:30 +00:00
internal/cpu,internal/bytealg: add support for riscv64
Based on riscv-go port. Updates #27532 Change-Id: Ia3aed521d4109e7b73f762c5a3cdacc7cdac430d Reviewed-on: https://go-review.googlesource.com/c/go/+/204635 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
ee706cfe83
commit
0c703b37df
49
src/internal/bytealg/equal_riscv64.s
Normal file
49
src/internal/bytealg/equal_riscv64.s
Normal file
@ -0,0 +1,49 @@
|
||||
// Copyright 2019 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.
|
||||
|
||||
#include "go_asm.h"
|
||||
#include "textflag.h"
|
||||
|
||||
#define CTXT S4
|
||||
|
||||
// func memequal(a, b unsafe.Pointer, size uintptr) bool
|
||||
TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
|
||||
MOV a+0(FP), A1
|
||||
MOV b+8(FP), A2
|
||||
BEQ A1, A2, eq
|
||||
MOV size+16(FP), A3
|
||||
ADD A1, A3, A4
|
||||
loop:
|
||||
BEQ A1, A4, eq
|
||||
|
||||
MOVBU (A1), A6
|
||||
ADD $1, A1
|
||||
MOVBU (A2), A7
|
||||
ADD $1, A2
|
||||
BEQ A6, A7, loop
|
||||
|
||||
MOVB ZERO, ret+24(FP)
|
||||
RET
|
||||
eq:
|
||||
MOV $1, A1
|
||||
MOVB A1, ret+24(FP)
|
||||
RET
|
||||
|
||||
// func memequal_varlen(a, b unsafe.Pointer) bool
|
||||
TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17
|
||||
MOV a+0(FP), A1
|
||||
MOV b+8(FP), A2
|
||||
BEQ A1, A2, eq
|
||||
MOV 8(CTXT), A3 // compiler stores size at offset 8 in the closure
|
||||
MOV A1, 8(X2)
|
||||
MOV A2, 16(X2)
|
||||
MOV A3, 24(X2)
|
||||
CALL runtime·memequal(SB)
|
||||
MOVBU 32(X2), A1
|
||||
MOVB A1, ret+16(FP)
|
||||
RET
|
||||
eq:
|
||||
MOV $1, A1
|
||||
MOVB A1, ret+16(FP)
|
||||
RET
|
@ -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 !386,!amd64,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm
|
||||
// +build !386,!amd64,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!riscv64,!wasm
|
||||
|
||||
package bytealg
|
||||
|
||||
|
@ -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 386 amd64 s390x arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le wasm
|
||||
// +build 386 amd64 s390x arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le riscv64 wasm
|
||||
|
||||
package bytealg
|
||||
|
||||
|
52
src/internal/bytealg/indexbyte_riscv64.s
Normal file
52
src/internal/bytealg/indexbyte_riscv64.s
Normal file
@ -0,0 +1,52 @@
|
||||
// Copyright 2019 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.
|
||||
|
||||
#include "go_asm.h"
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·IndexByte(SB),NOSPLIT,$0-40
|
||||
MOV s+0(FP), A1
|
||||
MOV s_len+8(FP), A2
|
||||
MOVBU c+24(FP), A3 // byte to find
|
||||
MOV A1, A4 // store base for later
|
||||
ADD A1, A2 // end
|
||||
ADD $-1, A1
|
||||
|
||||
loop:
|
||||
ADD $1, A1
|
||||
BEQ A1, A2, notfound
|
||||
MOVBU (A1), A5
|
||||
BNE A3, A5, loop
|
||||
|
||||
SUB A4, A1 // remove base
|
||||
MOV A1, ret+32(FP)
|
||||
RET
|
||||
|
||||
notfound:
|
||||
MOV $-1, A1
|
||||
MOV A1, ret+32(FP)
|
||||
RET
|
||||
|
||||
TEXT ·IndexByteString(SB),NOSPLIT,$0-32
|
||||
MOV p+0(FP), A1
|
||||
MOV b_len+8(FP), A2
|
||||
MOVBU c+16(FP), A3 // byte to find
|
||||
MOV A1, A4 // store base for later
|
||||
ADD A1, A2 // end
|
||||
ADD $-1, A1
|
||||
|
||||
loop:
|
||||
ADD $1, A1
|
||||
BEQ A1, A2, notfound
|
||||
MOVBU (A1), A5
|
||||
BNE A3, A5, loop
|
||||
|
||||
SUB A4, A1 // remove base
|
||||
MOV A1, ret+24(FP)
|
||||
RET
|
||||
|
||||
notfound:
|
||||
MOV $-1, A1
|
||||
MOV A1, ret+24(FP)
|
||||
RET
|
7
src/internal/cpu/cpu_riscv64.go
Normal file
7
src/internal/cpu/cpu_riscv64.go
Normal file
@ -0,0 +1,7 @@
|
||||
// Copyright 2019 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.
|
||||
|
||||
package cpu
|
||||
|
||||
const CacheLinePadSize = 32
|
Loading…
x
Reference in New Issue
Block a user