Use the intrinsic version of the Interlocked* functions.

This save us a system call and allows this code to be instrumented by the memory testing tools.

BUG=

Review URL: https://codereview.chromium.org/308683011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276701 0039d316-1c4b-4281-b951-d872f2087c98
parent f1fb4144
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <windows.h> #include <windows.h>
#include <intrin.h>
#include "base/macros.h" #include "base/macros.h"
#if defined(ARCH_CPU_64_BITS) #if defined(ARCH_CPU_64_BITS)
...@@ -26,7 +28,7 @@ namespace subtle { ...@@ -26,7 +28,7 @@ namespace subtle {
inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
Atomic32 old_value, Atomic32 old_value,
Atomic32 new_value) { Atomic32 new_value) {
LONG result = InterlockedCompareExchange( LONG result = _InterlockedCompareExchange(
reinterpret_cast<volatile LONG*>(ptr), reinterpret_cast<volatile LONG*>(ptr),
static_cast<LONG>(new_value), static_cast<LONG>(new_value),
static_cast<LONG>(old_value)); static_cast<LONG>(old_value));
...@@ -35,7 +37,7 @@ inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, ...@@ -35,7 +37,7 @@ inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
Atomic32 new_value) { Atomic32 new_value) {
LONG result = InterlockedExchange( LONG result = _InterlockedExchange(
reinterpret_cast<volatile LONG*>(ptr), reinterpret_cast<volatile LONG*>(ptr),
static_cast<LONG>(new_value)); static_cast<LONG>(new_value));
return static_cast<Atomic32>(result); return static_cast<Atomic32>(result);
...@@ -43,7 +45,7 @@ inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, ...@@ -43,7 +45,7 @@ inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
Atomic32 increment) { Atomic32 increment) {
return InterlockedExchangeAdd( return _InterlockedExchangeAdd(
reinterpret_cast<volatile LONG*>(ptr), reinterpret_cast<volatile LONG*>(ptr),
static_cast<LONG>(increment)) + increment; static_cast<LONG>(increment)) + increment;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment