diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-03-22 12:10:18 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-25 22:27:18 -0700 |
commit | 22b9a0a3a49ab1a856e0853b3f3dd2abd156bd7c (patch) | |
tree | bacdd0f5ab3e94f5f137b03072b2319eeb767d2b /lib/div64.c | |
parent | c454673da7c1d6533f40ec2f788023df9af56ebf (diff) | |
download | lwn-22b9a0a3a49ab1a856e0853b3f3dd2abd156bd7c.tar.gz lwn-22b9a0a3a49ab1a856e0853b3f3dd2abd156bd7c.zip |
[LIB]: div64_64 optimization
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>
Diffstat (limited to 'lib/div64.c')
-rw-r--r-- | lib/div64.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/lib/div64.c b/lib/div64.c index c3d7655cdfb5..74f0c8cb4031 100644 --- a/lib/div64.c +++ b/lib/div64.c @@ -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; } |