1// Copyright 2015 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//go:build arm64 6 7package atomic 8 9import ( 10 "internal/cpu" 11 "unsafe" 12) 13 14const ( 15 offsetARM64HasATOMICS = unsafe.Offsetof(cpu.ARM64.HasATOMICS) 16) 17 18//go:noescape 19func Xadd(ptr *uint32, delta int32) uint32 20 21//go:noescape 22func Xadd64(ptr *uint64, delta int64) uint64 23 24//go:noescape 25func Xadduintptr(ptr *uintptr, delta uintptr) uintptr 26 27//go:noescape 28func Xchg(ptr *uint32, new uint32) uint32 29 30//go:noescape 31func Xchg64(ptr *uint64, new uint64) uint64 32 33//go:noescape 34func Xchguintptr(ptr *uintptr, new uintptr) uintptr 35 36//go:noescape 37func Load(ptr *uint32) uint32 38 39//go:noescape 40func Load8(ptr *uint8) uint8 41 42//go:noescape 43func Load64(ptr *uint64) uint64 44 45// NO go:noescape annotation; *ptr escapes if result escapes (#31525) 46func Loadp(ptr unsafe.Pointer) unsafe.Pointer 47 48//go:noescape 49func LoadAcq(addr *uint32) uint32 50 51//go:noescape 52func LoadAcq64(ptr *uint64) uint64 53 54//go:noescape 55func LoadAcquintptr(ptr *uintptr) uintptr 56 57//go:noescape 58func Or8(ptr *uint8, val uint8) 59 60//go:noescape 61func And8(ptr *uint8, val uint8) 62 63//go:noescape 64func And(ptr *uint32, val uint32) 65 66//go:noescape 67func Or(ptr *uint32, val uint32) 68 69//go:noescape 70func And32(ptr *uint32, val uint32) uint32 71 72//go:noescape 73func Or32(ptr *uint32, val uint32) uint32 74 75//go:noescape 76func And64(ptr *uint64, val uint64) uint64 77 78//go:noescape 79func Or64(ptr *uint64, val uint64) uint64 80 81//go:noescape 82func Anduintptr(ptr *uintptr, val uintptr) uintptr 83 84//go:noescape 85func Oruintptr(ptr *uintptr, val uintptr) uintptr 86 87//go:noescape 88func Cas64(ptr *uint64, old, new uint64) bool 89 90//go:noescape 91func CasRel(ptr *uint32, old, new uint32) bool 92 93//go:noescape 94func Store(ptr *uint32, val uint32) 95 96//go:noescape 97func Store8(ptr *uint8, val uint8) 98 99//go:noescape 100func Store64(ptr *uint64, val uint64) 101 102// NO go:noescape annotation; see atomic_pointer.go. 103func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) 104 105//go:noescape 106func StoreRel(ptr *uint32, val uint32) 107 108//go:noescape 109func StoreRel64(ptr *uint64, val uint64) 110 111//go:noescape 112func StoreReluintptr(ptr *uintptr, val uintptr) 113