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

ruby-changes:17584

From: shyouhei <ko1@a...>
Date: Mon, 25 Oct 2010 16:47:00 +0900 (JST)
Subject: [ruby-changes:17584] Ruby:r29589 (trunk): * signal.c (rb_atomic_t): GCC (of at least recent versions)

shyouhei	2010-10-25 16:46:53 +0900 (Mon, 25 Oct 2010)

  New Revision: 29589

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

  Log:
    * signal.c  (rb_atomic_t): GCC (of  at least  recent versions)
      has  ubiquitos  support  for  atomic  operations.   On  that
      compiler a C  program can isse a memory  barrier using these
      dedicated  instructions.  According to  the GCC  manual they
      cargo culted  this feature form  the Itanium ABI  so chances
      are that  other compilers  could also support  this feature.
      But so far GCC is the  only compiler that I know to have it.
      Also note that this works on non-Itanium machines.

  Modified files:
    trunk/ChangeLog
    trunk/signal.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29588)
+++ ChangeLog	(revision 29589)
@@ -1,3 +1,14 @@
+Mon Oct 25 16:38:07 2010  URABE Shyouhei  <shyouhei@r...>
+
+	* signal.c  (rb_atomic_t): GCC (of  at least  recent versions)
+	  has  ubiquitos  support  for  atomic  operations.   On  that
+	  compiler a C  program can isse a memory  barrier using these
+	  dedicated  instructions.  According to  the GCC  manual they
+	  cargo culted  this feature form  the Itanium ABI  so chances
+	  are that  other compilers  could also support  this feature.
+	  But so far GCC is the  only compiler that I know to have it.
+	  Also note that this works on non-Itanium machines.
+
 Mon Oct 25 06:21:35 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* vsnprintf.c (BSD_vfprintf): prec digits fractal part should be
Index: signal.c
===================================================================
--- signal.c	(revision 29588)
+++ signal.c	(revision 29589)
@@ -25,6 +25,17 @@
 # define ATOMIC_INC(var) InterlockedIncrement(&(var))
 # define ATOMIC_DEC(var) InterlockedDecrement(&(var))
 
+#elsif __GNUC__ >= 4
+/* @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 char rb_atomic_t; /* Anything OK */
+# define ATOMIC_TEST(var) __sync_lock_test_and_set(&(var), 0)
+# 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)
+
 #else
 typedef int rb_atomic_t;
 

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

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