|
[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 |