xref: /aosp_15_r20/external/musl/arch/riscv32/atomic_arch.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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