sdk: Add atomic operations to SDK

Signed-off-by: Chloe M <chloe@yiffware.org>
This commit is contained in:
2026-07-09 20:37:57 -04:00
parent ef10dfa61c
commit a4b1418c22
+46
View File
@@ -0,0 +1,46 @@
/*
* Copyright (c) 2026, Chloe M., et al.
* Provided under the BSD-3 clause.
*
* Description: Atomic operations
* Author: Chloe M.
*/
#ifndef _SDK_ATOMIC_H_
#define _SDK_ATOMIC_H_ 1
#include <stdef.h>
static inline ULONG
AtomicAddLongNv(volatile ULONG *Ptr, ULONG Value)
{
return __sync_add_and_fetch(Ptr, Value);
}
static inline UQUAD
AtomicAddQuadNv(volatile UQUAD *Ptr, UQUAD Value)
{
return __sync_add_and_fetch(Ptr, Value);
}
static inline ULONG
AtomicSubLongNv(volatile ULONG *Ptr, ULONG Value)
{
return __sync_sub_and_fetch(Ptr, Value);
}
static inline ULONG
AtomicSubQuadNv(volatile UQUAD *Ptr, UQUAD Value)
{
return __sync_sub_and_fetch(Ptr, Value);
}
/* Atomic increment and fetch operations */
#define AtomicIncLong(P) AtomicAddLongNv((P), 1)
#define AtomicIncQuad(P) AtomicAddQuadNv((P), 1)
/* Atomic decrement and fetch operations */
#define AtomicDecLong(P) AtomicSubLongNv((P), 1)
#define AtomicDecQuad(P) AtomicSubQuadNv((P), 1)
#endif /* !_SDK_ATOMIC_H_ */