X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fasm-x86%2Fdiv64.h;h=c7892cfe9ce65d5e92e09bdd011791c04e24274b;hb=2418f4f28f8467b92a6177af32d05737ebf6206c;hp=0dbf8bf3ef0a8d06308ea3cf8e72612c28c016c2;hpb=9e9abecfc0ff3a9ad2ead954b37bbfcb863c775e;p=linux-2.6 diff --git a/include/asm-x86/div64.h b/include/asm-x86/div64.h index 0dbf8bf3ef..c7892cfe9c 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