summaryrefslogtreecommitdiff
path: root/include/my_atomic.h
diff options
context:
space:
mode:
authorunknown <serg@serg.mylan>2006-06-29 15:39:53 +0200
committerunknown <serg@serg.mylan>2006-06-29 15:39:53 +0200
commit948caab031ac765d74e36b0dad2452cee1a05e74 (patch)
tree6caa01d28f4377fb975fe7fcfb08fd25f8c8437e /include/my_atomic.h
parentdb98fc9450255d881e2783eb2190029bb164d881 (diff)
downloadmariadb-git-948caab031ac765d74e36b0dad2452cee1a05e74.tar.gz
support for xadd emulation, workaround for Darwin
include/atomic/nolock.h: support for xadd emulation include/atomic/x86-msvc.h: syntax error include/my_atomic.h: support for xadd emulation, cleanup mysys/my_atomic.c: assert
Diffstat (limited to 'include/my_atomic.h')
-rw-r--r--include/my_atomic.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/include/my_atomic.h b/include/my_atomic.h
index 877443fe705..c916026c0e0 100644
--- a/include/my_atomic.h
+++ b/include/my_atomic.h
@@ -22,10 +22,17 @@
#include "atomic/nolock.h"
#endif
-#ifndef my_atomic_rwlock_init
+#ifndef make_atomic_cas_body
#include "atomic/rwlock.h"
#endif
+#ifndef make_atomic_add_body
+#define make_atomic_add_body(S) \
+ int ## S tmp=*a; \
+ while (!my_atomic_cas ## S(a, &tmp, tmp+v)); \
+ v=tmp;
+#endif
+
#ifdef HAVE_INLINE
#define make_atomic_add(S) \
@@ -87,15 +94,15 @@ extern void my_atomic_store ## S(int ## S volatile *a, int ## S v);
#endif
-make_atomic_add( 8)
-make_atomic_add(16)
-make_atomic_add(32)
-
make_atomic_cas( 8)
make_atomic_cas(16)
make_atomic_cas(32)
make_atomic_cas(ptr)
+make_atomic_add( 8)
+make_atomic_add(16)
+make_atomic_add(32)
+
make_atomic_load( 8)
make_atomic_load(16)
make_atomic_load(32)
@@ -116,13 +123,20 @@ make_atomic_swap(ptr)
#undef make_atomic_load
#undef make_atomic_store
#undef make_atomic_swap
-#undef intaptr
+#undef make_atomic_add_body
+#undef make_atomic_cas_body
+#undef make_atomic_load_body
+#undef make_atomic_store_body
+#undef make_atomic_swap_body
+#undef intptr
#ifdef _atomic_h_cleanup_
#include _atomic_h_cleanup_
#undef _atomic_h_cleanup_
#endif
+typedef int32 intptr; /* TODO configure check */
+
#define MY_ATOMIC_OK 0
#define MY_ATOMIC_NOT_1CPU 1
extern int my_atomic_initialize();