Ticket #5331: arm_spinlock_fix.2.patch
File arm_spinlock_fix.2.patch, 1.3 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__( 47 "swp %0, %1, [%2]\n\t" 48 BOOST_SP_ARM_BARRIER : 59 "ldrex %0, [%2]; \n" 60 "cmp %0, %1; \n" 61 "strexne %0, %1, [%2]; \n" 62 BOOST_SP_ARM_BARRIER : 49 63 "=&r"( r ): // outputs 50 64 "r"( 1 ), "r"( &v_ ): // inputs 51 65 "memory", "cc" ); 52 66 67 #else 68 69 __asm__ __volatile__( 70 "swp %0, %1, [%2];\n" 71 BOOST_SP_ARM_BARRIER : 72 "=&r"( r ): // outputs 73 "r"( 1 ), "r"( &v_ ): // inputs 74 "memory", "cc" ); 75 76 #endif 77 53 78 return r == 0; 54 79 } 55 80