1*c9945492SAndroid Build Coastguard Worker #define a_barrier a_barrier
a_barrier()2*c9945492SAndroid Build Coastguard Worker static inline void a_barrier()
3*c9945492SAndroid Build Coastguard Worker {
4*c9945492SAndroid Build Coastguard Worker __asm__ __volatile__ ("fence rw,rw" : : : "memory");
5*c9945492SAndroid Build Coastguard Worker }
6*c9945492SAndroid Build Coastguard Worker
7*c9945492SAndroid Build Coastguard Worker #define a_cas a_cas
a_cas(volatile int * p,int t,int s)8*c9945492SAndroid Build Coastguard Worker static inline int a_cas(volatile int *p, int t, int s)
9*c9945492SAndroid Build Coastguard Worker {
10*c9945492SAndroid Build Coastguard Worker int old, tmp;
11*c9945492SAndroid Build Coastguard Worker __asm__ __volatile__ (
12*c9945492SAndroid Build Coastguard Worker "\n1: lr.w.aqrl %0, (%2)\n"
13*c9945492SAndroid Build Coastguard Worker " bne %0, %3, 1f\n"
14*c9945492SAndroid Build Coastguard Worker " sc.w.aqrl %1, %4, (%2)\n"
15*c9945492SAndroid Build Coastguard Worker " bnez %1, 1b\n"
16*c9945492SAndroid Build Coastguard Worker "1:"
17*c9945492SAndroid Build Coastguard Worker : "=&r"(old), "=&r"(tmp)
18*c9945492SAndroid Build Coastguard Worker : "r"(p), "r"((long)t), "r"((long)s)
19*c9945492SAndroid Build Coastguard Worker : "memory");
20*c9945492SAndroid Build Coastguard Worker return old;
21*c9945492SAndroid Build Coastguard Worker }
22