Re: do_div64 generic

From: george anzinger (
Date: Thu Jul 17 2003 - 18:09:13 EST

Bernardo Innocenti wrote:
> On Wednesday 16 July 2003 20:33, Bernardo Innocenti wrote:
>>>>Bernardo, can you do the patch please?
>> I would be glad to do it once the discussion has settled, whatever
>>the final decision will be. Just don't make me do it twice, please ;-)
> So far nobody have commented and the problem is still unaddressed.
> What shall I do? As far as I can tell, our options are:
> 1) add surrogates of div_long_long_rem() in asm-generic/div64.h and in
> all other archs that have their own optimized versions of do_div().
> I already have a patch for this, but it has been tested only on i386
> and m68knommu.
> 2) replace all uses of div_long_long_rem() (I see onlt 4 of them in
> 2.6.0-test1) with do_div(). This is slightly less efficient, but
> easier to maintain in the long term.

Actually, the macro to do this is already there. Is there a real
reason not to use it. The using code sure looks cleaner with it.
> I shall note that I _hate_ fixing compiler problems in the kernel. The
> real fix I'm dreaming involves adding specialized patterns in GCC to
> generate an optimal instruction sequence for all these cases.

I would love to get to the instruction via normal C.
> Of course we should realize that we need to support older versions of
> GCC and, even if we didn't, we can't wait for the next GCC release :-)
> So, if we're going to live with do_div(), I think we could as well
> have a set of macros for the most frequent cases. I've just spotted
> another candidate in kernel/posix-timers.c: mpy_l_X_l_ll().

The mpy_l_X_l_ll() is there because it is so easy to get it wrong. It
is standard C (well gcc) but if you don't get the casting just right
it will throw away the high bits.
> This is not a third option for fixing our immediate problem: it's
> just an idea for future improvement.
> Andrew, George, please comment.

Is there any need to change any thing at all? Or maybe a comment
somewhere on what direction we would like things to go.

When I look at the div code on the risc machines I begin to really
understand why gcc avoids the div instruction so actively. (It
optimizes away almost all divides by constants.)

George Anzinger
Preemption patch:

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to More majordomo info at Please read the FAQ at

This archive was generated by hypermail 2b29 : Wed Jul 23 2003 - 22:00:31 EST