I've noticed that compiler generates slow code in some cases.
For example, int => float conversion, engine_i486.so, SV_SetGlobalTrace:
.text:00077FF7 movd xmm0, dword ptr [eax] //load dword to 128 bit register zeroing remaining 96 bits
.text:00077FFB movq [esp+0Ch+var_C], xmm0 //move 64 bit int to stack
.text:00078000 fild [esp+0Ch+var_C] //load float from 64bit int from stack
.text:00078003 fstp dword ptr ds:gGlobalVariables+4Ch //store it in some field of global variable
All int => float conversions in engine_i486.so are done in same way.
Two first instructions from code above do unnecessary conversion from int32 => int64 and just wastes CPU time. Code above may be written with only two instructions:
Please review optimization flags for compiler, it can generate faster code.
Also consider moving from x87 to SSE math (-mfpmath=sse), it works faster than x87 for single floats since Core2 familty CPUs.
I've noticed that compiler generates slow code in some cases.
For example, int => float conversion, engine_i486.so, SV_SetGlobalTrace:
All int => float conversions in engine_i486.so are done in same way.
Two first instructions from code above do unnecessary conversion from int32 => int64 and just wastes CPU time. Code above may be written with only two instructions:
Please review optimization flags for compiler, it can generate faster code.
Also consider moving from x87 to SSE math (-mfpmath=sse), it works faster than x87 for single floats since Core2 familty CPUs.