29 static inline void rte_mb(
void);
37 static inline void rte_wmb(
void);
45 static inline void rte_rmb(
void);
157 #define rte_compiler_barrier() do { \ 158 asm volatile ("" : : : "memory"); \ 182 #ifdef RTE_FORCE_INTRINSICS 186 return __sync_bool_compare_and_swap(dst, exp, src);
205 static inline uint16_t
208 #ifdef RTE_FORCE_INTRINSICS 209 static inline uint16_t
212 #if defined(__clang__) 213 return __atomic_exchange_n(dst, val, __ATOMIC_SEQ_CST);
215 return __atomic_exchange_2(dst, val, __ATOMIC_SEQ_CST);
230 #define RTE_ATOMIC16_INIT(val) { (val) } 252 static inline int16_t
283 __sync_fetch_and_add(&v->
cnt, inc);
297 __sync_fetch_and_sub(&v->
cnt, dec);
309 #ifdef RTE_FORCE_INTRINSICS 326 #ifdef RTE_FORCE_INTRINSICS 347 static inline int16_t
350 return __sync_add_and_fetch(&v->
cnt, inc);
367 static inline int16_t
370 return __sync_sub_and_fetch(&v->
cnt, dec);
386 #ifdef RTE_FORCE_INTRINSICS 389 return __sync_add_and_fetch(&v->
cnt, 1) == 0;
406 #ifdef RTE_FORCE_INTRINSICS 409 return __sync_sub_and_fetch(&v->
cnt, 1) == 0;
426 #ifdef RTE_FORCE_INTRINSICS 465 #ifdef RTE_FORCE_INTRINSICS 469 return __sync_bool_compare_and_swap(dst, exp, src);
488 static inline uint32_t
491 #ifdef RTE_FORCE_INTRINSICS 492 static inline uint32_t
495 #if defined(__clang__) 496 return __atomic_exchange_n(dst, val, __ATOMIC_SEQ_CST);
498 return __atomic_exchange_4(dst, val, __ATOMIC_SEQ_CST);
513 #define RTE_ATOMIC32_INIT(val) { (val) } 535 static inline int32_t
566 __sync_fetch_and_add(&v->
cnt, inc);
580 __sync_fetch_and_sub(&v->
cnt, dec);
592 #ifdef RTE_FORCE_INTRINSICS 609 #ifdef RTE_FORCE_INTRINSICS 630 static inline int32_t
633 return __sync_add_and_fetch(&v->
cnt, inc);
650 static inline int32_t
653 return __sync_sub_and_fetch(&v->
cnt, dec);
669 #ifdef RTE_FORCE_INTRINSICS 672 return __sync_add_and_fetch(&v->
cnt, 1) == 0;
689 #ifdef RTE_FORCE_INTRINSICS 692 return __sync_sub_and_fetch(&v->
cnt, 1) == 0;
709 #ifdef RTE_FORCE_INTRINSICS 747 #ifdef RTE_FORCE_INTRINSICS 751 return __sync_bool_compare_and_swap(dst, exp, src);
770 static inline uint64_t
773 #ifdef RTE_FORCE_INTRINSICS 774 static inline uint64_t
777 #if defined(__clang__) 778 return __atomic_exchange_n(dst, val, __ATOMIC_SEQ_CST);
780 return __atomic_exchange_8(dst, val, __ATOMIC_SEQ_CST);
795 #define RTE_ATOMIC64_INIT(val) { (val) } 806 #ifdef RTE_FORCE_INTRINSICS 816 while (success == 0) {
833 static inline int64_t
836 #ifdef RTE_FORCE_INTRINSICS 837 static inline int64_t
846 while (success == 0) {
868 #ifdef RTE_FORCE_INTRINSICS 878 while (success == 0) {
898 #ifdef RTE_FORCE_INTRINSICS 902 __sync_fetch_and_add(&v->
cnt, inc);
917 #ifdef RTE_FORCE_INTRINSICS 921 __sync_fetch_and_sub(&v->
cnt, dec);
934 #ifdef RTE_FORCE_INTRINSICS 951 #ifdef RTE_FORCE_INTRINSICS 972 static inline int64_t
975 #ifdef RTE_FORCE_INTRINSICS 976 static inline int64_t
979 return __sync_add_and_fetch(&v->
cnt, inc);
996 static inline int64_t
999 #ifdef RTE_FORCE_INTRINSICS 1000 static inline int64_t
1003 return __sync_sub_and_fetch(&v->
cnt, dec);
1020 #ifdef RTE_FORCE_INTRINSICS 1040 #ifdef RTE_FORCE_INTRINSICS 1060 #ifdef RTE_FORCE_INTRINSICS 1075 #ifdef RTE_FORCE_INTRINSICS 1124 static inline int __rte_experimental
1127 const rte_int128_t *src,
static void rte_atomic32_inc(rte_atomic32_t *v)
static int64_t rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec)
static void rte_smp_rmb(void)
static int rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src)
static int16_t rte_atomic16_read(const rte_atomic16_t *v)
static void rte_wmb(void)
static void rte_atomic32_add(rte_atomic32_t *v, int32_t inc)
static int rte_atomic16_dec_and_test(rte_atomic16_t *v)
static int64_t rte_atomic64_read(rte_atomic64_t *v)
static int16_t rte_atomic16_sub_return(rte_atomic16_t *v, int16_t dec)
static void rte_atomic32_sub(rte_atomic32_t *v, int32_t dec)
static void rte_cio_rmb(void)
static int __rte_experimental rte_atomic128_cmp_exchange(rte_int128_t *dst, rte_int128_t *exp, const rte_int128_t *src, unsigned int weak, int success, int failure)
static void rte_atomic32_dec(rte_atomic32_t *v)
static int rte_atomic32_inc_and_test(rte_atomic32_t *v)
static void rte_io_mb(void)
static void rte_atomic64_inc(rte_atomic64_t *v)
static void rte_atomic32_set(rte_atomic32_t *v, int32_t new_value)
static int32_t rte_atomic32_add_return(rte_atomic32_t *v, int32_t inc)
static void rte_atomic16_add(rte_atomic16_t *v, int16_t inc)
static void rte_atomic32_init(rte_atomic32_t *v)
static void rte_atomic16_clear(rte_atomic16_t *v)
static int rte_atomic16_test_and_set(rte_atomic16_t *v)
static int rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src)
static void rte_atomic16_sub(rte_atomic16_t *v, int16_t dec)
static void rte_atomic16_set(rte_atomic16_t *v, int16_t new_value)
static void rte_io_wmb(void)
static void rte_atomic64_clear(rte_atomic64_t *v)
static int16_t rte_atomic16_add_return(rte_atomic16_t *v, int16_t inc)
static int rte_atomic64_dec_and_test(rte_atomic64_t *v)
static void rte_smp_wmb(void)
static int64_t rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc)
static void rte_rmb(void)
static void rte_atomic32_clear(rte_atomic32_t *v)
static void rte_atomic16_inc(rte_atomic16_t *v)
static int rte_atomic16_inc_and_test(rte_atomic16_t *v)
static int rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src)
static int rte_atomic64_inc_and_test(rte_atomic64_t *v)
static int32_t rte_atomic32_sub_return(rte_atomic32_t *v, int32_t dec)
static void rte_atomic64_sub(rte_atomic64_t *v, int64_t dec)
static uint16_t rte_atomic16_exchange(volatile uint16_t *dst, uint16_t val)
static int rte_atomic32_test_and_set(rte_atomic32_t *v)
static void rte_smp_mb(void)
static uint32_t rte_atomic32_exchange(volatile uint32_t *dst, uint32_t val)
static void rte_atomic16_dec(rte_atomic16_t *v)
static void rte_atomic64_init(rte_atomic64_t *v)
static void rte_atomic64_dec(rte_atomic64_t *v)
static void rte_atomic16_init(rte_atomic16_t *v)
static int rte_atomic64_test_and_set(rte_atomic64_t *v)
static uint64_t rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val)
static void rte_cio_wmb(void)
static int32_t rte_atomic32_read(const rte_atomic32_t *v)
static void rte_atomic64_set(rte_atomic64_t *v, int64_t new_value)
static int rte_atomic32_dec_and_test(rte_atomic32_t *v)
static void rte_atomic64_add(rte_atomic64_t *v, int64_t inc)
static void rte_io_rmb(void)