yespax.blogg.se

Eternal poison pcsx2 text
Eternal poison pcsx2 text




eternal poison pcsx2 text eternal poison pcsx2 text

  • there is potentially different rounding for sqrt/div/rsqrt.
  • (maybe just rounding down the last digit could work, dunno)
  • sub has a different rounding (IEEE has 3 extra bits round/guard/sticky, PS2 is ?).
  • In order to keep an option for smaller config. Using abs and ucomi for the cmp instead of andn/ptest (so it remains in float unit, and works on SSE2). Maybe we can extend my previous idea to do operation in float and if results isn't valid redo the operation in double. Is probably not addressed by this thought-trainĪt least, it allows me to better understand the code 😛 And I suspect VU has the same mess but speed impact on VU is the perf. But instead to add an integer exp_correction to increase the exponent we could just do a float multiplication by 2^exp_correction. However case 0 is special so it need a special case. Which basically puts extra 0 on the float to transform it in double. I uses a different approach on the interpreter. XPADD.Q(xRegisterSSE(reg), ptr) // Raise exponent by one XCVTSS2SD(xRegisterSSE(reg), xRegisterSSE(reg)) XPSUB.D(xRegisterSSE(reg), ptr) // Lower exponent by one

    eternal poison pcsx2 text

    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

    eternal poison pcsx2 text

    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.






    Eternal poison pcsx2 text