Home | History | Annotate | Download | only in atomic
      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 amd64 amd64p32
      6 
      7 package atomic
      8 
      9 import "unsafe"
     10 
     11 //go:nosplit
     12 //go:noinline
     13 func Load(ptr *uint32) uint32 {
     14 	return *ptr
     15 }
     16 
     17 //go:nosplit
     18 //go:noinline
     19 func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
     20 	return *(*unsafe.Pointer)(ptr)
     21 }
     22 
     23 //go:nosplit
     24 //go:noinline
     25 func Load64(ptr *uint64) uint64 {
     26 	return *ptr
     27 }
     28 
     29 //go:noescape
     30 func Xadd(ptr *uint32, delta int32) uint32
     31 
     32 //go:noescape
     33 func Xadd64(ptr *uint64, delta int64) uint64
     34 
     35 //go:noescape
     36 func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
     37 
     38 //go:noescape
     39 func Xchg(ptr *uint32, new uint32) uint32
     40 
     41 //go:noescape
     42 func Xchg64(ptr *uint64, new uint64) uint64
     43 
     44 //go:noescape
     45 func Xchguintptr(ptr *uintptr, new uintptr) uintptr
     46 
     47 //go:noescape
     48 func And8(ptr *uint8, val uint8)
     49 
     50 //go:noescape
     51 func Or8(ptr *uint8, val uint8)
     52 
     53 // NOTE: Do not add atomicxor8 (XOR is not idempotent).
     54 
     55 //go:noescape
     56 func Cas64(ptr *uint64, old, new uint64) bool
     57 
     58 //go:noescape
     59 func Store(ptr *uint32, val uint32)
     60 
     61 //go:noescape
     62 func Store64(ptr *uint64, val uint64)
     63 
     64 // StorepNoWB performs *ptr = val atomically and without a write
     65 // barrier.
     66 //
     67 // NO go:noescape annotation; see atomic_pointer.go.
     68 func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
     69