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)
commit2418f4f28f8467b92a6177af32d05737ebf6206c
treecd35f4feef2ed3078ebb7ce6dcaf5f627299944e
parentadafbedf0c31ae1cde62035c82857f5e376af553
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