mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Add an atomic increment and decrement implementation, which will be used for
thread-safe reference counting. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73587 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -51,3 +51,31 @@ sys::cas_flag sys::CompareAndSwap(volatile sys::cas_flag* ptr,
|
||||
# error No compare-and-swap implementation for your platform!
|
||||
#endif
|
||||
}
|
||||
|
||||
sys::cas_flag sys::AtomicPostIncrement(volatile sys::cas_flag* ptr) {
|
||||
#if LLVM_MULTITHREADED==0
|
||||
++(*ptr);
|
||||
return *ptr;
|
||||
#elif defined(__GNUC__)
|
||||
return __sync_add_and_fetch(ptr, 1);
|
||||
#elif defined(_MSC_VER)
|
||||
return InterlockedCompareExchange(ptr, new_value, old_value);
|
||||
#else
|
||||
# error No atomic increment implementation for your platform!
|
||||
#endif
|
||||
}
|
||||
|
||||
sys::cas_flag sys::AtomicPostDecrement(volatile sys::cas_flag* ptr) {
|
||||
#if LLVM_MULTITHREADED==0
|
||||
--(*ptr);
|
||||
return *ptr;
|
||||
#elif defined(__GNUC__)
|
||||
return __sync_sub_and_fetch(ptr, 1);
|
||||
#elif defined(_MSC_VER)
|
||||
return InterlockedIncrement(ptr);
|
||||
#else
|
||||
# error No atomic decrement implementation for your platform!
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user