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;
 }
 
openSUSE Build Service is sponsored by