[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 05/10] x86: Add functions for 64-bit integer arithmetic
On 02/05/16 21:36, Jan Beulich wrote: > >>> On 17.01.16 at 22:58, <haozhong.zhang@xxxxxxxxx> wrote: > > This patch adds several functions to take multiplication, division and > > shifting involving 64-bit integers. > > > > Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx> > > Reviewed-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> > > --- > > Changes in v4: > > (addressing Jan Beulich's comments) > > * Rewrite mul_u64_u64_shr() in assembly. > > Thanks, but it puzzles me that the other one didn't get converted > as well. Anyway, I'm not going to make this a requirement, since > at least it appears to match Linux'es variant. > I can't remember why I didn't rewrite mul_u64_u32_div(), especially when it can be easily implemented as static inline u64 mul_u64_u32_div(u64 a, u32 mul, u32 divisor) { u64 quotient, remainder; asm volatile ( "mulq %3; divq %4" : "=a" (quotient), "=d" (remainder) : "0" (a), "rm" ((u64) mul), "c" ((u64) divisor) ); return quotient; } I'll modify it in the next version. > > +static inline u64 mul_u64_u64_shr(u64 a, u64 mul, unsigned int n) > > +{ > > + u64 hi, lo; > > + > > + asm volatile ( "mulq %2; shrdq %1,%0" > > + : "=a" (lo), "=d" (hi) > > + : "rm" (mul), "0" (a), "c" (n) ); > > SHRD formally is a 3-operand instruction, and the fact that gas' > AT&T syntax supports a 2-operand "alias" is, well, odd. Please > let's use the specification mandated 3-operand form properly, > to avoid surprises with e.g. clang. > OK, I'll change it to the 3-operand form. Haozhong _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |