Lines Matching +full:sc +full:- +full:resource
3 * resource counting etc..
21 #include <asm/cpu-features.h>
30 return READ_ONCE(v->counter); \
35 WRITE_ONCE(v->counter, i); \
40 return cmpxchg(&v->counter, o, n); \
45 return xchg(&v->counter, n); \
55 #define ATOMIC_OP(pfx, op, type, c_op, asm_op, ll, sc) \ argument
64 v->counter c_op i; \
75 " " #sc " %0, %1 \n" \
78 : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (v->counter) \
82 #define ATOMIC_OP_RETURN(pfx, op, type, c_op, asm_op, ll, sc) \ argument
91 result = v->counter; \
93 v->counter = result; \
104 " " #sc " %0, %2 \n" \
109 "+" GCC_OFF_SMALL_ASM() (v->counter) \
115 #define ATOMIC_FETCH_OP(pfx, op, type, c_op, asm_op, ll, sc) \ argument
124 result = v->counter; \
125 v->counter c_op i; \
136 " " #sc " %0, %2 \n" \
141 "+" GCC_OFF_SMALL_ASM() (v->counter) \
148 #define ATOMIC_OPS(pfx, op, type, c_op, asm_op, ll, sc) \ argument
149 ATOMIC_OP(pfx, op, type, c_op, asm_op, ll, sc) \
150 ATOMIC_OP_RETURN(pfx, op, type, c_op, asm_op, ll, sc) \
151 ATOMIC_FETCH_OP(pfx, op, type, c_op, asm_op, ll, sc)
153 ATOMIC_OPS(atomic, add, int, +=, addu, ll, sc)
154 ATOMIC_OPS(atomic, sub, int, -=, subu, ll, sc)
163 ATOMIC_OPS(atomic64, sub, s64, -=, dsubu, lld, scd)
171 #define ATOMIC_OPS(pfx, op, type, c_op, asm_op, ll, sc) \ argument
172 ATOMIC_OP(pfx, op, type, c_op, asm_op, ll, sc) \
173 ATOMIC_FETCH_OP(pfx, op, type, c_op, asm_op, ll, sc)
175 ATOMIC_OPS(atomic, and, int, &=, and, ll, sc)
176 ATOMIC_OPS(atomic, or, int, |=, or, ll, sc)
177 ATOMIC_OPS(atomic, xor, int, ^=, xor, ll, sc)
198 * atomic_sub_if_positive - conditionally subtract integer from atomic variable
205 #define ATOMIC_SIP_OP(pfx, type, op, ll, sc) \ argument
216 result = v->counter; \
217 result -= i; \
219 v->counter = result; \
236 " " #sc " %1, %2 \n" \
241 "+" GCC_OFF_SMALL_ASM() (v->counter) \
248 * bltz that can branch to code outside of the LL/SC loop. As \
257 ATOMIC_SIP_OP(atomic, int, subu, ll, sc)