[RFC][PATCH 3/3] math128, x86_64: Implement {mult,add}_u128 in 64bit asm

From: Peter Zijlstra
Date: Tue Apr 24 2012 - 12:25:53 EST




Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: H. Peter Anvin <hpa@xxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
---
arch/x86/include/asm/math128.h | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

--- a/arch/x86/include/asm/math128.h
+++ b/arch/x86/include/asm/math128.h
@@ -1,4 +1,33 @@
#ifndef _ASM_MATH128_H
#define _ASM_MATH128_H

+#ifdef CONFIG_X86_64
+
+static inline mult_u128(u64 a, u64 b)
+{
+ u128 res;
+
+ asm("mulq %2"
+ : "=a" (res.lo), "=d" (res.hi)
+ : "rm" (b), "0" (a));
+
+ return res;
+}
+#define mult_u128 mult_u128
+
+static inline 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
+
+#endif /* CONFIG_X86_64 */
+
#endif /* _ASM_MATH128_H */


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/