3 __forceinline static bool cas(volatile cell *ptr, cell old_val, cell new_val)
5 return InterlockedCompareExchange64(
6 reinterpret_cast<volatile LONG64 *>(ptr),
8 (LONG64)new_val) == (LONG64)old_val;
10 __forceinline static bool cas(volatile fixnum *ptr, fixnum old_val, fixnum new_val)
12 return InterlockedCompareExchange64(
13 reinterpret_cast<volatile LONG64 *>(ptr),
15 (LONG64)new_val) == (LONG64)old_val;
18 __forceinline static cell add(volatile cell *ptr, cell val)
20 return (cell)InterlockedAdd64(
21 reinterpret_cast<volatile LONG64 *>(ptr), (LONG64)val);
23 __forceinline static fixnum add(volatile fixnum *ptr, fixnum val)
25 return (fixnum)InterlockedAdd64(
26 reinterpret_cast<volatile LONG64 *>(ptr), (LONG64)val);
29 __forceinline static cell subtract(volatile cell *ptr, cell val)
31 return (cell)InterlockedAdd64(
32 reinterpret_cast<volatile LONG64 *>(ptr), -(LONG64)val);
34 __forceinline static fixnum subtract(volatile fixnum *ptr, fixnum val)
36 return (fixnum)InterlockedAdd64(
37 reinterpret_cast<volatile LONG64 *>(ptr), -(LONG64)val);
40 __forceinline static void fence()