diff options
| author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-14 11:27:00 +0000 |
|---|---|---|
| committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-14 11:27:00 +0000 |
| commit | dfc112202d9f58cb29b2df7dfffd82b26fd8104b (patch) | |
| tree | 26cf6af020a041541e75dafac5723419eda35d9a /atomic.h | |
| parent | c185d9cd225b332a13f8e3227b0c30a7996e59e8 (diff) | |
merge revision(s) 37604:
* ruby_atomic.h: renamed from atomic.h to avoid header file name
conflict on Solaris 10. [ruby-dev:46414] [Bug #7287]
* gc.c, signal.c, vm_core.h, common.mk: reflect the rename from
atomic.h to ruby_atomic.h.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@37654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'atomic.h')
| -rw-r--r-- | atomic.h | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/atomic.h b/atomic.h deleted file mode 100644 index 5b3fb99024..0000000000 --- a/atomic.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef RUBY_ATOMIC_H -#define RUBY_ATOMIC_H - -#ifdef _WIN32 -#if defined _MSC_VER && _MSC_VER > 1200 -#pragma intrinsic(_InterlockedOr) -#endif -typedef LONG rb_atomic_t; - -# define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val)) -# define ATOMIC_INC(var) InterlockedIncrement(&(var)) -# define ATOMIC_DEC(var) InterlockedDecrement(&(var)) -#if defined __GNUC__ -# define ATOMIC_OR(var, val) __asm__("lock\n\t" "orl\t%1, %0" : "=m"(var) : "Ir"(val)) -#elif defined _MSC_VER && _MSC_VER <= 1200 -# define ATOMIC_OR(var, val) rb_w32_atomic_or(&(var), (val)) -static inline void -rb_w32_atomic_or(volatile rb_atomic_t *var, rb_atomic_t val) -{ -#ifdef _M_IX86 - __asm mov eax, var; - __asm mov ecx, val; - __asm lock or [eax], ecx; -#else -#error unsupported architecture -#endif -} -#else -# define ATOMIC_OR(var, val) _InterlockedOr(&(var), (val)) -#endif -# define ATOMIC_EXCHANGE(var, val) InterlockedExchange(&(var), (val)) - -#elif defined HAVE_GCC_ATOMIC_BUILTINS -/* @shyouhei hack to support atomic operations in case of gcc. Gcc - * has its own pseudo-insns to support them. See info, or - * http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html */ - -typedef unsigned int rb_atomic_t; /* Anything OK */ -# define ATOMIC_SET(var, val) __sync_lock_test_and_set(&(var), (val)) -# define ATOMIC_INC(var) __sync_fetch_and_add(&(var), 1) -# define ATOMIC_DEC(var) __sync_fetch_and_sub(&(var), 1) -# define ATOMIC_OR(var, val) __sync_or_and_fetch(&(var), (val)) -# define ATOMIC_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val)) - -#else -typedef int rb_atomic_t; -extern rb_atomic_t ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val); - -# define ATOMIC_SET(var, val) ((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)) -#endif - -#endif /* RUBY_ATOMIC_H */ |
