Ticket #5331: arm_spinlock_fix.patch
File arm_spinlock_fix.patch, 1.2 KB (added by , 11 years ago) |
---|
-
boost/smart_ptr/detail/spinlock_gcc_arm.hpp
43 43 { 44 44 int r; 45 45 46 #if defined(__ARM_ARCH_6__) \ 47 || defined(__ARM_ARCH_6J__) \ 48 || defined(__ARM_ARCH_6K__) \ 49 || defined(__ARM_ARCH_6Z__) \ 50 || defined(__ARM_ARCH_6ZK__) \ 51 || defined(__ARM_ARCH_6T2__) \ 52 || defined(__ARM_ARCH_7__) \ 53 || defined(__ARM_ARCH_7A__) \ 54 || defined(__ARM_ARCH_7R__) \ 55 || defined(__ARM_ARCH_7M__) \ 56 || defined(__ARM_ARCH_7EM__) 57 46 58 __asm__ __volatile__( 59 "ldrex %0, [%2]; \n" 60 "cmp %0, %1; \n" 61 "strexne %0, %1, [%2]" 62 BOOST_SP_ARM_BARRIER : 63 "=&r"( r ): // outputs 64 "r"( 1 ), "r"( &v_ ): // inputs 65 "memory", "cc" ); 66 67 #else 68 69 __asm__ __volatile__( 47 70 "swp %0, %1, [%2]\n\t" 48 71 BOOST_SP_ARM_BARRIER : 49 72 "=&r"( r ): // outputs 50 73 "r"( 1 ), "r"( &v_ ): // inputs 51 74 "memory", "cc" ); 52 75 76 #endif 77 53 78 return r == 0; 54 79 } 55 80