OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file is an internal atomic implementation, use base/atomicops.h instead. | 5 // This file is an internal atomic implementation, use base/atomicops.h instead. |
6 | 6 |
7 #ifndef BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ | 7 #ifndef BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ |
8 #define BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ | 8 #define BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ |
9 | 9 |
10 #include <windows.h> | 10 #include <windows.h> |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 return _InterlockedExchangeAdd( | 48 return _InterlockedExchangeAdd( |
49 reinterpret_cast<volatile LONG*>(ptr), | 49 reinterpret_cast<volatile LONG*>(ptr), |
50 static_cast<LONG>(increment)) + increment; | 50 static_cast<LONG>(increment)) + increment; |
51 } | 51 } |
52 | 52 |
53 inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, | 53 inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, |
54 Atomic32 increment) { | 54 Atomic32 increment) { |
55 return Barrier_AtomicIncrement(ptr, increment); | 55 return Barrier_AtomicIncrement(ptr, increment); |
56 } | 56 } |
57 | 57 |
58 #if !(defined(_MSC_VER) && _MSC_VER >= 1400) | |
59 #error "We require at least vs2005 for MemoryBarrier" | |
60 #endif | |
61 inline void MemoryBarrier() { | 58 inline void MemoryBarrier() { |
62 #if defined(ARCH_CPU_64_BITS) | 59 #if defined(ARCH_CPU_64_BITS) |
63 // See #undef and note at the top of this file. | 60 // See #undef and note at the top of this file. |
64 __faststorefence(); | 61 __faststorefence(); |
65 #else | 62 #else |
66 // We use MemoryBarrier from WinNT.h | 63 // We use MemoryBarrier from WinNT.h |
67 ::MemoryBarrier(); | 64 ::MemoryBarrier(); |
68 #endif | 65 #endif |
69 } | 66 } |
70 | 67 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); | 186 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
190 } | 187 } |
191 | 188 |
192 | 189 |
193 #endif // defined(_WIN64) | 190 #endif // defined(_WIN64) |
194 | 191 |
195 } // namespace base::subtle | 192 } // namespace base::subtle |
196 } // namespace base | 193 } // namespace base |
197 | 194 |
198 #endif // BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ | 195 #endif // BASE_ATOMICOPS_INTERNALS_X86_MSVC_H_ |
OLD | NEW |