Re: [PATCHSET][2.6-test4][0/6]Support for HPET based timer - Take2

From: George Anzinger
Date: Sun Sep 07 2003 - 12:59:01 EST


Pallipadi, Venkatesh wrote:


-----Original Message-----
From: George Anzinger [mailto:george@xxxxxxxxxx]

Pallipadi, Venkatesh wrote:


-----Original Message-----
From: Andrew Morton [mailto:akpm@xxxxxxxx]

We seem to keep on proliferating home-grown x86 64-bit math

functions.

Do you really need these? Is it possible to use do_div() and the C 64x64
`*' operator instead?




We can change these handcoded 64 bit divs to do_div, with just an
additional data copy

We already have this in .../include/asm-i386/div64.h. Check usage in .../posix-timers.c to cover archs that have not yet included it in there div64.h.




Yes. We can surely use div_long_long_rem from div64 in place of defining this again. This kind of code is already there in the existing ia32 timer
code too. I will try and come up with a cleanup patch to replace all these individual asm div statements.



(as do_div changes dividend in place). But, changing mul

into 64x64 '*'

may be tricky. Gcc seem to generate a combination of mul, 2imul and add,

where as we

are happy with using only one mull here.

You just need to do the right casting. It should like u64=u32*(u64)u32 as in .../kernel/posix-timers.c. This could also be signed with the same results. If you really need to do a u64*u32, it will do that as well but takes two mpys. In this case you will need to do it unsigned to eliminate the third mpy.



Interesting. Is this casting to generate proper mul instruction
some sort of C standard or is it a gcc feature. I just want to
make sure doing this way won't break on some other compiler (or on some other version of gcc itself).

I don't really know, but I suspect it is a gcc thing. Some how the standards folks got in and messed up the original idea of keeping the language close to the machine when they said that the data type in to and out of a C operator should be the same, thus not allowing the true mpy result to find expression in the language. The same thing applies to the "/" and "%" operators, which to my knowledge, require either really messy macros/c code or asm to allow the machine u64/u32 to work.


Thanks,
-Venkatesh



--
George Anzinger george@xxxxxxxxxx
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/