



Special conversion for when IEEE sees the value in reg as an INF/NaN XCVTSS2SD(xRegisterSSE(reg), xRegisterSSE(reg)) // Simply convert U8 *to_complex2 = JE8(0) // Complex conversion if negative infinity U8 *to_complex = JE8(0) // Complex conversion if positive infinity or NaN XUCOMI.SS(xRegisterSSE(reg), ptr) // Sets ZF if reg is equal or incomparable to pos_inf Basically it checks if number is real (2 cmp), then uses x86 conversion others do a /2, conversion, *2. Idea 2: Accelerate the double/float conversion to avoid any branches double -> float is replaced by min/max clamping and a trunc (if we doesn't compute flags).keep double in xmm -> less move, less registers trash.no double -> float conversion for all arguments.Currently we throw the XMM register that contains the double of the reg. As a bonus, it would avoid it would allow to keep the double in register. I think it would be better to do the conversion directly in load/store. However when you think about it, the context switch is likely not used often. Various games barely uses float so the cost of load/store are bigger than operations. Load/store are of course used when you want to do float operation. Idea 1: move conversion cost from arith to load/storeĬurrently the double float conversion is done for each instructions. Maybe a first step could be the removal of MMX. The biggest issue is that code is still relying on MMX (+x86, +XMM) for register allocation so it would be painful to change. Here's a bit of info from Tribes:Aerial assault as a test case, (Instructions with _F is the one for FPU "S" Instruction class ) build download link for testing : ssakash#17

Which games do you need to test ? I just set up the profiler codes for the COP1 instructions and should be able to test it.
