34 #ifndef _RTE_ATOMIC_H_
35 #define _RTE_ATOMIC_H_
55 static inline void rte_mb(
void);
64 static inline void rte_wmb(
void);
73 static inline void rte_rmb(
void);
83 #define rte_compiler_barrier() do { \
84 asm volatile ("" : : : "memory"); \
108 #ifdef RTE_FORCE_INTRINSICS
112 return __sync_bool_compare_and_swap(dst, exp, src);
126 #define RTE_ATOMIC16_INIT(val) { (val) }
148 static inline int16_t
179 __sync_fetch_and_add(&v->
cnt, inc);
193 __sync_fetch_and_sub(&v->
cnt, dec);
205 #ifdef RTE_FORCE_INTRINSICS
222 #ifdef RTE_FORCE_INTRINSICS
243 static inline int16_t
246 return __sync_add_and_fetch(&v->
cnt, inc);
263 static inline int16_t
266 return __sync_sub_and_fetch(&v->
cnt, dec);
282 #ifdef RTE_FORCE_INTRINSICS
285 return (__sync_add_and_fetch(&v->
cnt, 1) == 0);
302 #ifdef RTE_FORCE_INTRINSICS
305 return (__sync_sub_and_fetch(&v->
cnt, 1) == 0);
322 #ifdef RTE_FORCE_INTRINSICS
361 #ifdef RTE_FORCE_INTRINSICS
365 return __sync_bool_compare_and_swap(dst, exp, src);
379 #define RTE_ATOMIC32_INIT(val) { (val) }
401 static inline int32_t
432 __sync_fetch_and_add(&v->
cnt, inc);
446 __sync_fetch_and_sub(&v->
cnt, dec);
458 #ifdef RTE_FORCE_INTRINSICS
475 #ifdef RTE_FORCE_INTRINSICS
496 static inline int32_t
499 return __sync_add_and_fetch(&v->
cnt, inc);
516 static inline int32_t
519 return __sync_sub_and_fetch(&v->
cnt, dec);
535 #ifdef RTE_FORCE_INTRINSICS
538 return (__sync_add_and_fetch(&v->
cnt, 1) == 0);
555 #ifdef RTE_FORCE_INTRINSICS
558 return (__sync_sub_and_fetch(&v->
cnt, 1) == 0);
575 #ifdef RTE_FORCE_INTRINSICS
613 #ifdef RTE_FORCE_INTRINSICS
617 return __sync_bool_compare_and_swap(dst, exp, src);
631 #define RTE_ATOMIC64_INIT(val) { (val) }
642 #ifdef RTE_FORCE_INTRINSICS
652 while (success == 0) {
669 static inline int64_t
672 #ifdef RTE_FORCE_INTRINSICS
673 static inline int64_t
682 while (success == 0) {
704 #ifdef RTE_FORCE_INTRINSICS
714 while (success == 0) {
734 #ifdef RTE_FORCE_INTRINSICS
738 __sync_fetch_and_add(&v->
cnt, inc);
753 #ifdef RTE_FORCE_INTRINSICS
757 __sync_fetch_and_sub(&v->
cnt, dec);
770 #ifdef RTE_FORCE_INTRINSICS
787 #ifdef RTE_FORCE_INTRINSICS
808 static inline int64_t
811 #ifdef RTE_FORCE_INTRINSICS
812 static inline int64_t
815 return __sync_add_and_fetch(&v->
cnt, inc);
832 static inline int64_t
835 #ifdef RTE_FORCE_INTRINSICS
836 static inline int64_t
839 return __sync_sub_and_fetch(&v->
cnt, dec);
856 #ifdef RTE_FORCE_INTRINSICS
876 #ifdef RTE_FORCE_INTRINSICS
896 #ifdef RTE_FORCE_INTRINSICS
911 #ifdef RTE_FORCE_INTRINSICS