> -----Original Message-----
> From: Varghese, Vipin
> Sent: Sunday, January 13, 2019 10:29 PM
> To: Andrew Rybchenko <arybche...@solarflare.com>; Eads, Gage
> <gage.e...@intel.com>; dev@dpdk.org
> Cc: olivier.m...@6wind.com; Richardson, Bruce <bruce.richard...@intel.com>;
> Ananyev, Konstantin <konstantin.anan...@intel.com>
> Subject: RE: [dpdk-dev] [PATCH 1/3] eal: add 128-bit cmpset (x86-64 only)
> 
> 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'.

cmpxchg16b will set the ZF if the compared values are equal, else it will clear 
the ZF, so there's no need to initialize the ZF.

Source: https://www.felixcloutier.com/x86/cmpxchg8b:cmpxchg16b

Thanks,
Gage

Reply via email to