7 #ifndef V8_BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_
8 #define V8_BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_
13 #if defined(V8_HOST_ARCH_64_BIT)
28 LONG result = InterlockedCompareExchange(
29 reinterpret_cast<volatile LONG*
>(ptr),
30 static_cast<LONG
>(new_value),
31 static_cast<LONG
>(old_value));
32 return static_cast<Atomic32>(result);
37 LONG result = InterlockedExchange(
38 reinterpret_cast<volatile LONG*
>(ptr),
39 static_cast<LONG
>(new_value));
40 return static_cast<Atomic32>(result);
45 return InterlockedExchangeAdd(
46 reinterpret_cast<volatile LONG*
>(ptr),
47 static_cast<LONG
>(increment)) + increment;
55 #if !(defined(_MSC_VER) && _MSC_VER >= 1400)
56 #error "We require at least vs2005 for MemoryBarrier"
59 #if defined(V8_HOST_ARCH_64_BIT)
124 Atomic64 new_value) {
125 PVOID result = InterlockedCompareExchangePointer(
126 reinterpret_cast<volatile PVOID*
>(ptr),
127 reinterpret_cast<PVOID>(new_value),
reinterpret_cast<PVOID>(old_value));
128 return reinterpret_cast<Atomic64
>(result);
132 Atomic64 new_value) {
133 PVOID result = InterlockedExchangePointer(
134 reinterpret_cast<volatile PVOID*
>(ptr),
135 reinterpret_cast<PVOID>(new_value));
136 return reinterpret_cast<Atomic64
>(result);
140 Atomic64 increment) {
141 return InterlockedExchangeAdd64(
142 reinterpret_cast<volatile LONGLONG*
>(ptr),
143 static_cast<LONGLONG
>(increment)) + increment;
147 Atomic64 increment) {
155 inline void Acquire_Store(
volatile Atomic64* ptr, Atomic64 value) {
160 inline void Release_Store(
volatile Atomic64* ptr, Atomic64 value) {
175 inline Atomic64
Acquire_Load(
volatile const Atomic64* ptr) {
176 Atomic64 value = *ptr;
180 inline Atomic64
Release_Load(
volatile const Atomic64* ptr) {
187 Atomic64 new_value) {
193 Atomic64 new_value) {
#define STATIC_ASSERT(test)
Atomic32 Release_Load(volatile const Atomic32 *ptr)
Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value)
Atomic32 Acquire_Load(volatile const Atomic32 *ptr)
Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
void Release_Store(volatile Atomic32 *ptr, Atomic32 value)
Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
void NoBarrier_Store(volatile Atomic8 *ptr, Atomic8 value)
Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, Atomic32 new_value)
typedef PVOID(__stdcall *DLL_FUNC_TYPE(SymFunctionTableAccess64))(HANDLE hProcess
Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Atomic8 NoBarrier_Load(volatile const Atomic8 *ptr)
Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Debugger support for the V8 JavaScript engine.