From 1dca602122d551475354fed2a2673a0f61cf618f Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 3 Aug 2012 20:02:03 +0200 Subject: Add a T parameter to the memory barrier functions in atomics. This is so we can insert valgrind (helgrind) annotation macros. They require the actual address of the variable to work. Change-Id: I988f6a46385ad58143c53ad34b6cf0f58be2cdb8 Reviewed-by: Olivier Goffart --- src/corelib/arch/qatomic_ia64.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/corelib/arch/qatomic_ia64.h') diff --git a/src/corelib/arch/qatomic_ia64.h b/src/corelib/arch/qatomic_ia64.h index 5108751f2a..a2bca55c03 100644 --- a/src/corelib/arch/qatomic_ia64.h +++ b/src/corelib/arch/qatomic_ia64.h @@ -140,7 +140,8 @@ template<> struct QAtomicIntegerTraits { enum { IsInteger = template struct QBasicAtomicOps: QGenericAtomicOps > { - static void orderedMemoryFence(); + template + static void orderedMemoryFence(const T &); template static inline T loadAcquire(const T &_q_value) @@ -202,8 +203,8 @@ inline bool _q_ia64_fetchadd_immediate(register int value) // intrinsics provided by the Intel C++ Compiler #include -template inline -void QBasicAtomicOps::orderedMemoryFence() +template template inline +void QBasicAtomicOps::orderedMemoryFence(const T &) { __memory_barrier(); } @@ -332,8 +333,8 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddRelease(qptrdiff valueTo #elif defined(Q_CC_GNU) -template inline -void QBasicAtomicOps::orderedMemoryFence() +template template inline +void QBasicAtomicOps::orderedMemoryFence(const T &) { asm volatile("mf" ::: "memory"); } @@ -1045,7 +1046,7 @@ bool QBasicAtomicOps::testAndSetRelaxed(T &_q_value, T expectedValue, T ne template template inline bool QBasicAtomicOps::testAndSetOrdered(T &_q_value, T expectedValue, T newValue) { - orderedMemoryFence(); + orderedMemoryFence(_q_value); return testAndSetAcquire(_q_value, expectedValue, newValue); } @@ -1058,7 +1059,7 @@ T QBasicAtomicOps::fetchAndStoreRelaxed(T &_q_value, T newValue) template template inline T QBasicAtomicOps::fetchAndStoreRelease(T &_q_value, T newValue) { - orderedMemoryFence(); + orderedMemoryFence(_q_value); return fetchAndStoreAcquire(_q_value, newValue); } @@ -1077,7 +1078,7 @@ T QBasicAtomicOps::fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiv template template inline T QBasicAtomicOps::fetchAndAddOrdered(T &_q_value, typename QAtomicAdditiveType::AdditiveT valueToAdd) { - orderedMemoryFence(); + orderedMemoryFence(_q_value); return fetchAndAddRelease(_q_value, valueToAdd); } -- cgit v1.2.3