1 --- DirectFB-1.5.3_orig/lib/direct/atomic.h 2011-07-31 14:51:06.000000000 -0400
2 +++ DirectFB-1.5.3/lib/direct/atomic.h 2012-05-09 01:24:02.692169840 -0400
5 #if defined(ARCH_ARM) && !defined(ARCH_IWMMXT)
7 -static inline int _D__atomic_cmpxchg(volatile int *ptr, int old, int new)
8 +static inline int _D__atomic_cmpxchg(volatile int *ptr, int old, int _new)
10 - unsigned long oldval, res;
13 - __asm__ __volatile__("@ atomic_cmpxchg\n"
17 - "strexeq %0, %4, [%2]\n"
18 - : "=&r" (res), "=&r" (oldval)
19 - : "r" (ptr), "Ir" (old), "r" (new)
22 + unsigned long oldval = old;
24 + __atomic_compare_exchange_n(ptr, &oldval, _new,
25 + false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
29 @@ -220,24 +213,14 @@ static inline int _D__atomic_cmpxchg(vol
31 static inline int _D__atomic_add_return(int i, volatile int *v)
36 - __asm__ __volatile__("@ atomic_add_return\n"
37 -"1: ldrex %0, [%2]\n"
39 -" strex %1, %0, [%2]\n"
42 - : "=&r" (result), "=&r" (tmp)
45 + int result = __atomic_add_fetch(v, i, __ATOMIC_SEQ_CST);
50 #define D_SYNC_ADD_AND_FETCH( ptr, value ) \
51 - (_D__atomic_add_return( (int) (value), (void*) (ptr) ))
52 + (_D__atomic_add_return( (int) (value), (volatile int*) (ptr) ))
56 @@ -308,7 +291,7 @@ static inline int _D__atomic_add_return(
59 #define D_SYNC_ADD_AND_FETCH( ptr, value ) \
60 - (_D__atomic_add_return( (int) (value), (void*) (ptr) ))
61 + (_D__atomic_add_return( (int) (value), (volatile int*) (ptr) ))