Index: src/atomicops_internals_x86_msvc.h |
diff --git a/src/atomicops_internals_x86_msvc.h b/src/atomicops_internals_x86_msvc.h |
deleted file mode 100644 |
index b72f7751fbcaac4d20c49c93edb269aa54a98158..0000000000000000000000000000000000000000 |
--- a/src/atomicops_internals_x86_msvc.h |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-// Copyright 2010 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// This file is an internal atomic implementation, use atomicops.h instead. |
- |
-#ifndef V8_ATOMICOPS_INTERNALS_X86_MSVC_H_ |
-#define V8_ATOMICOPS_INTERNALS_X86_MSVC_H_ |
- |
-#include "src/base/macros.h" |
-#include "src/win32-headers.h" |
- |
-#if defined(V8_HOST_ARCH_64_BIT) |
-// windows.h #defines this (only on x64). This causes problems because the |
-// public API also uses MemoryBarrier at the public name for this fence. So, on |
-// X64, undef it, and call its documented |
-// (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208.aspx) |
-// implementation directly. |
-#undef MemoryBarrier |
-#endif |
- |
-namespace v8 { |
-namespace internal { |
- |
-inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, |
- Atomic32 old_value, |
- Atomic32 new_value) { |
- LONG result = InterlockedCompareExchange( |
- reinterpret_cast<volatile LONG*>(ptr), |
- static_cast<LONG>(new_value), |
- static_cast<LONG>(old_value)); |
- return static_cast<Atomic32>(result); |
-} |
- |
-inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, |
- Atomic32 new_value) { |
- LONG result = InterlockedExchange( |
- reinterpret_cast<volatile LONG*>(ptr), |
- static_cast<LONG>(new_value)); |
- return static_cast<Atomic32>(result); |
-} |
- |
-inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, |
- Atomic32 increment) { |
- return InterlockedExchangeAdd( |
- reinterpret_cast<volatile LONG*>(ptr), |
- static_cast<LONG>(increment)) + increment; |
-} |
- |
-inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, |
- Atomic32 increment) { |
- return Barrier_AtomicIncrement(ptr, increment); |
-} |
- |
-#if !(defined(_MSC_VER) && _MSC_VER >= 1400) |
-#error "We require at least vs2005 for MemoryBarrier" |
-#endif |
-inline void MemoryBarrier() { |
-#if defined(V8_HOST_ARCH_64_BIT) |
- // See #undef and note at the top of this file. |
- __faststorefence(); |
-#else |
- // We use MemoryBarrier from WinNT.h |
- ::MemoryBarrier(); |
-#endif |
-} |
- |
-inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, |
- Atomic32 old_value, |
- Atomic32 new_value) { |
- return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
-} |
- |
-inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, |
- Atomic32 old_value, |
- Atomic32 new_value) { |
- return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
-} |
- |
-inline void NoBarrier_Store(volatile Atomic8* ptr, Atomic8 value) { |
- *ptr = value; |
-} |
- |
-inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { |
- *ptr = value; |
-} |
- |
-inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { |
- NoBarrier_AtomicExchange(ptr, value); |
- // acts as a barrier in this implementation |
-} |
- |
-inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { |
- *ptr = value; // works w/o barrier for current Intel chips as of June 2005 |
- // See comments in Atomic64 version of Release_Store() below. |
-} |
- |
-inline Atomic8 NoBarrier_Load(volatile const Atomic8* ptr) { |
- return *ptr; |
-} |
- |
-inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { |
- return *ptr; |
-} |
- |
-inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { |
- Atomic32 value = *ptr; |
- return value; |
-} |
- |
-inline Atomic32 Release_Load(volatile const Atomic32* ptr) { |
- MemoryBarrier(); |
- return *ptr; |
-} |
- |
-#if defined(_WIN64) |
- |
-// 64-bit low-level operations on 64-bit platform. |
- |
-STATIC_ASSERT(sizeof(Atomic64) == sizeof(PVOID)); |
- |
-inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, |
- Atomic64 old_value, |
- Atomic64 new_value) { |
- PVOID result = InterlockedCompareExchangePointer( |
- reinterpret_cast<volatile PVOID*>(ptr), |
- reinterpret_cast<PVOID>(new_value), reinterpret_cast<PVOID>(old_value)); |
- return reinterpret_cast<Atomic64>(result); |
-} |
- |
-inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, |
- Atomic64 new_value) { |
- PVOID result = InterlockedExchangePointer( |
- reinterpret_cast<volatile PVOID*>(ptr), |
- reinterpret_cast<PVOID>(new_value)); |
- return reinterpret_cast<Atomic64>(result); |
-} |
- |
-inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, |
- Atomic64 increment) { |
- return InterlockedExchangeAdd64( |
- reinterpret_cast<volatile LONGLONG*>(ptr), |
- static_cast<LONGLONG>(increment)) + increment; |
-} |
- |
-inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, |
- Atomic64 increment) { |
- return Barrier_AtomicIncrement(ptr, increment); |
-} |
- |
-inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { |
- *ptr = value; |
-} |
- |
-inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { |
- NoBarrier_AtomicExchange(ptr, value); |
- // acts as a barrier in this implementation |
-} |
- |
-inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { |
- *ptr = value; // works w/o barrier for current Intel chips as of June 2005 |
- |
- // When new chips come out, check: |
- // IA-32 Intel Architecture Software Developer's Manual, Volume 3: |
- // System Programming Guide, Chatper 7: Multiple-processor management, |
- // Section 7.2, Memory Ordering. |
- // Last seen at: |
- // http://developer.intel.com/design/pentium4/manuals/index_new.htm |
-} |
- |
-inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { |
- return *ptr; |
-} |
- |
-inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { |
- Atomic64 value = *ptr; |
- return value; |
-} |
- |
-inline Atomic64 Release_Load(volatile const Atomic64* ptr) { |
- MemoryBarrier(); |
- return *ptr; |
-} |
- |
-inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, |
- Atomic64 old_value, |
- Atomic64 new_value) { |
- return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
-} |
- |
-inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, |
- Atomic64 old_value, |
- Atomic64 new_value) { |
- return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
-} |
- |
- |
-#endif // defined(_WIN64) |
- |
-} } // namespace v8::internal |
- |
-#endif // V8_ATOMICOPS_INTERNALS_X86_MSVC_H_ |