01 May, 2008

3 commits

  • x86 is the only arch right now, which provides an optimized for
    div_long_long_rem and it has the downside that one has to be very careful that
    the divide doesn't overflow.

    The API is a little akward, as the arguments for the unsigned divide are
    signed. The signed version also doesn't handle a negative divisor and
    produces worse code on 64bit archs.

    There is little incentive to keep this API alive, so this converts the few
    users to the new API.

    Signed-off-by: Roman Zippel
    Cc: Ralf Baechle
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: john stultz
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roman Zippel
     
  • Rename div64_64 to div64_u64 to make it consistent with the other divide
    functions, so it clearly includes the type of the divide. Move its definition
    to math64.h as currently no architecture overrides the generic implementation.
    They can still override it of course, but the duplicated declarations are
    avoided.

    Signed-off-by: Roman Zippel
    Cc: Avi Kivity
    Cc: Russell King
    Cc: Geert Uytterhoeven
    Cc: Ralf Baechle
    Cc: David Howells
    Cc: Jeff Dike
    Cc: Ingo Molnar
    Cc: "David S. Miller"
    Cc: Patrick McHardy
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roman Zippel
     
  • 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
    Cc: john stultz
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roman Zippel
     

17 Apr, 2008

1 commit


24 Oct, 2007

1 commit


11 Oct, 2007

1 commit