summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/winsync.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/windows/winsync.c')
-rw-r--r--src/osd/windows/winsync.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/osd/windows/winsync.c b/src/osd/windows/winsync.c
index 4d86d2ef061..ac84373e43d 100644
--- a/src/osd/windows/winsync.c
+++ b/src/osd/windows/winsync.c
@@ -132,26 +132,43 @@ void osd_lock_free(osd_lock *lock)
//============================================================
-// osd_compare_exchange32
+// win_compare_exchange32
//============================================================
-#ifndef osd_compare_exchange32
-INT32 osd_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
+INT32 win_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
{
return InterlockedCompareExchange((LPLONG)ptr, (LONG)exchange, (LONG)compare);
}
-#endif
//============================================================
-// osd_compare_exchange64
+// win_compare_exchange64
//============================================================
#ifdef PTR64
-#ifndef osd_compare_exchange64
-INT64 osd_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
+INT64 win_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
{
return InterlockedCompareExchange64((LONGLONG*)ptr, (LONGLONG)exchange, (LONGLONG)compare);
}
#endif
-#endif
+
+
+//============================================================
+// win_atomic_exchange32
+//============================================================
+
+INT32 win_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
+{
+ return InterlockedExchange((LONG *) ptr, exchange);
+}
+
+
+//============================================================
+// win_atomic_add32
+//============================================================
+
+INT32 win_atomic_add32(INT32 volatile *ptr, INT32 delta)
+{
+ return InterlockedExchangeAdd((LONG *) ptr, delta) + delta;
+}
+