MU Library
atomic.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright 2024 XCENA Inc.
3 
4 #pragma once
5 
6 #include <cstdint>
7 
8 namespace mu
9 {
10 
20 int32_t atomicAdd(int32_t* address, int32_t val);
21 
31 int32_t atomicAddAsync(int32_t* address, int32_t val);
32 
42 uint32_t atomicAnd(uint32_t* address, uint32_t val);
43 
53 uint32_t atomicAndAsync(uint32_t* address, uint32_t val);
54 
64 uint32_t atomicOr(uint32_t* address, uint32_t val);
65 
75 uint32_t atomicOrAsync(uint32_t* address, uint32_t val);
76 
86 uint32_t atomicXor(uint32_t* address, uint32_t val);
87 
97 uint32_t atomicXorAsync(uint32_t* address, uint32_t val);
98 
108 int32_t atomicInc(int32_t* address, int32_t val);
109 
119 int32_t atomicIncAsync(int32_t* address, int32_t val);
120 
130 int32_t atomicDec(int32_t* address, int32_t val);
131 
141 int32_t atomicDecAsync(int32_t* address, int32_t val);
142 
152 int32_t atomicMin(int32_t* address, int32_t val);
153 
163 int32_t atomicMax(int32_t* address, int32_t val);
164 
171 int32_t atomicSwap(int32_t* address, int32_t val);
172 
183 int32_t atomicCAS(int32_t* address, int32_t val, int32_t compare);
184 
192 int64_t atomicSwap58(int64_t* address, int64_t val);
193 
203 uint64_t atomicOr58(uint64_t* address, uint64_t val);
204 
214 uint64_t atomicAnd58(uint64_t* address, uint64_t val);
215 
225 uint64_t atomicXor58(uint64_t* address, uint64_t val);
226 
232 int32_t atomicLoad(int32_t* address);
233 
240 int64_t atomicLoad58(int64_t* address);
241 
251 int32_t atomicStoreAsync(int32_t* address, int32_t val);
252 
262 int64_t atomicStore58Async(int64_t* address, int64_t val);
263 
264 } // namespace mu
Definition: assert.hpp:9
int32_t atomicStoreAsync(int32_t *address, int32_t val)
Atomically stores a value to memory asynchronously.
int32_t atomicAdd(int32_t *address, int32_t val)
Atomically adds a value to memory.
int32_t atomicAddAsync(int32_t *address, int32_t val)
Atomically adds a value to memory asynchronously.
int32_t atomicMax(int32_t *address, int32_t val)
Atomically sets memory to maximum of current and new value.
int32_t atomicCAS(int32_t *address, int32_t val, int32_t compare)
Atomically compares and swaps memory value.
int32_t atomicIncAsync(int32_t *address, int32_t val)
Atomically increments memory value asynchronously.
uint64_t atomicAnd58(uint64_t *address, uint64_t val)
Atomically performs bitwise AND operation with memory (58-bit)
int32_t atomicInc(int32_t *address, int32_t val)
Atomically increments memory value.
uint64_t atomicOr58(uint64_t *address, uint64_t val)
Atomically performs bitwise OR operation with memory (58-bit)
int32_t atomicLoad(int32_t *address)
Atomically reads a value from memory.
uint32_t atomicXorAsync(uint32_t *address, uint32_t val)
Atomically performs bitwise XOR operation with memory asynchronously.
uint32_t atomicXor(uint32_t *address, uint32_t val)
Atomically performs bitwise XOR operation with memory.
int32_t atomicSwap(int32_t *address, int32_t val)
Atomically exchanges memory value with new value.
int64_t atomicLoad58(int64_t *address)
Atomically reads a value from memory (58-bit)
int32_t atomicDec(int32_t *address, int32_t val)
Atomically decrements memory value.
uint32_t atomicAnd(uint32_t *address, uint32_t val)
Atomically performs bitwise AND operation with memory.
uint32_t atomicOr(uint32_t *address, uint32_t val)
Atomically performs bitwise OR operation with memory.
int32_t atomicDecAsync(int32_t *address, int32_t val)
Atomically decrements memory value asynchronously.
uint32_t atomicAndAsync(uint32_t *address, uint32_t val)
Atomically performs bitwise AND operation with memory asynchronously.
int64_t atomicStore58Async(int64_t *address, int64_t val)
Atomically stores a value to memory asynchronously (58-bit)
uint32_t atomicOrAsync(uint32_t *address, uint32_t val)
Atomically performs bitwise OR operation with memory asynchronously.
uint64_t atomicXor58(uint64_t *address, uint64_t val)
Atomically performs bitwise XOR operation with memory (58-bit)
int64_t atomicSwap58(int64_t *address, int64_t val)
Atomically exchanges memory value with new value (58-bit)
int32_t atomicMin(int32_t *address, int32_t val)
Atomically sets memory to minimum of current and new value.