github.com/primecitizens/pcz/std@v0.2.1/core/atomic/atomic_386.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright 2023 The Prime Citizens
     3  //
     4  // Copyright 2009 The Go Authors. All rights reserved.
     5  // Use of this source code is governed by a BSD-style
     6  // license that can be found in the LICENSE file.
     7  
     8  //go:build 386
     9  
    10  package atomic
    11  
    12  import "unsafe"
    13  
    14  //
    15  // Store
    16  //
    17  
    18  //go:noescape
    19  func Store8(ptr *uint8, val uint8)
    20  
    21  //go:noescape
    22  func Store32(ptr *uint32, val uint32)
    23  
    24  //go:noescape
    25  func Store64(ptr *uint64, val uint64)
    26  
    27  // NO go:noescape annotation; see atomic_pointer.go.
    28  func StorePointer(ptr unsafe.Pointer, val unsafe.Pointer)
    29  
    30  //
    31  // StoreRel
    32  //
    33  
    34  //go:noescape
    35  func StoreRel32(ptr *uint32, val uint32)
    36  
    37  //go:noescape
    38  func StoreRelUintptr(ptr *uintptr, val uintptr)
    39  
    40  //
    41  // Load
    42  //
    43  
    44  //go:nosplit
    45  //go:noinline
    46  func Load8(ptr *uint8) uint8 { return *ptr }
    47  
    48  //go:nosplit
    49  //go:noinline
    50  func Load32(ptr *uint32) uint32 { return *ptr }
    51  
    52  //go:noescape
    53  func Load64(ptr *uint64) uint64
    54  
    55  //go:nosplit
    56  //go:noinline
    57  func LoadPointer(ptr unsafe.Pointer) unsafe.Pointer { return *(*unsafe.Pointer)(ptr) }
    58  
    59  //
    60  // LoadAcq
    61  //
    62  
    63  //go:nosplit
    64  //go:noinline
    65  func LoadAcq32(ptr *uint32) uint32 { return *ptr }
    66  
    67  //go:nosplit
    68  //go:noinline
    69  func LoadAcqUintptr(ptr *uintptr) uintptr { return *ptr }
    70  
    71  //
    72  // Swap
    73  //
    74  
    75  //go:noescape
    76  func Swap64(ptr *uint64, new uint64) uint64
    77  
    78  //go:noescape
    79  func Swap32(ptr *uint32, new uint32) uint32
    80  
    81  //go:noescape
    82  func SwapUintptr(ptr *uintptr, new uintptr) uintptr
    83  
    84  //
    85  // Add
    86  //
    87  
    88  //go:noescape
    89  func Add32(ptr *uint32, delta int32) uint32
    90  
    91  //go:noescape
    92  func Add64(ptr *uint64, delta int64) uint64
    93  
    94  //go:noescape
    95  func AddUintptr(ptr *uintptr, delta uintptr) uintptr
    96  
    97  //
    98  // bitwise
    99  //
   100  // NOTE: Do not add atomicxor8 (XOR is not idempotent).
   101  
   102  //go:noescape
   103  func And8(ptr *uint8, val uint8)
   104  
   105  //go:noescape
   106  func And32(ptr *uint32, val uint32)
   107  
   108  //go:noescape
   109  func Or8(ptr *uint8, val uint8)
   110  
   111  //go:noescape
   112  func Or32(ptr *uint32, val uint32)
   113  
   114  //
   115  // Compare and swap
   116  //
   117  
   118  //go:noescape
   119  func Cas64(ptr *uint64, old, new uint64) bool
   120  
   121  //
   122  // CasRel
   123  //
   124  
   125  //go:noescape
   126  func CasRel32(ptr *uint32, old, new uint32) bool