diff options
Diffstat (limited to 'src/runtime/internal')
| -rw-r--r-- | src/runtime/internal/atomic/asm_s390x.s | 24 | ||||
| -rw-r--r-- | src/runtime/internal/atomic/atomic_s390x.go | 25 |
2 files changed, 30 insertions, 19 deletions
diff --git a/src/runtime/internal/atomic/asm_s390x.s b/src/runtime/internal/atomic/asm_s390x.s index 512fde5a12..084f5b5163 100644 --- a/src/runtime/internal/atomic/asm_s390x.s +++ b/src/runtime/internal/atomic/asm_s390x.s @@ -4,6 +4,30 @@ #include "textflag.h" +// func Store(ptr *uint32, val uint32) +TEXT ·Store(SB), NOSPLIT, $0 + MOVD ptr+0(FP), R2 + MOVWZ val+8(FP), R3 + MOVW R3, 0(R2) + SYNC + RET + +// func Store64(ptr *uint64, val uint64) +TEXT ·Store64(SB), NOSPLIT, $0 + MOVD ptr+0(FP), R2 + MOVD val+8(FP), R3 + MOVD R3, 0(R2) + SYNC + RET + +// func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) +TEXT ·StorepNoWB(SB), NOSPLIT, $0 + MOVD ptr+0(FP), R2 + MOVD val+8(FP), R3 + MOVD R3, 0(R2) + SYNC + RET + // func Cas(ptr *uint32, old, new uint32) bool // Atomically: // if *ptr == old { diff --git a/src/runtime/internal/atomic/atomic_s390x.go b/src/runtime/internal/atomic/atomic_s390x.go index 0ad96d3502..5a1f411ca1 100644 --- a/src/runtime/internal/atomic/atomic_s390x.go +++ b/src/runtime/internal/atomic/atomic_s390x.go @@ -36,30 +36,17 @@ func LoadAcq(ptr *uint32) uint32 { return *ptr } -//go:noinline -//go:nosplit -func Store(ptr *uint32, val uint32) { - *ptr = val -} - -//go:noinline -//go:nosplit -func Store64(ptr *uint64, val uint64) { - *ptr = val -} +//go:noescape +func Store(ptr *uint32, val uint32) -//go:notinheap -type noWB struct{} +//go:noescape +func Store64(ptr *uint64, val uint64) // NO go:noescape annotation; see atomic_pointer.go. -//go:noinline -//go:nosplit -func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) { - *(**noWB)(ptr) = (*noWB)(val) -} +func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) -//go:noinline //go:nosplit +//go:noinline func StoreRel(ptr *uint32, val uint32) { *ptr = val } |
