From 5cc7519e92d0e8400de8709aebfcdb84f357dd93 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 8 Sep 2016 20:19:56 +0200 Subject: [PATCH] Add compare-exchange function to Atomic --- renderdoc/os/os_specific.h | 1 + renderdoc/os/posix/posix_threading.cpp | 5 +++++ renderdoc/os/win32/win32_threading.cpp | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/renderdoc/os/os_specific.h b/renderdoc/os/os_specific.h index ce4796980..b70feae00 100644 --- a/renderdoc/os/os_specific.h +++ b/renderdoc/os/os_specific.h @@ -204,6 +204,7 @@ int32_t Dec32(volatile int32_t *i); int64_t Inc64(volatile int64_t *i); int64_t Dec64(volatile int64_t *i); int64_t ExchAdd64(volatile int64_t *i, int64_t a); +int32_t CmpExch32(volatile int32_t *dest, int32_t exch, int32_t comp); }; namespace Callstack diff --git a/renderdoc/os/posix/posix_threading.cpp b/renderdoc/os/posix/posix_threading.cpp index 08a7ab1d8..bc915391b 100644 --- a/renderdoc/os/posix/posix_threading.cpp +++ b/renderdoc/os/posix/posix_threading.cpp @@ -59,6 +59,11 @@ int64_t ExchAdd64(volatile int64_t *i, int64_t a) { return __sync_add_and_fetch(i, int64_t(a)); } + +int32_t CmpExch32(volatile int32_t *dest, int32_t exch, int32_t comp) +{ + return __sync_val_compare_and_swap(dest, comp, exch); +} }; namespace Threading diff --git a/renderdoc/os/win32/win32_threading.cpp b/renderdoc/os/win32/win32_threading.cpp index 5c86723ae..946be7192 100644 --- a/renderdoc/os/win32/win32_threading.cpp +++ b/renderdoc/os/win32/win32_threading.cpp @@ -72,6 +72,11 @@ int64_t ExchAdd64(volatile int64_t *i, int64_t a) { return (int64_t)InterlockedExchangeAdd64((volatile LONG64 *)i, a); } + +int32_t CmpExch32(volatile int32_t *dest, int32_t exch, int32_t comp) +{ + return (int32_t)InterlockedCompareExchange((volatile LONG *)dest, exch, comp); +} }; namespace Threading