1570af302Sopenharmony_ci#define a_cas a_cas 2570af302Sopenharmony_cistatic inline int a_cas(volatile int *p, int t, int s) 3570af302Sopenharmony_ci{ 4570af302Sopenharmony_ci register int old, tmp; 5570af302Sopenharmony_ci __asm__ __volatile__ ( 6570af302Sopenharmony_ci " addi %0, r0, 0\n" 7570af302Sopenharmony_ci "1: lwx %0, %2, r0\n" 8570af302Sopenharmony_ci " rsubk %1, %0, %3\n" 9570af302Sopenharmony_ci " bnei %1, 1f\n" 10570af302Sopenharmony_ci " swx %4, %2, r0\n" 11570af302Sopenharmony_ci " addic %1, r0, 0\n" 12570af302Sopenharmony_ci " bnei %1, 1b\n" 13570af302Sopenharmony_ci "1: " 14570af302Sopenharmony_ci : "=&r"(old), "=&r"(tmp) 15570af302Sopenharmony_ci : "r"(p), "r"(t), "r"(s) 16570af302Sopenharmony_ci : "cc", "memory" ); 17570af302Sopenharmony_ci return old; 18570af302Sopenharmony_ci} 19570af302Sopenharmony_ci 20570af302Sopenharmony_ci#define a_swap a_swap 21570af302Sopenharmony_cistatic inline int a_swap(volatile int *x, int v) 22570af302Sopenharmony_ci{ 23570af302Sopenharmony_ci register int old, tmp; 24570af302Sopenharmony_ci __asm__ __volatile__ ( 25570af302Sopenharmony_ci " addi %0, r0, 0\n" 26570af302Sopenharmony_ci "1: lwx %0, %2, r0\n" 27570af302Sopenharmony_ci " swx %3, %2, r0\n" 28570af302Sopenharmony_ci " addic %1, r0, 0\n" 29570af302Sopenharmony_ci " bnei %1, 1b\n" 30570af302Sopenharmony_ci "1: " 31570af302Sopenharmony_ci : "=&r"(old), "=&r"(tmp) 32570af302Sopenharmony_ci : "r"(x), "r"(v) 33570af302Sopenharmony_ci : "cc", "memory" ); 34570af302Sopenharmony_ci return old; 35570af302Sopenharmony_ci} 36570af302Sopenharmony_ci 37570af302Sopenharmony_ci#define a_fetch_add a_fetch_add 38570af302Sopenharmony_cistatic inline int a_fetch_add(volatile int *x, int v) 39570af302Sopenharmony_ci{ 40570af302Sopenharmony_ci register int new, tmp; 41570af302Sopenharmony_ci __asm__ __volatile__ ( 42570af302Sopenharmony_ci " addi %0, r0, 0\n" 43570af302Sopenharmony_ci "1: lwx %0, %2, r0\n" 44570af302Sopenharmony_ci " addk %0, %0, %3\n" 45570af302Sopenharmony_ci " swx %0, %2, r0\n" 46570af302Sopenharmony_ci " addic %1, r0, 0\n" 47570af302Sopenharmony_ci " bnei %1, 1b\n" 48570af302Sopenharmony_ci "1: " 49570af302Sopenharmony_ci : "=&r"(new), "=&r"(tmp) 50570af302Sopenharmony_ci : "r"(x), "r"(v) 51570af302Sopenharmony_ci : "cc", "memory" ); 52570af302Sopenharmony_ci return new-v; 53570af302Sopenharmony_ci} 54