]> git.baikalelectronics.ru Git - kernel.git/commit
introduce explicit signed/unsigned 64bit divide
authorRoman Zippel <zippel@linux-m68k.org>
Thu, 1 May 2008 11:34:25 +0000 (04:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 1 May 2008 15:03:58 +0000 (08:03 -0700)
commita7fc1bff7d695e659c5ef0d9d724352cb5718961
treecd35f4feef2ed3078ebb7ce6dcaf5f627299944e
parent7ea3b4a3cae2b3f0c9e0f0660db5d908f2dfa09c
introduce explicit signed/unsigned 64bit divide

The current do_div doesn't explicitly say that it's unsigned and the signed
counterpart is missing, which is e.g.  needed when dealing with time values.

This introduces 64bit signed/unsigned divide functions which also attempts to
cleanup the somewhat awkward calling API, which often requires the use of
temporary variables for the dividend.  To avoid the need for temporary
variables everywhere for the remainder, each divide variant also provides a
version which doesn't return the remainder.

Each architecture can now provide optimized versions of these function,
otherwise generic fallback implementations will be used.

As an example I provided an alternative for the current x86 divide, which
avoids the asm casts and using an union allows gcc to generate better code.
It also avoids the upper divde in a few more cases, where the result is known
(i.e.  upper quotient is zero).

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/asm-x86/div64.h
include/linux/math64.h [new file with mode: 0644]
lib/div64.c