44#pragma warning(disable: 4035)
54struct AtomicOperations<1>
56 template <
typename T>
inline
57 static bool LASS_CALL compareAndSwap(
volatile T& dest, T expectedValue, T newValue)
64 lock cmpxchg [edi], dl
71 template <
typename T1,
typename T2>
inline
72 static bool LASS_CALL compareAndSwap(
73 volatile T1& dest1, T1 expected1, T2 expected2, T1 new1, T2 new2)
82 lock cmpxchg [edi], dx
89 template <
typename T>
inline
90 static void LASS_CALL increment(
volatile T& value)
95 lock inc
byte ptr [edi]
99 template <
typename T>
inline
100 static void LASS_CALL decrement(
volatile T& value)
105 lock dec
byte ptr [edi]
113struct AtomicOperations<2>
115 template <
typename T>
inline
116 static bool LASS_CALL compareAndSwap(
volatile T& dest, T expectedValue, T newValue)
120 mov ax, expectedValue
123 lock cmpxchg [edi], dx
130 template <
typename T1,
typename T2>
inline
131 static bool LASS_CALL compareAndSwap(
132 volatile T1& dest1, T1 expected1, T2 expected2, T1 new1, T2 new2)
143 lock cmpxchg [edi], edx
150 template <
typename T>
inline
151 static void LASS_CALL increment(
volatile T& value)
156 lock inc word ptr [edi]
160 template <
typename T>
inline
161 static void LASS_CALL decrement(
volatile T& value)
166 lock dec word ptr [edi]
174struct AtomicOperations<4>
176 template <
typename T>
inline
177 static bool LASS_CALL compareAndSwap(
volatile T& dest, T expectedValue, T newValue)
181 mov eax, expectedValue
184 lock cmpxchg [edi], edx
191 template <
typename T1,
typename T2>
inline
192 static bool LASS_CALL compareAndSwap(
193 volatile T1& dest1, T1 expected1, T2 expected2, T1 new1, T2 new2)
223 template <
typename T>
inline
224 static void LASS_CALL increment(
volatile T& value)
229 lock inc dword ptr [edi]
233 template <
typename T>
inline
234 static void LASS_CALL decrement(
volatile T& value)
239 lock dec dword ptr [edi]
247struct AtomicOperations<8>
249 template <
typename T>
inline
250 static bool LASS_CALL compareAndSwap(
volatile T& dest, T expectedValue, T newValue)
267 lea esi, expectedValue
282 template <
typename T>
inline
283 static void LASS_CALL increment(
volatile T& value)
292 while (!AtomicOperations<8>::compareAndSwap(value, old, fresh));
295 template <
typename T>
inline
296 static void LASS_CALL decrement(
volatile T& value)
305 while (!AtomicOperations<8>::compareAndSwap(value, old, fresh));
general utility, debug facilities, ...
Library for Assembled Shared Sources.