summaryrefslogtreecommitdiff
path: root/include/asm-x86/div64.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86/div64.h')
-rw-r--r--include/asm-x86/div64.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/asm-x86/div64.h b/include/asm-x86/div64.h
index 0dbf8bf3ef0a..c7892cfe9ce6 100644
--- a/include/asm-x86/div64.h
+++ b/include/asm-x86/div64.h
@@ -51,6 +51,26 @@ static inline long div_ll_X_l_rem(long long divs, long div, long *rem)
}
+static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
+{
+ union {
+ u64 v64;
+ u32 v32[2];
+ } d = { dividend };
+ u32 upper;
+
+ upper = d.v32[1];
+ d.v32[1] = 0;
+ if (upper >= divisor) {
+ d.v32[1] = upper / divisor;
+ upper %= divisor;
+ }
+ asm ("divl %2" : "=a" (d.v32[0]), "=d" (*remainder) :
+ "rm" (divisor), "0" (d.v32[0]), "1" (upper));
+ return d.v64;
+}
+#define div_u64_rem div_u64_rem
+
extern uint64_t div64_64(uint64_t dividend, uint64_t divisor);
#else