mirror of
https://github.com/golang/go.git
synced 2025-05-07 08:32:59 +00:00
internal/runtime/atomic: add Xchg8 for riscv64
For #69735 Change-Id: I34ca2b027494525ab64f94beee89ca373a5031ae Reviewed-on: https://go-review.googlesource.com/c/go/+/631615 Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Mark Ryan <markdryan@rivosinc.com> Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
0d8c512ce9
commit
58083b57d4
@ -18,6 +18,9 @@ func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
|
|||||||
//go:noescape
|
//go:noescape
|
||||||
func Xchg(ptr *uint32, new uint32) uint32
|
func Xchg(ptr *uint32, new uint32) uint32
|
||||||
|
|
||||||
|
//go:noescape
|
||||||
|
func Xchg8(ptr *uint8, new uint8) uint8
|
||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func Xchg64(ptr *uint64, new uint64) uint64
|
func Xchg64(ptr *uint64, new uint64) uint64
|
||||||
|
|
||||||
|
@ -199,6 +199,27 @@ TEXT ·Xchg(SB), NOSPLIT, $0-20
|
|||||||
MOVW A1, ret+16(FP)
|
MOVW A1, ret+16(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
// func Xchg8(ptr *uint8, new uint8) uint8
|
||||||
|
TEXT ·Xchg8(SB), NOSPLIT, $0-17
|
||||||
|
MOV ptr+0(FP), A0
|
||||||
|
MOVBU new+8(FP), A1
|
||||||
|
AND $3, A0, A2
|
||||||
|
SLL $3, A2
|
||||||
|
MOV $255, A4
|
||||||
|
SLL A2, A4
|
||||||
|
NOT A4
|
||||||
|
AND $~3, A0
|
||||||
|
SLL A2, A1
|
||||||
|
xchg8_again:
|
||||||
|
LRW (A0), A5
|
||||||
|
AND A4, A5, A3
|
||||||
|
OR A1, A3
|
||||||
|
SCW A3, (A0), A6
|
||||||
|
BNEZ A6, xchg8_again
|
||||||
|
SRL A2, A5
|
||||||
|
MOVB A5, ret+16(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
// func Xchg64(ptr *uint64, new uint64) uint64
|
// func Xchg64(ptr *uint64, new uint64) uint64
|
||||||
TEXT ·Xchg64(SB), NOSPLIT, $0-24
|
TEXT ·Xchg64(SB), NOSPLIT, $0-24
|
||||||
MOV ptr+0(FP), A0
|
MOV ptr+0(FP), A0
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build 386 || amd64 || arm || arm64 || loong64 || ppc64 || ppc64le
|
//go:build 386 || amd64 || arm || arm64 || loong64 || ppc64 || ppc64le || riscv64
|
||||||
|
|
||||||
package atomic_test
|
package atomic_test
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user