diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/csptr.h | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/include/stc/csptr.h b/include/stc/csptr.h index da52d290..a8496654 100644 --- a/include/stc/csptr.h +++ b/include/stc/csptr.h @@ -62,14 +62,10 @@ typedef long atomic_count_t; #include <intrin.h>
#define c_atomic_inc(v) (void)_InterlockedIncrement(v)
#define c_atomic_dec_and_test(v) !_InterlockedDecrement(v)
-#elif defined(__i386__) || defined(__x86_64__)
- STC_INLINE void c_atomic_inc(atomic_count_t* v)
- { asm volatile("lock; incq %0" :"=m"(*v) :"m"(*v)); }
- STC_INLINE bool c_atomic_dec_and_test(atomic_count_t* v) {
- unsigned char c;
- asm volatile("lock; decq %0; sete %1" :"=m"(*v), "=qm"(c) :"m"(*v) :"memory");
- return !c;
- }
+#else
+ #include <stdatomic.h>
+ #define c_atomic_inc(v) (void)atomic_fetch_add(v, 1)
+ #define c_atomic_dec_and_test(v) (atomic_fetch_sub(v, 1) == 1)
#endif
#define csptr_null {NULL, NULL}
|
