From 840d91c62e30134d184a371e85e1b86ad36b6076 Mon Sep 17 00:00:00 2001 From: James Benton Date: Mon, 10 Apr 2017 23:17:19 +0100 Subject: [PATCH] coreinit: Add 32 bit atomic exports. --- include/coreinit/atomic.h | 59 +++++++++++++++++++++++++++++++++++++++ rpl/coreinit/exports.h | 11 ++++++++ 2 files changed, 70 insertions(+) create mode 100644 include/coreinit/atomic.h diff --git a/include/coreinit/atomic.h b/include/coreinit/atomic.h new file mode 100644 index 00000000..b6ff335d --- /dev/null +++ b/include/coreinit/atomic.h @@ -0,0 +1,59 @@ +#pragma once +#include + +/** + * \defgroup coreinit_atomic Atomic Operations + * \ingroup coreinit + * + * These functions are used for atomically operating on 32 bit values in memory. + * @{ + */ + +#ifdef __cplusplus +extern "C" { +#endif + +BOOL +OSCompareAndSwapAtomic(volatile uint32_t *ptr, + uint32_t compare, + uint32_t value); + +BOOL +OSCompareAndSwapAtomicEx(volatile uint32_t *ptr, + uint32_t compare, + uint32_t value, + uint32_t *old); + +uint32_t +OSSwapAtomic(volatile uint32_t *ptr, + uint32_t value); + +int32_t +OSAddAtomic(volatile int32_t *ptr, + int32_t value); + +uint32_t +OSAndAtomic(volatile uint32_t *ptr, + uint32_t value); + +uint32_t +OSOrAtomic(volatile uint32_t *ptr, + uint32_t value); + +uint32_t +OSXorAtomic(volatile uint32_t *ptr, + uint32_t value); + +BOOL +OSTestAndClearAtomic(volatile uint32_t *ptr, + uint32_t bit); + +BOOL +OSTestAndSetAtomic(volatile uint32_t *ptr, + uint32_t bit); + +#ifdef __cplusplus +} +#endif + +/** @} */ diff --git a/rpl/coreinit/exports.h b/rpl/coreinit/exports.h index c0280169..7924a075 100644 --- a/rpl/coreinit/exports.h +++ b/rpl/coreinit/exports.h @@ -12,6 +12,17 @@ EXPORT(OSSetAlarmTag); EXPORT(OSSetAlarmUserData); EXPORT(OSWaitAlarm); +// coreinit/atomic.h +EXPORT(OSCompareAndSwapAtomic); +EXPORT(OSCompareAndSwapAtomicEx); +EXPORT(OSSwapAtomic); +EXPORT(OSAddAtomic); +EXPORT(OSAndAtomic); +EXPORT(OSOrAtomic); +EXPORT(OSXorAtomic); +EXPORT(OSTestAndClearAtomic); +EXPORT(OSTestAndSetAtomic); + // coreinit/atomic64.h EXPORT(OSGetAtomic64); EXPORT(OSSetAtomic64);