[dpdk-dev] [PATCH 1/3] eal: add 128-bit cmpset (x86-64 only)
Varghese, Vipin
vipin.varghese at intel.com
Mon Jan 14 05:29:03 CET 2019
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_ */
More information about the dev
mailing list