...

Source file src/runtime/internal/atomic/atomic_386.go

     1	// Copyright 2009 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	// +build 386
     6	
     7	package atomic
     8	
     9	import "unsafe"
    10	
    11	// Export some functions via linkname to assembly in sync/atomic.
    12	//go:linkname Load
    13	//go:linkname Loadp
    14	
    15	//go:nosplit
    16	//go:noinline
    17	func Load(ptr *uint32) uint32 {
    18		return *ptr
    19	}
    20	
    21	//go:nosplit
    22	//go:noinline
    23	func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
    24		return *(*unsafe.Pointer)(ptr)
    25	}
    26	
    27	//go:nosplit
    28	//go:noinline
    29	func LoadAcq(ptr *uint32) uint32 {
    30		return *ptr
    31	}
    32	
    33	//go:noescape
    34	func Xadd64(ptr *uint64, delta int64) uint64
    35	
    36	//go:noescape
    37	func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
    38	
    39	//go:noescape
    40	func Xadd(ptr *uint32, delta int32) uint32
    41	
    42	//go:noescape
    43	func Xchg64(ptr *uint64, new uint64) uint64
    44	
    45	//go:noescape
    46	func Xchg(ptr *uint32, new uint32) uint32
    47	
    48	//go:noescape
    49	func Xchguintptr(ptr *uintptr, new uintptr) uintptr
    50	
    51	//go:noescape
    52	func Load64(ptr *uint64) uint64
    53	
    54	//go:nosplit
    55	//go:noinline
    56	func Load8(ptr *uint8) uint8 {
    57		return *ptr
    58	}
    59	
    60	//go:noescape
    61	func And8(ptr *uint8, val uint8)
    62	
    63	//go:noescape
    64	func Or8(ptr *uint8, val uint8)
    65	
    66	// NOTE: Do not add atomicxor8 (XOR is not idempotent).
    67	
    68	//go:noescape
    69	func Cas64(ptr *uint64, old, new uint64) bool
    70	
    71	//go:noescape
    72	func CasRel(ptr *uint32, old, new uint32) bool
    73	
    74	//go:noescape
    75	func Store(ptr *uint32, val uint32)
    76	
    77	//go:noescape
    78	func Store64(ptr *uint64, val uint64)
    79	
    80	//go:noescape
    81	func StoreRel(ptr *uint32, val uint32)
    82	
    83	// NO go:noescape annotation; see atomic_pointer.go.
    84	func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
    85	

View as plain text