File fix-arm-assembler-for-thumb2.diff of Package libqt4
Index: src/corelib/arch/qatomic_armv6.h
===================================================================
--- src/corelib/arch/qatomic_armv6.h.orig
+++ src/corelib/arch/qatomic_armv6.h
@@ -144,6 +144,9 @@ inline bool QBasicAtomicInt::testAndSetO
asm volatile("0:\n"
"ldrex %[result], [%[_q_value]]\n"
"eors %[result], %[result], %[expectedValue]\n"
+
+ "itt eq\n"
+
"strexeq %[result], %[newValue], [%[_q_value]]\n"
"teqeq %[result], #1\n"
"beq 0b\n"
@@ -202,6 +205,9 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPoint
asm volatile("0:\n"
"ldrex %[result], [%[_q_value]]\n"
"eors %[result], %[result], %[expectedValue]\n"
+
+ "itt eq\n"
+
"strexeq %[result], %[newValue], [%[_q_value]]\n"
"teqeq %[result], #1\n"
"beq 0b\n"
Index: src/corelib/arch/qatomic_arm.h
===================================================================
--- src/corelib/arch/qatomic_arm.h.orig
+++ src/corelib/arch/qatomic_arm.h
@@ -355,10 +355,7 @@ template <typename T>
Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
{
T *originalValue;
- asm volatile("swp %0,%2,[%3]"
- : "=&r"(originalValue), "=m" (_q_value)
- : "r"(newValue), "r"(&_q_value)
- : "cc", "memory");
+ originalValue = __sync_lock_test_and_set(&_q_value, newValue);
return originalValue;
}