mirror of
https://github.com/golang/go
synced 2024-11-18 06:54:49 -07:00
runtime/internal/atomic: add Store8
We already have Load8, And8, and Or8. For #10958, #24543, but makes sense on its own. Change-Id: I478529fc643edc57efdeccaae413c99edd19b2eb Reviewed-on: https://go-review.googlesource.com/c/go/+/203283 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
fd1e60f6e3
commit
d2101e5490
@ -229,3 +229,9 @@ TEXT runtime∕internal∕atomic·And8(SB), NOSPLIT, $0-5
|
||||
LOCK
|
||||
ANDB BX, (AX)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store8(SB), NOSPLIT, $0-5
|
||||
MOVL ptr+0(FP), BX
|
||||
MOVB val+4(FP), AX
|
||||
XCHGB AX, 0(BX)
|
||||
RET
|
||||
|
@ -136,6 +136,12 @@ TEXT runtime∕internal∕atomic·Store(SB), NOSPLIT, $0-12
|
||||
TEXT runtime∕internal∕atomic·StoreRel(SB), NOSPLIT, $0-12
|
||||
JMP runtime∕internal∕atomic·Store(SB)
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store8(SB), NOSPLIT, $0-9
|
||||
MOVQ ptr+0(FP), BX
|
||||
MOVB val+8(FP), AX
|
||||
XCHGB AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16
|
||||
MOVQ ptr+0(FP), BX
|
||||
MOVQ val+8(FP), AX
|
||||
|
@ -166,6 +166,14 @@ TEXT ·Store(SB), NOSPLIT, $0-12
|
||||
SYNC
|
||||
RET
|
||||
|
||||
TEXT ·Store8(SB), NOSPLIT, $0-9
|
||||
MOVV ptr+0(FP), R1
|
||||
MOVB val+8(FP), R2
|
||||
SYNC
|
||||
MOVB R2, 0(R1)
|
||||
SYNC
|
||||
RET
|
||||
|
||||
TEXT ·Store64(SB), NOSPLIT, $0-16
|
||||
MOVV ptr+0(FP), R1
|
||||
MOVV val+8(FP), R2
|
||||
|
@ -32,6 +32,14 @@ TEXT ·Store(SB),NOSPLIT,$0-8
|
||||
SYNC
|
||||
RET
|
||||
|
||||
TEXT ·Store8(SB),NOSPLIT,$0-5
|
||||
MOVW ptr+0(FP), R1
|
||||
MOVB val+4(FP), R2
|
||||
SYNC
|
||||
MOVB R2, 0(R1)
|
||||
SYNC
|
||||
RET
|
||||
|
||||
TEXT ·Load(SB),NOSPLIT,$0-8
|
||||
MOVW ptr+0(FP), R1
|
||||
SYNC
|
||||
|
@ -170,6 +170,13 @@ TEXT runtime∕internal∕atomic·Store(SB), NOSPLIT, $0-12
|
||||
MOVW R4, 0(R3)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store8(SB), NOSPLIT, $0-9
|
||||
MOVD ptr+0(FP), R3
|
||||
MOVB val+8(FP), R4
|
||||
SYNC
|
||||
MOVB R4, 0(R3)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16
|
||||
MOVD ptr+0(FP), R3
|
||||
MOVD val+8(FP), R4
|
||||
|
@ -12,6 +12,14 @@ TEXT ·Store(SB), NOSPLIT, $0
|
||||
SYNC
|
||||
RET
|
||||
|
||||
// func Store8(ptr *uint8, val uint8)
|
||||
TEXT ·Store8(SB), NOSPLIT, $0
|
||||
MOVD ptr+0(FP), R2
|
||||
MOVB val+8(FP), R3
|
||||
MOVB R3, 0(R2)
|
||||
SYNC
|
||||
RET
|
||||
|
||||
// func Store64(ptr *uint64, val uint64)
|
||||
TEXT ·Store64(SB), NOSPLIT, $0
|
||||
MOVD ptr+0(FP), R2
|
||||
|
@ -74,6 +74,9 @@ func CasRel(ptr *uint32, old, new uint32) bool
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -76,6 +76,9 @@ func CasRel(ptr *uint32, old, new uint32) bool
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -209,5 +209,8 @@ func Xchg64(addr *uint64, v uint64) uint64
|
||||
//go:noescape
|
||||
func Load64(addr *uint64) uint64
|
||||
|
||||
//go:noescape
|
||||
func Store8(addr *uint8, v uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(addr *uint64, v uint64)
|
||||
|
@ -56,6 +56,9 @@ func CasRel(ptr *uint32, old, new uint32) bool
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -48,6 +48,12 @@ TEXT runtime∕internal∕atomic·Store(SB), NOSPLIT, $0-12
|
||||
STLRW R1, (R0)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store8(SB), NOSPLIT, $0-9
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVB val+8(FP), R1
|
||||
STLRB R1, (R0)
|
||||
RET
|
||||
|
||||
TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVD val+8(FP), R1
|
||||
|
@ -58,6 +58,9 @@ func CasRel(ptr *uint32, old, new uint32) bool
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -141,6 +141,9 @@ func Or8(ptr *uint8, val uint8)
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
// NO go:noescape annotation; see atomic_pointer.go.
|
||||
func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
|
||||
|
||||
|
@ -58,6 +58,9 @@ func CasRel(ptr *uint32, old, new uint32) bool
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -44,6 +44,9 @@ func LoadAcq(ptr *uint32) uint32 {
|
||||
//go:noescape
|
||||
func Store(ptr *uint32, val uint32)
|
||||
|
||||
//go:noescape
|
||||
func Store8(ptr *uint8, val uint8)
|
||||
|
||||
//go:noescape
|
||||
func Store64(ptr *uint64, val uint64)
|
||||
|
||||
|
@ -141,6 +141,12 @@ func StoreRel(ptr *uint32, val uint32) {
|
||||
*ptr = val
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:noinline
|
||||
func Store8(ptr *uint8, val uint8) {
|
||||
*ptr = val
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:noinline
|
||||
func Store64(ptr *uint64, val uint64) {
|
||||
|
@ -120,3 +120,25 @@ end:
|
||||
MOVB R1, ret+4(FP)
|
||||
RET
|
||||
|
||||
TEXT ·Store8(SB),NOSPLIT,$0-5
|
||||
MOVW addr+0(FP), R1
|
||||
MOVB v+4(FP), R2
|
||||
|
||||
MOVB runtime·goarm(SB), R8
|
||||
CMP $7, R8
|
||||
BGE native_barrier
|
||||
BL memory_barrier<>(SB)
|
||||
B store
|
||||
native_barrier:
|
||||
DMB MB_ISH
|
||||
|
||||
store:
|
||||
MOVB R2, (R1)
|
||||
|
||||
CMP $7, R8
|
||||
BGE native_barrier2
|
||||
BL memory_barrier<>(SB)
|
||||
RET
|
||||
native_barrier2:
|
||||
DMB MB_ISH
|
||||
RET
|
||||
|
@ -60,3 +60,20 @@ TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-5
|
||||
|
||||
MOVB R1, ret+4(FP)
|
||||
RET
|
||||
|
||||
TEXT ·Store8(SB),NOSPLIT,$0-5
|
||||
MOVW addr+0(FP), R1
|
||||
MOVB v+4(FP), R2
|
||||
|
||||
MOVB runtime·goarm(SB), R8
|
||||
CMP $7, R8
|
||||
BLT 2(PC)
|
||||
DMB MB_ISH
|
||||
|
||||
MOVB R2, (R1)
|
||||
|
||||
CMP $7, R8
|
||||
BLT 2(PC)
|
||||
DMB MB_ISH
|
||||
RET
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user