• Roman Zippel's avatar
    introduce explicit signed/unsigned 64bit divide · 2418f4f2
    Roman Zippel authored
    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: default avatarRoman Zippel <zippel@linux-m68k.org>
    Cc: john stultz <johnstul@us.ibm.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2418f4f2
div64.c 2.05 KB