ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libecb/ecb.h
(Generate patch)

Comparing libecb/ecb.h (file contents):
Revision 1.94 by root, Tue May 29 21:03:20 2012 UTC vs.
Revision 1.95 by root, Tue May 29 21:06:01 2012 UTC

92 92
93/* ECB_NO_THREADS - ecb is not used by multiple threads, ever */ 93/* ECB_NO_THREADS - ecb is not used by multiple threads, ever */
94/* ECB_NO_SMP - ecb might be used in multiple threads, but only on a single cpu */ 94/* ECB_NO_SMP - ecb might be used in multiple threads, but only on a single cpu */
95 95
96#if ECB_NO_THREADS 96#if ECB_NO_THREADS
97# define ECB_NO_SMP 1 97 #define ECB_NO_SMP 1
98#endif 98#endif
99 99
100#if ECB_NO_SMP 100#if ECB_NO_SMP
101 #define ECB_MEMORY_FENCE do { } while (0) 101 #define ECB_MEMORY_FENCE do { } while (0)
102#endif 102#endif
145 #elif defined __clang && __has_feature (cxx_atomic) 145 #elif defined __clang && __has_feature (cxx_atomic)
146 /* see above */ 146 /* see above */
147 #define ECB_MEMORY_FENCE __c11_atomic_thread_fence (__ATOMIC_SEQ_CST) 147 #define ECB_MEMORY_FENCE __c11_atomic_thread_fence (__ATOMIC_SEQ_CST)
148 #elif ECB_GCC_VERSION(4,4) || defined __INTEL_COMPILER || defined __clang__ 148 #elif ECB_GCC_VERSION(4,4) || defined __INTEL_COMPILER || defined __clang__
149 #define ECB_MEMORY_FENCE __sync_synchronize () 149 #define ECB_MEMORY_FENCE __sync_synchronize ()
150 /*#define ECB_MEMORY_FENCE_ACQUIRE ({ char dummy = 0; __sync_lock_test_and_set (&dummy, 1); }) */
151 /*#define ECB_MEMORY_FENCE_RELEASE ({ char dummy = 1; __sync_lock_release (&dummy ); }) */
152 #elif _MSC_VER >= 1400 /* VC++ 2005 */ 150 #elif _MSC_VER >= 1400 /* VC++ 2005 */
153 #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier) 151 #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier)
154 #define ECB_MEMORY_FENCE _ReadWriteBarrier () 152 #define ECB_MEMORY_FENCE _ReadWriteBarrier ()
155 #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier () /* according to msdn, _ReadBarrier is not a load fence */ 153 #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier () /* according to msdn, _ReadBarrier is not a load fence */
156 #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier () 154 #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier ()
173 /* not just C11 atomics and atomic accesses */ 171 /* not just C11 atomics and atomic accesses */
174 #include <stdatomic.h> 172 #include <stdatomic.h>
175 /* unfortunately, the C11 memory model seems to be very limited, and unable to express */ 173 /* unfortunately, the C11 memory model seems to be very limited, and unable to express */
176 /* simple barrier semantics. That means we need to take out thor's hammer. */ 174 /* simple barrier semantics. That means we need to take out thor's hammer. */
177 #define ECB_MEMORY_FENCE atomic_thread_fence (memory_order_seq_cst) 175 #define ECB_MEMORY_FENCE atomic_thread_fence (memory_order_seq_cst)
178 #endif
179 #endif 176 #endif
180#endif 177#endif
181 178
182#ifndef ECB_MEMORY_FENCE 179#ifndef ECB_MEMORY_FENCE
183 #if !ECB_AVOID_PTHREADS 180 #if !ECB_AVOID_PTHREADS

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines