...

Source file src/pkg/runtime/internal/atomic/atomic_s390x.go

     1	// Copyright 2016 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package atomic
     6	
     7	import "unsafe"
     8	
     9	// Export some functions via linkname to assembly in sync/atomic.
    10	//go:linkname Load
    11	//go:linkname Loadp
    12	//go:linkname Load64
    13	
    14	//go:nosplit
    15	//go:noinline
    16	func Load(ptr *uint32) uint32 {
    17		return *ptr
    18	}
    19	
    20	//go:nosplit
    21	//go:noinline
    22	func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
    23		return *(*unsafe.Pointer)(ptr)
    24	}
    25	
    26	//go:nosplit
    27	//go:noinline
    28	func Load8(ptr *uint8) uint8 {
    29		return *ptr
    30	}
    31	
    32	//go:nosplit
    33	//go:noinline
    34	func Load64(ptr *uint64) uint64 {
    35		return *ptr
    36	}
    37	
    38	//go:nosplit
    39	//go:noinline
    40	func LoadAcq(ptr *uint32) uint32 {
    41		return *ptr
    42	}
    43	
    44	//go:noescape
    45	func Store(ptr *uint32, val uint32)
    46	
    47	//go:noescape
    48	func Store64(ptr *uint64, val uint64)
    49	
    50	// NO go:noescape annotation; see atomic_pointer.go.
    51	func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
    52	
    53	//go:nosplit
    54	//go:noinline
    55	func StoreRel(ptr *uint32, val uint32) {
    56		*ptr = val
    57	}
    58	
    59	//go:noescape
    60	func And8(ptr *uint8, val uint8)
    61	
    62	//go:noescape
    63	func Or8(ptr *uint8, val uint8)
    64	
    65	// NOTE: Do not add atomicxor8 (XOR is not idempotent).
    66	
    67	//go:noescape
    68	func Xadd(ptr *uint32, delta int32) uint32
    69	
    70	//go:noescape
    71	func Xadd64(ptr *uint64, delta int64) uint64
    72	
    73	//go:noescape
    74	func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
    75	
    76	//go:noescape
    77	func Xchg(ptr *uint32, new uint32) uint32
    78	
    79	//go:noescape
    80	func Xchg64(ptr *uint64, new uint64) uint64
    81	
    82	//go:noescape
    83	func Xchguintptr(ptr *uintptr, new uintptr) uintptr
    84	
    85	//go:noescape
    86	func Cas64(ptr *uint64, old, new uint64) bool
    87	
    88	//go:noescape
    89	func CasRel(ptr *uint32, old, new uint32) bool
    90	

View as plain text