From 38ca5cca0095d1a00a280009ab49772ce8749e91 Mon Sep 17 00:00:00 2001 From: usa Date: Wed, 4 Jul 2012 02:53:20 +0000 Subject: [PATCH] * gc.c (ATOMIC_SIZE_*): 64bit Windows support. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ gc.c | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51a6690d13..0dba9bcc4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Jul 4 11:52:12 2012 NAKAMURA Usaku + + * gc.c (ATOMIC_SIZE_*): 64bit Windows support. + Wed Jul 4 11:11:28 2012 Nobuyoshi Nakada * eval.c (rb_frame_callee, rb_f_callee_name): fix to return the called diff --git a/gc.c b/gc.c index 82e250bdb6..72a2e2b575 100644 --- a/gc.c +++ b/gc.c @@ -61,11 +61,19 @@ #endif #if defined _WIN32 -# define ATOMIC_SIZE_ADD(var, val) InterlockedExchangeAdd(&(var), (val)) -# define ATOMIC_SIZE_SUB(var, val) InterlockedExchangeAdd(&(var), -(val)) -# define ATOMIC_SIZE_INC(var) InterlockedIncrement(&(var)) -# define ATOMIC_SIZE_DEC(var) InterlockedDecrement(&(var)) -# define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange(&(var), (val)) +# ifdef _M_AMD64 +# define ATOMIC_SIZE_ADD(var, val) InterlockedExchangeAdd64(&(var), (val)) +# define ATOMIC_SIZE_SUB(var, val) InterlockedExchangeAdd64(&(var), -(val)) +# define ATOMIC_SIZE_INC(var) InterlockedIncrement64(&(var)) +# define ATOMIC_SIZE_DEC(var) InterlockedDecrement64(&(var)) +# define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange64(&(var), (val)) +# else +# define ATOMIC_SIZE_ADD(var, val) InterlockedExchangeAdd(&(var), (val)) +# define ATOMIC_SIZE_SUB(var, val) InterlockedExchangeAdd(&(var), -(val)) +# define ATOMIC_SIZE_INC(var) InterlockedIncrement(&(var)) +# define ATOMIC_SIZE_DEC(var) InterlockedDecrement(&(var)) +# define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange(&(var), (val)) +# endif #elif defined HAVE_GCC_ATOMIC_BUILTINS # define ATOMIC_SIZE_ADD(var, val) __sync_fetch_and_add(&(var), (val)) # define ATOMIC_SIZE_SUB(var, val) __sync_fetch_and_sub(&(var), (val))