[前][次][番号順一覧][スレッド一覧]

ruby-changes:24485

From: nobu <ko1@a...>
Date: Wed, 25 Jul 2012 17:17:20 +0900 (JST)
Subject: [ruby-changes:24485] nobu:r36536 (trunk): atomic.h: prefer GCC atomic builtins

nobu	2012-07-25 17:17:08 +0900 (Wed, 25 Jul 2012)

  New Revision: 36536

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36536

  Log:
    atomic.h: prefer GCC atomic builtins
    
    * atomic.h: prefer GCC atomic builtins than Windows APIs, if possible,
      since they are generic.

  Modified files:
    trunk/ChangeLog
    trunk/atomic.h

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36535)
+++ ChangeLog	(revision 36536)
@@ -1,3 +1,8 @@
+Wed Jul 25 17:17:05 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* atomic.h: prefer GCC atomic builtins than Windows APIs, if possible,
+	  since they are generic.
+
 Wed Jul 25 11:16:57 2012  Eric Hodel  <drbrain@s...>
 
 	* lib/net/.document:  Removed.  All files in net/ should be included in
Index: atomic.h
===================================================================
--- atomic.h	(revision 36535)
+++ atomic.h	(revision 36536)
@@ -1,7 +1,26 @@
 #ifndef RUBY_ATOMIC_H
 #define RUBY_ATOMIC_H
 
-#ifdef _WIN32
+#if 0
+#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)  (void)__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))
+
+# define ATOMIC_SIZE_ADD(var, val) __sync_fetch_and_add(&(var), (val))
+# define ATOMIC_SIZE_SUB(var, val) __sync_fetch_and_sub(&(var), (val))
+# define ATOMIC_SIZE_INC(var) __sync_fetch_and_add(&(var), 1)
+# define ATOMIC_SIZE_DEC(var) __sync_fetch_and_sub(&(var), 1)
+# define ATOMIC_SIZE_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val))
+
+#elif defined _WIN32
 #if defined _MSC_VER && _MSC_VER > 1200
 #pragma intrinsic(_InterlockedOr)
 #endif
@@ -44,24 +63,6 @@
 #  define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange((LONG *)&(var), (val))
 # endif
 
-#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)  (void)__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))
-
-# define ATOMIC_SIZE_ADD(var, val) __sync_fetch_and_add(&(var), (val))
-# define ATOMIC_SIZE_SUB(var, val) __sync_fetch_and_sub(&(var), (val))
-# define ATOMIC_SIZE_INC(var) __sync_fetch_and_add(&(var), 1)
-# define ATOMIC_SIZE_DEC(var) __sync_fetch_and_sub(&(var), 1)
-# define ATOMIC_SIZE_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val))
-
 #elif defined(__sun)
 #include <atomic.h>
 typedef unsigned int rb_atomic_t;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]