aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86')
-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)
51 51
52} 52}
53 53
54static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
55{
56 union {
57 u64 v64;
58 u32 v32[2];
59 } d = { dividend };
60 u32 upper;
61
62 upper = d.v32[1];
63 d.v32[1] = 0;
64 if (upper >= divisor) {
65 d.v32[1] = upper / divisor;
66 upper %= divisor;
67 }
68 asm ("divl %2" : "=a" (d.v32[0]), "=d" (*remainder) :
69 "rm" (divisor), "0" (d.v32[0]), "1" (upper));
70 return d.v64;
71}
72#define div_u64_rem div_u64_rem
73
54extern uint64_t div64_64(uint64_t dividend, uint64_t divisor); 74extern uint64_t div64_64(uint64_t dividend, uint64_t divisor);
55 75
56#else 76#else