Hi Gage, snipped > > @@ -208,4 +209,25 @@ static inline void > rte_atomic64_clear(rte_atomic64_t *v) > > } > > #endif > > > > +static inline int > > +rte_atomic128_cmpset(volatile uint64_t *dst, uint64_t *exp, uint64_t > > +*src) { > > + uint8_t res; > > + > > + asm volatile ( > > + MPLOCKED > > + "cmpxchg16b %[dst];" > > + " sete %[res]" > > + : [dst] "=m" (*dst), > > + [res] "=r" (res) > > + : "c" (src[1]), > > + "b" (src[0]), > > + "m" (*dst), > > + "d" (exp[1]), > > + "a" (exp[0]) > > + : "memory"); Since update depends upon on the 'set|unset' value of ZF, should we first set ZF to 0?
Apologies in advance if it is internally taken care by 'sete'. > > + > > + return res; > > +} > > + > > #endif /* _RTE_ATOMIC_X86_64_ > > Is it OK to add it to rte_atomic_64.h header which is for 64-bit integer ops? > > Andrew. > > H_ */