Messages in this thread | | | Date | Wed, 24 Oct 2012 15:27:15 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH 02/16] math128, x86_64: Implement {mul,add}_u128 in 64bit asm |
| |
On 10/24/2012 02:53 PM, Juri Lelli wrote: > diff --git a/arch/x86/include/asm/math128.h b/arch/x86/include/asm/math128.h > new file mode 100644 > index 0000000..c0e2a6c > --- /dev/null > +++ b/arch/x86/include/asm/math128.h > @@ -0,0 +1,39 @@ > +#ifndef _ASM_MATH128_H > +#define _ASM_MATH128_H > + > +#ifdef CONFIG_X86_64 > + > +#ifdef __SIZEOF_INT128__ > +#define ARCH_HAS_INT128 > +#endif > + > +#ifndef ARCH_HAS_INT128 > + > +static inline u128 mul_u64_u64(u64 a, u64 b) > +{ > + u128 res; > + > + asm("mulq %2" > + : "=a" (res.lo), "=d" (res.hi) > + : "rm" (b), "0" (a)); > + > + return res; > +} > +#define mul_u64_u64 mul_u64_u64 > + > +static inline u128 add_u128(u128 a, u128 b) > +{ > + u128 res; > + > + asm("addq %2,%0;\n" > + "adcq %3,%1;\n" > + : "=rm" (res.lo), "=rm" (res.hi) > + : "r" (b.lo), "r" (b.hi), "0" (a.lo), "1" (a.hi)); > + > + return res; > +} > +#define add_u128 add_u128 > +
How could this work since u128 presumably has not yet been defined as a structure? After all, isn't it the absence of ARCH_HAS_INT128 which makes that happen?
-hpa
| |