23,236 → 23,168 |
typedef atomic64_t atomic_long_t; |
|
#define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) |
#define ATOMIC_LONG_PFX(x) atomic64 ## x |
|
static inline long atomic_long_read(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
#else |
|
return (long)atomic64_read(v); |
} |
typedef atomic_t atomic_long_t; |
|
static inline void atomic_long_set(atomic_long_t *l, long i) |
{ |
atomic64_t *v = (atomic64_t *)l; |
#define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) |
#define ATOMIC_LONG_PFX(x) atomic ## x |
|
atomic64_set(v, i); |
} |
#endif |
|
static inline void atomic_long_inc(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
atomic64_inc(v); |
#define ATOMIC_LONG_READ_OP(mo) \ |
static inline long atomic_long_read##mo(const atomic_long_t *l) \ |
{ \ |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; \ |
\ |
return (long)ATOMIC_LONG_PFX(_read##mo)(v); \ |
} |
ATOMIC_LONG_READ_OP() |
ATOMIC_LONG_READ_OP(_acquire) |
|
static inline void atomic_long_dec(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
#undef ATOMIC_LONG_READ_OP |
|
atomic64_dec(v); |
#define ATOMIC_LONG_SET_OP(mo) \ |
static inline void atomic_long_set##mo(atomic_long_t *l, long i) \ |
{ \ |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; \ |
\ |
ATOMIC_LONG_PFX(_set##mo)(v, i); \ |
} |
ATOMIC_LONG_SET_OP() |
ATOMIC_LONG_SET_OP(_release) |
|
static inline void atomic_long_add(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
#undef ATOMIC_LONG_SET_OP |
|
atomic64_add(i, v); |
#define ATOMIC_LONG_ADD_SUB_OP(op, mo) \ |
static inline long \ |
atomic_long_##op##_return##mo(long i, atomic_long_t *l) \ |
{ \ |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; \ |
\ |
return (long)ATOMIC_LONG_PFX(_##op##_return##mo)(i, v); \ |
} |
ATOMIC_LONG_ADD_SUB_OP(add,) |
ATOMIC_LONG_ADD_SUB_OP(add, _relaxed) |
ATOMIC_LONG_ADD_SUB_OP(add, _acquire) |
ATOMIC_LONG_ADD_SUB_OP(add, _release) |
ATOMIC_LONG_ADD_SUB_OP(sub,) |
ATOMIC_LONG_ADD_SUB_OP(sub, _relaxed) |
ATOMIC_LONG_ADD_SUB_OP(sub, _acquire) |
ATOMIC_LONG_ADD_SUB_OP(sub, _release) |
|
static inline void atomic_long_sub(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
#undef ATOMIC_LONG_ADD_SUB_OP |
|
atomic64_sub(i, v); |
} |
#define atomic_long_cmpxchg_relaxed(l, old, new) \ |
(ATOMIC_LONG_PFX(_cmpxchg_relaxed)((ATOMIC_LONG_PFX(_t) *)(l), \ |
(old), (new))) |
#define atomic_long_cmpxchg_acquire(l, old, new) \ |
(ATOMIC_LONG_PFX(_cmpxchg_acquire)((ATOMIC_LONG_PFX(_t) *)(l), \ |
(old), (new))) |
#define atomic_long_cmpxchg_release(l, old, new) \ |
(ATOMIC_LONG_PFX(_cmpxchg_release)((ATOMIC_LONG_PFX(_t) *)(l), \ |
(old), (new))) |
#define atomic_long_cmpxchg(l, old, new) \ |
(ATOMIC_LONG_PFX(_cmpxchg)((ATOMIC_LONG_PFX(_t) *)(l), (old), (new))) |
|
static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return atomic64_sub_and_test(i, v); |
} |
|
static inline int atomic_long_dec_and_test(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return atomic64_dec_and_test(v); |
} |
|
static inline int atomic_long_inc_and_test(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return atomic64_inc_and_test(v); |
} |
|
static inline int atomic_long_add_negative(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return atomic64_add_negative(i, v); |
} |
|
static inline long atomic_long_add_return(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return (long)atomic64_add_return(i, v); |
} |
|
static inline long atomic_long_sub_return(long i, atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return (long)atomic64_sub_return(i, v); |
} |
|
static inline long atomic_long_inc_return(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return (long)atomic64_inc_return(v); |
} |
|
static inline long atomic_long_dec_return(atomic_long_t *l) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return (long)atomic64_dec_return(v); |
} |
|
static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) |
{ |
atomic64_t *v = (atomic64_t *)l; |
|
return (long)atomic64_add_unless(v, a, u); |
} |
|
#define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l)) |
|
#define atomic_long_cmpxchg(l, old, new) \ |
(atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) |
#define atomic_long_xchg_relaxed(v, new) \ |
(ATOMIC_LONG_PFX(_xchg_relaxed)((ATOMIC_LONG_PFX(_t) *)(v), (new))) |
#define atomic_long_xchg_acquire(v, new) \ |
(ATOMIC_LONG_PFX(_xchg_acquire)((ATOMIC_LONG_PFX(_t) *)(v), (new))) |
#define atomic_long_xchg_release(v, new) \ |
(ATOMIC_LONG_PFX(_xchg_release)((ATOMIC_LONG_PFX(_t) *)(v), (new))) |
#define atomic_long_xchg(v, new) \ |
(atomic64_xchg((atomic64_t *)(v), (new))) |
(ATOMIC_LONG_PFX(_xchg)((ATOMIC_LONG_PFX(_t) *)(v), (new))) |
|
#else /* BITS_PER_LONG == 64 */ |
|
typedef atomic_t atomic_long_t; |
|
#define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) |
static inline long atomic_long_read(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
|
return (long)atomic_read(v); |
} |
|
static inline void atomic_long_set(atomic_long_t *l, long i) |
{ |
atomic_t *v = (atomic_t *)l; |
|
atomic_set(v, i); |
} |
|
static inline void atomic_long_inc(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
atomic_inc(v); |
ATOMIC_LONG_PFX(_inc)(v); |
} |
|
static inline void atomic_long_dec(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
atomic_dec(v); |
ATOMIC_LONG_PFX(_dec)(v); |
} |
|
static inline void atomic_long_add(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
|
atomic_add(i, v); |
#define ATOMIC_LONG_OP(op) \ |
static inline void \ |
atomic_long_##op(long i, atomic_long_t *l) \ |
{ \ |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; \ |
\ |
ATOMIC_LONG_PFX(_##op)(i, v); \ |
} |
|
static inline void atomic_long_sub(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_OP(add) |
ATOMIC_LONG_OP(sub) |
ATOMIC_LONG_OP(and) |
ATOMIC_LONG_OP(or) |
ATOMIC_LONG_OP(xor) |
ATOMIC_LONG_OP(andnot) |
|
atomic_sub(i, v); |
} |
#undef ATOMIC_LONG_OP |
|
static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
return atomic_sub_and_test(i, v); |
return ATOMIC_LONG_PFX(_sub_and_test)(i, v); |
} |
|
static inline int atomic_long_dec_and_test(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
return atomic_dec_and_test(v); |
return ATOMIC_LONG_PFX(_dec_and_test)(v); |
} |
|
static inline int atomic_long_inc_and_test(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
return atomic_inc_and_test(v); |
return ATOMIC_LONG_PFX(_inc_and_test)(v); |
} |
|
static inline int atomic_long_add_negative(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
return atomic_add_negative(i, v); |
return ATOMIC_LONG_PFX(_add_negative)(i, v); |
} |
|
static inline long atomic_long_add_return(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
|
return (long)atomic_add_return(i, v); |
#define ATOMIC_LONG_INC_DEC_OP(op, mo) \ |
static inline long \ |
atomic_long_##op##_return##mo(atomic_long_t *l) \ |
{ \ |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; \ |
\ |
return (long)ATOMIC_LONG_PFX(_##op##_return##mo)(v); \ |
} |
ATOMIC_LONG_INC_DEC_OP(inc,) |
ATOMIC_LONG_INC_DEC_OP(inc, _relaxed) |
ATOMIC_LONG_INC_DEC_OP(inc, _acquire) |
ATOMIC_LONG_INC_DEC_OP(inc, _release) |
ATOMIC_LONG_INC_DEC_OP(dec,) |
ATOMIC_LONG_INC_DEC_OP(dec, _relaxed) |
ATOMIC_LONG_INC_DEC_OP(dec, _acquire) |
ATOMIC_LONG_INC_DEC_OP(dec, _release) |
|
static inline long atomic_long_sub_return(long i, atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
#undef ATOMIC_LONG_INC_DEC_OP |
|
return (long)atomic_sub_return(i, v); |
} |
|
static inline long atomic_long_inc_return(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
|
return (long)atomic_inc_return(v); |
} |
|
static inline long atomic_long_dec_return(atomic_long_t *l) |
{ |
atomic_t *v = (atomic_t *)l; |
|
return (long)atomic_dec_return(v); |
} |
|
static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) |
{ |
atomic_t *v = (atomic_t *)l; |
ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; |
|
return (long)atomic_add_unless(v, a, u); |
return (long)ATOMIC_LONG_PFX(_add_unless)(v, a, u); |
} |
|
#define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l)) |
#define atomic_long_inc_not_zero(l) \ |
ATOMIC_LONG_PFX(_inc_not_zero)((ATOMIC_LONG_PFX(_t) *)(l)) |
|
#define atomic_long_cmpxchg(l, old, new) \ |
(atomic_cmpxchg((atomic_t *)(l), (old), (new))) |
#define atomic_long_xchg(v, new) \ |
(atomic_xchg((atomic_t *)(v), (new))) |
|
#endif /* BITS_PER_LONG == 64 */ |
|
#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ |