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))