[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 07/13] x86: Add functions for 64-bit integer arithmetic
On 01/08/16 02:34, Jan Beulich wrote: > >>> On 31.12.15 at 04:03, <haozhong.zhang@xxxxxxxxx> wrote: > > --- /dev/null > > +++ b/xen/include/asm-x86/math64.h > > @@ -0,0 +1,105 @@ > > +#ifndef __X86_MATH64 > > +#define __X86_MATH64 > > + > > +/* > > + * Functions defined in this file are derived from Linux kernel > > + * (include/linux/math64.h). > > + */ > > This is not true. At least mul64() doesn't exist in Linux (as of 4.4-rc8). > My fault. I took them from my KVM patches and didn't notice they were refactored a little when merging. > > +static inline void mul64(u64 *lo, u64 *hi, u64 a, u64 b) > > +{ > > + typedef union { > > + u64 ll; > > + struct { > > + u32 low, high; > > + } l; > > + } LL; > > + LL rl, rm, rn, rh, a0, b0; > > + u64 c; > > + > > + a0.ll = a; > > + b0.ll = b; > > + > > + rl.ll = (u64)a0.l.low * b0.l.low; > > + rm.ll = (u64)a0.l.low * b0.l.high; > > + rn.ll = (u64)a0.l.high * b0.l.low; > > + rh.ll = (u64)a0.l.high * b0.l.high; > > + > > + c = (u64)rl.l.high + rm.l.low + rn.l.low; > > + rl.l.high = c; > > + c >>= 32; > > + c = c + rm.l.high + rn.l.high + rh.l.low; > > + rh.l.low = c; > > + rh.l.high += (u32)(c >> 32); > > + > > + *lo = rl.ll; > > + *hi = rh.ll; > > +} > > For this one in particular, but likely also for the others: If this was > put in include/xen/math64.h I might buy it. As an x86-specific > implementation this could (and should) be done with a single asm() > statement using the MUL instruction (I didn't check whether gcc > also offers a built-in, which then could be used generically). > gcc does provide a 128-bit integer type __int128. If my memory is correct, it can be used for above mul64, but can not be compiled in Xen if being used for division. Anyway, as above functions are x86-specific so far, I'll reimplement them by assembly in the next version. Haozhong _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |