aboutsummaryrefslogtreecommitdiff
path: root/vendor/sdl3/sdl3_atomic.odin
blob: fefe8c8618f5708399a447177f6d35523d82ae3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package sdl3

import "base:intrinsics"
import "core:c"

SpinLock :: distinct c.int

@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
	@(require_results)
	TryLockSpinlock :: proc(lock: ^SpinLock) -> bool ---
	LockSpinlock    :: proc(lock: ^SpinLock) ---
	UnlockSpinlock  :: proc(lock: ^SpinLock) ---


	MemoryBarrierReleaseFunction :: proc() ---
	MemoryBarrierAcquireFunction :: proc() ---
}

MemoryBarrierRelease :: MemoryBarrierReleaseFunction
MemoryBarrierAcquire :: MemoryBarrierAcquireFunction

CPUPauseInstruction :: intrinsics.cpu_relax


AtomicInt :: distinct c.int
AtomicU32 :: distinct Uint32

@(default_calling_convention="c", link_prefix="SDL_", require_results)
foreign lib {
	CompareAndSwapAtomicInt :: proc(a: ^AtomicInt, oldval, newval: c.int) -> bool ---
	SetAtomicInt            :: proc(a: ^AtomicInt, v: c.int) -> int ---
	GetAtomicInt            :: proc(a: ^AtomicInt) -> int ---
	AddAtomicInt            :: proc(a: ^AtomicInt, v: c.int) -> int ---

	CompareAndSwapAtomicU32     :: proc(a: ^AtomicU32, oldval, newval: Uint32) -> bool ---
	SetAtomicU32                :: proc(a: ^AtomicU32, v: Uint32) -> Uint32 ---
	GetAtomicU32                :: proc(a: ^AtomicU32) -> Uint32 ---
	AddAtomicU32                :: proc(a: ^AtomicU32) -> Uint32 ---
	CompareAndSwapAtomicPointer :: proc(a: ^rawptr, oldval, newval: rawptr) -> bool ---
	SetAtomicPointer            :: proc(a: ^rawptr, v: rawptr) -> rawptr ---
	GetAtomicPointer            :: proc(a: ^rawptr) -> rawptr ---
}