| OLD | NEW |
| (Empty) |
| 1 #define a_ll a_ll | |
| 2 static inline int a_ll(volatile int* p) { | |
| 3 int v; | |
| 4 __asm__ __volatile__("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); | |
| 5 return v; | |
| 6 } | |
| 7 | |
| 8 #define a_sc a_sc | |
| 9 static inline int a_sc(volatile int* p, int v) { | |
| 10 int r; | |
| 11 __asm__ __volatile__("stwcx. %2, 0, %3 ; mfcr %0" | |
| 12 : "=r"(r), "=m"(*p) | |
| 13 : "r"(v), "r"(p) | |
| 14 : "memory", "cc"); | |
| 15 return r & 0x20000000; /* "bit 2" of "cr0" (backwards bit order) */ | |
| 16 } | |
| 17 | |
| 18 #define a_barrier a_barrier | |
| 19 static inline void a_barrier() { | |
| 20 __asm__ __volatile__("sync" : : : "memory"); | |
| 21 } | |
| 22 | |
| 23 #define a_pre_llsc a_barrier | |
| 24 | |
| 25 #define a_post_llsc a_post_llsc | |
| 26 static inline void a_post_llsc() { | |
| 27 __asm__ __volatile__("isync" : : : "memory"); | |
| 28 } | |
| 29 | |
| 30 #define a_store a_store | |
| 31 static inline void a_store(volatile int* p, int v) { | |
| 32 a_pre_llsc(); | |
| 33 *p = v; | |
| 34 a_post_llsc(); | |
| 35 } | |
| OLD | NEW |