ATOMIC_OP_RETURN
ATOMIC_OP_RETURN(op, op##l) \
ATOMIC_OP_RETURN(op, asm_op) \
ATOMIC_OP_RETURN(op, c_op, asm_op) \
ATOMIC_OP_RETURN(op, c_op, asm_op) \
#undef ATOMIC_OP_RETURN
ATOMIC_OP_RETURN( , dmb ish, , l, "memory", __VA_ARGS__)\
ATOMIC_OP_RETURN(_relaxed, , , , , __VA_ARGS__)\
ATOMIC_OP_RETURN(_acquire, , a, , "memory", __VA_ARGS__)\
ATOMIC_OP_RETURN(_release, , , l, "memory", __VA_ARGS__)\
ATOMIC_OP_RETURN(op, c_op)
#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
ATOMIC_OP_RETURN(op, I, asm_op, c_op, _db, ) \
ATOMIC_OP_RETURN(op, I, asm_op, c_op, , _relaxed) \
ATOMIC_OP_RETURN(op, I , asm_op) \
ATOMIC_OP_RETURN(op, c_op, asm_op) \
ATOMIC_OP_RETURN(pfx, op, type, c_op, asm_op, ll, sc) \
ATOMIC_OP_RETURN(add)
ATOMIC_OP_RETURN(sub)
#undef ATOMIC_OP_RETURN
ATOMIC_OP_RETURN(op, c_op) \
ATOMIC_OP_RETURN(op, asm_op, c_op, I, w, int, )
ATOMIC_OP_RETURN(op, asm_op, c_op, I, w, int, ) \
ATOMIC_OP_RETURN(op, asm_op, c_op, I, d, s64, 64)
#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
ATOMIC_OP_RETURN(op, c_op) \
#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
ATOMIC_OP_RETURN(add, +=)
#undef ATOMIC_OP_RETURN
#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_FETCH_OP(op) ATOMIC_OP_RETURN(op)
#undef ATOMIC_OP_RETURN
ATOMIC_OP_RETURN(add, +)
ATOMIC_OP_RETURN(sub, -)