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:
Owen Anderson
2009-06-17 00:13:00 +00:00
parent 142fb2acdd
commit 9a3df671ab
5 changed files with 35 additions and 4 deletions
+28
View File
@@ -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
}