You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/06/25 13:49:47 UTC
svn commit: r1139528 -
/commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c
Author: mturk
Date: Sat Jun 25 11:49:46 2011
New Revision: 1139528
URL: http://svn.apache.org/viewvc?rev=1139528&view=rev
Log:
Make common code more generic
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c?rev=1139528&r1=1139527&r2=1139528&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/atomic.c Sat Jun 25 11:49:46 2011
@@ -22,6 +22,15 @@
UNUSED_SOURCE_FILE(atomic);
#else
# if defined(__GNUC__)
+# if USE_BUILTIN_ATOMICS
+# define GCC_BUILTIN_ATOMICS 1
+# else
+# define GCC_BUILTIN_ATOMICS 0
+# endif
+# else /* !__GNUC__ */
+# define GCC_BUILTIN_ATOMICS 0
+# endif
+
void AcrCpuFence()
{
_PR_COMPILER_FENCE();
@@ -34,7 +43,7 @@ void AcrMemoryFence()
int AcrAtomic32Inc(volatile acr_atomic32_t *val)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
return (int)__sync_add_and_fetch(val, 1);
#else
_PR_COMPILER_FENCE();
@@ -44,7 +53,7 @@ int AcrAtomic32Inc(volatile acr_atomic32
int AcrAtomic32Dec(volatile acr_atomic32_t *val)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
return (int)__sync_sub_and_fetch(val, 1);
#else
_PR_COMPILER_FENCE();
@@ -54,7 +63,7 @@ int AcrAtomic32Dec(volatile acr_atomic32
int AcrAtomic32Cas(volatile acr_atomic32_t *val, int cmp, int set)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
return (int)__sync_val_compare_and_swap(val, cmp, set);
#else
_PR_COMPILER_FENCE();
@@ -67,7 +76,7 @@ int AcrAtomic32Cas(volatile acr_atomic32
void *AcrAtomic32CasPtr(void * volatile *val, const void *cmp, void *set)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
return (void *)__sync_val_compare_and_swap(val, cmp, set);
#else
_PR_COMPILER_FENCE();
@@ -81,7 +90,7 @@ void *AcrAtomic32CasPtr(void * volatile
int AcrAtomic32Set(volatile acr_atomic32_t *val, int num)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
__sync_synchronize();
return (int)__sync_lock_test_and_set(val, num);
#else
@@ -94,7 +103,7 @@ int AcrAtomic32Set(volatile acr_atomic32
void *AcrAtomic32SetPtr(void * volatile *val, void *set)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
__sync_synchronize();
return (void *)__sync_lock_test_and_set(val, set);
#else
@@ -107,14 +116,11 @@ void *AcrAtomic32SetPtr(void * volatile
int AcrAtomic32Equ(volatile acr_atomic32_t *val, int num)
{
-#if USE_BUILTIN_ATOMICS
+#if GCC_BUILTIN_ATOMICS
return __sync_bool_compare_and_swap(val, num, num);
#else
_PR_COMPILER_FENCE();
return *val == (acr_atomic32_t)num;
#endif
}
-# else /* !__GNUC__ */
-# error "Atomics are not implemented for this platform!"
-# endif
#endif /* USE_ATOMICS_WRAPPER */