projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
uatomic: update atomic set/read, use STORE_SHARED/LOAD_SHARED
[urcu.git]
/
urcu
/
uatomic_arch_x86.h
diff --git
a/urcu/uatomic_arch_x86.h
b/urcu/uatomic_arch_x86.h
index fccea8e2d350321ebe9cbf4517a68866e4b5fa19..39ec407e58c0612458ffc82209e20fc711dec0fd 100644
(file)
--- a/
urcu/uatomic_arch_x86.h
+++ b/
urcu/uatomic_arch_x86.h
@@
-22,6
+22,14
@@
#include <urcu/compiler.h>
#include <urcu/compiler.h>
+#ifndef __SIZEOF_LONG__
+#if defined(__x86_64__) || defined(__amd64__)
+#define __SIZEOF_LONG__ 8
+#else
+#define __SIZEOF_LONG__ 4
+#endif
+#endif
+
#ifndef BITS_PER_LONG
#define BITS_PER_LONG (__SIZEOF_LONG__ * 8)
#endif
#ifndef BITS_PER_LONG
#define BITS_PER_LONG (__SIZEOF_LONG__ * 8)
#endif
@@
-402,7
+410,13
@@
void _uatomic_dec(void *addr, int len)
#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
#else
extern int __urcu_cas_avail;
#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
#else
extern int __urcu_cas_avail;
-#define URCU_CAS_AVAIL() __urcu_cas_avail
+extern int __urcu_cas_init(void);
+#define URCU_CAS_AVAIL() \
+ ((likely(__urcu_cas_avail > 0)) ? \
+ (1) : \
+ ((unlikely(__urcu_cas_avail < 0) ? \
+ (__urcu_cas_init()) : \
+ (0))))
extern unsigned long _compat_uatomic_cmpxchg(void *addr, unsigned long old,
unsigned long _new, int len);
extern unsigned long _compat_uatomic_cmpxchg(void *addr, unsigned long old,
unsigned long _new, int len);
This page took
0.026415 seconds
and
4
git commands to generate.