Re: [AD] C++ fix math

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


Eric Botcazou wrote:
I simply wonder whether it wouldn't be better (performance-wise) to let the
FPU do the multiplication instead of using the integer-based fixmul().

Bob, are you around there ? What do you think of the game i386 FPU's fmul()
vs algcc386.h's fixmul() ?


I have to agree, fixmul needs some optimizing, if only to remove all those branches. I'll see if I can come up something.

Using the FPU to do integer math is generally a bad idea:
 - Float<->int conversion requires a memory access (slow)
- Converting the read float to a fractional part will require a division (slower) - Floats have less precision then ints. We'd need to use doubles, for which division is even slower. - The result then needs to be checked for overflow and clamped to (float)0x7FFFFFFF (slowest)
 - The result needs to be converted back to an int (slow).
 - We get a long dependency chain involving the FPU (very slow)

All in all, I think we should keep fixmul as integer ops.




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/