summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-04-20 10:44:52 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-04-20 12:33:37 +0900
commit20773a109029ba4464d7749d38a311f880a73293 (patch)
treef307810115b2633233c12608d29f86fc73453b2c
parente92f3e12169e94ba8b230322de938ce540899345 (diff)
Bail out if no atomic operation found
As atomic operations are mandatory now, not-working phony fallback definitions are not only useless but confusing and harmful.
-rw-r--r--ruby_atomic.h25
1 files changed, 1 insertions, 24 deletions
diff --git a/ruby_atomic.h b/ruby_atomic.h
index d4d56da424..d2338677ea 100644
--- a/ruby_atomic.h
+++ b/ruby_atomic.h
@@ -121,30 +121,7 @@ typedef unsigned int rb_atomic_t;
# endif
#else
-typedef int rb_atomic_t;
-#define NEED_RUBY_ATOMIC_OPS
-extern rb_atomic_t ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val);
-extern rb_atomic_t ruby_atomic_compare_and_swap(rb_atomic_t *ptr,
- rb_atomic_t cmp,
- rb_atomic_t newval);
-
-# define ATOMIC_SET(var, val) (void)((var) = (val))
-# define ATOMIC_INC(var) ((var)++)
-# define ATOMIC_DEC(var) ((var)--)
-# define ATOMIC_OR(var, val) ((var) |= (val))
-# define ATOMIC_EXCHANGE(var, val) ruby_atomic_exchange(&(var), (val))
-# define ATOMIC_CAS(var, oldval, newval) ruby_atomic_compare_and_swap(&(var), (oldval), (newval))
-
-# define ATOMIC_SIZE_ADD(var, val) (void)((var) += (val))
-# define ATOMIC_SIZE_SUB(var, val) (void)((var) -= (val))
-# define ATOMIC_SIZE_EXCHANGE(var, val) ruby_atomic_size_exchange(&(var), (val))
-static inline size_t
-ruby_atomic_size_exchange(size_t *ptr, size_t val)
-{
- size_t old = *ptr;
- *ptr = val;
- return old;
-}
+# error No atomic operation found
#endif
#ifndef ATOMIC_SIZE_INC