iMMI: Unbreak PMSUBW, PMULTW, and PMADDUW

Fixes: 9c61053fe0
This commit is contained in:
TellowKrinkle 2025-08-25 18:31:29 -05:00 committed by TellowKrinkle
parent e31625d2bd
commit 8f64d118c8

View File

@ -1600,9 +1600,9 @@ void recPMSUBW()
int dst = _Rd_ ? EEREC_D : EEREC_HI; int dst = _Rd_ ? EEREC_D : EEREC_HI;
if (!_Rs_ || !_Rt_) if (!_Rs_ || !_Rt_)
xPXOR(xRegisterSSE(EEREC_HI), xRegisterSSE(EEREC_HI)); xPXOR(xRegisterSSE(dst), xRegisterSSE(dst));
else else
xPMUL.DQ(xRegisterSSE(EEREC_HI), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T)); xPMUL.DQ(xRegisterSSE(dst), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T));
// sub from LO/HI // sub from LO/HI
if (x86Emitter::use_avx) if (x86Emitter::use_avx)
@ -1638,7 +1638,7 @@ void recPMULTW()
else else
{ {
int dst = _Rd_ ? EEREC_D : EEREC_HI; int dst = _Rd_ ? EEREC_D : EEREC_HI;
xPMUL.DQ(xRegisterSSE(EEREC_HI), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T)); xPMUL.DQ(xRegisterSSE(dst), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T));
// interleave & sign extend // interleave & sign extend
xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(dst), 0x88); xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(dst), 0x88);
@ -2220,7 +2220,7 @@ void recPMADDUW()
xSHUF.PS(xRegisterSSE(EEREC_LO), xRegisterSSE(EEREC_HI), 0x88); xSHUF.PS(xRegisterSSE(EEREC_LO), xRegisterSSE(EEREC_HI), 0x88);
xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(EEREC_LO), 0xd8); // LO = {LO[0], HI[0], LO[2], HI[2]} xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(EEREC_LO), 0xd8); // LO = {LO[0], HI[0], LO[2], HI[2]}
int dst = _Rd_ ? EEREC_D : EEREC_HI; int dst = _Rd_ ? EEREC_D : EEREC_HI;
xPMUL.UDQ(xRegisterSSE(EEREC_HI), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T)); xPMUL.UDQ(xRegisterSSE(dst), xRegisterSSE(EEREC_S), xRegisterSSE(EEREC_T));
xPADD.Q(xRegisterSSE(dst), xRegisterSSE(EEREC_LO)); xPADD.Q(xRegisterSSE(dst), xRegisterSSE(EEREC_LO));
// interleave & sign extend // interleave & sign extend
xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(dst), 0x88); xPSHUF.D(xRegisterSSE(EEREC_LO), xRegisterSSE(dst), 0x88);