[LIB]: div64_64 optimization
authorStephen Hemminger <shemminger@linux-foundation.org>
Thu, 22 Mar 2007 19:10:18 +0000 (12:10 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 26 Apr 2007 05:27:18 +0000 (22:27 -0700)
Minor optimization of div64_64.  do_div() already does optimization
for the case of 32 by 32 divide, so no need to do it here.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
lib/div64.c

index c3d7655cdfb5537b2b6ef71e09d284827552050a..74f0c8cb40315f6b985c96a238dbb99b382931d6 100644 (file)
@@ -61,20 +61,18 @@ EXPORT_SYMBOL(__div64_32);
 /* 64bit divisor, dividend and result. dynamic precision */
 uint64_t div64_64(uint64_t dividend, uint64_t divisor)
 {
-       uint32_t d = divisor;
+       uint32_t high, d;
 
-       if (divisor > 0xffffffffULL) {
-               unsigned int shift = fls(divisor >> 32);
+       high = divisor >> 32;
+       if (high) {
+               unsigned int shift = fls(high);
 
                d = divisor >> shift;
                dividend >>= shift;
-       }
+       } else
+               d = divisor;
 
-       /* avoid 64 bit division if possible */
-       if (dividend >> 32)
-               do_div(dividend, d);
-       else
-               dividend = (uint32_t) dividend / d;
+       do_div(dividend, d);
 
        return dividend;
 }