diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-11-24 09:23:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-24 09:23:14 +0200 |
commit | 450eed7b050496cc6dd981fe20f38915063f8a7c (patch) | |
tree | d46c0c4439dab28ad6f353c2ad3bc3d166f28ce1 /platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h | |
parent | f5e9dc2da1202c6afc09559e74a63eb4126e7eef (diff) | |
parent | a323b89bd7296b7774d51774a7426d432735d061 (diff) |
Merge ODP v1.32.1.0v1.32.1.0_DPDK_19.11
Merge ODP linux-generic v1.32.1.0 into linux-dpdk
Diffstat (limited to 'platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h')
-rw-r--r-- | platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h b/platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h index e274a4d64..aec8b9f00 100644 --- a/platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h +++ b/platform/linux-generic/arch/default/odp/api/abi/atomic_generic.h @@ -10,6 +10,68 @@ #include <odp/api/atomic.h> +static inline void _odp_atomic_add_u32(odp_atomic_u32_t *atom, uint32_t val) +{ + (void)__atomic_fetch_add(&atom->v, val, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_sub_u32(odp_atomic_u32_t *atom, uint32_t val) +{ + (void)__atomic_fetch_sub(&atom->v, val, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_inc_u32(odp_atomic_u32_t *atom) +{ + (void)__atomic_fetch_add(&atom->v, 1, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_dec_u32(odp_atomic_u32_t *atom) +{ + (void)__atomic_fetch_sub(&atom->v, 1, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_add_rel_u32(odp_atomic_u32_t *atom, uint32_t val) +{ + (void)__atomic_fetch_add(&atom->v, val, __ATOMIC_RELEASE); +} + +static inline void _odp_atomic_sub_rel_u32(odp_atomic_u32_t *atom, uint32_t val) +{ + (void)__atomic_fetch_sub(&atom->v, val, __ATOMIC_RELEASE); +} + +static inline void _odp_atomic_add_u64(odp_atomic_u64_t *atom, uint64_t val) +{ + (void)__atomic_fetch_add(&atom->v, val, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_sub_u64(odp_atomic_u64_t *atom, uint64_t val) +{ + (void)__atomic_fetch_sub(&atom->v, val, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_inc_u64(odp_atomic_u64_t *atom) +{ + (void)__atomic_fetch_add(&atom->v, 1, __ATOMIC_RELAXED); +} + +static inline void _odp_atomic_dec_u64(odp_atomic_u64_t *atom) +{ + (void)__atomic_fetch_sub(&atom->v, 1, __ATOMIC_RELAXED); +} + +#ifndef ODP_ATOMIC_U64_LOCK +static inline void _odp_atomic_add_rel_u64(odp_atomic_u64_t *atom, uint64_t val) +{ + (void)__atomic_fetch_add(&atom->v, val, __ATOMIC_RELEASE); +} + +static inline void _odp_atomic_sub_rel_u64(odp_atomic_u64_t *atom, uint64_t val) +{ + (void)__atomic_fetch_sub(&atom->v, val, __ATOMIC_RELEASE); +} +#endif + #ifdef __SIZEOF_INT128__ static inline void _odp_atomic_init_u128(odp_atomic_u128_t *atom, odp_u128_t val) @@ -78,7 +140,7 @@ static inline int _odp_atomic_cas_acq_rel_u128(odp_atomic_u128_t *atom, odp_u128 * 128 bit CAS operation expression for the ATOMIC_OP macro */ #define ATOMIC_CAS_OP_128(ret_ptr, old_val, new_val) \ -({ \ +__extension__ ({ \ int *_ret_ptr = ret_ptr; \ odp_u128_t *_old_val = old_val; \ odp_u128_t _new_val = new_val; \ @@ -99,7 +161,7 @@ static inline int _odp_atomic_cas_acq_rel_u128(odp_atomic_u128_t *atom, odp_u128 * @return The old value of the variable. */ #define ATOMIC_OP_128(atom, expr) \ -({ \ +__extension__ ({ \ odp_u128_t _old_val; \ odp_atomic_u128_t *_atom = atom; \ /* Loop while lock is already taken, stop when lock becomes clear */ \ |