diff --git a/pcsx2/MMI.cpp b/pcsx2/MMI.cpp index 55ae2eca5a..1ab31e3508 100644 --- a/pcsx2/MMI.cpp +++ b/pcsx2/MMI.cpp @@ -1049,19 +1049,19 @@ void PMADDW() { void PSLLVW() { if (!_Rd_) return; - cpuRegs.GPR.r[_Rd_].UD[0] = (s32)(cpuRegs.GPR.r[_Rt_].UL[0] << - (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); - cpuRegs.GPR.r[_Rd_].UD[1] = (s32)(cpuRegs.GPR.r[_Rt_].UL[2] << - (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[0] = (s64)(s32)(cpuRegs.GPR.r[_Rt_].UL[0] << + (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[1] = (s64)(s32)(cpuRegs.GPR.r[_Rt_].UL[2] << + (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); } void PSRLVW() { if (!_Rd_) return; - cpuRegs.GPR.r[_Rd_].UD[0] = (s32)(cpuRegs.GPR.r[_Rt_].UL[0] >> - (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); - cpuRegs.GPR.r[_Rd_].UD[1] = (s32)(cpuRegs.GPR.r[_Rt_].UL[2] >> - (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[0] = (s64)(s32)(cpuRegs.GPR.r[_Rt_].UL[0] >> + (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[1] = (s64)(s32)(cpuRegs.GPR.r[_Rt_].UL[2] >> + (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); } __forceinline void _PMSUBW(int dd, int ss) @@ -1430,10 +1430,10 @@ void PMADDUW() { void PSRAVW() { if (!_Rd_) return; - cpuRegs.GPR.r[_Rd_].UD[0] = (cpuRegs.GPR.r[_Rt_].SL[0] >> - (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); - cpuRegs.GPR.r[_Rd_].UD[1] = (cpuRegs.GPR.r[_Rt_].SL[2] >> - (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[0] = (s64)(cpuRegs.GPR.r[_Rt_].SL[0] >> + (cpuRegs.GPR.r[_Rs_].UL[0] & 0x1F)); + cpuRegs.GPR.r[_Rd_].SD[1] = (s64)(cpuRegs.GPR.r[_Rt_].SL[2] >> + (cpuRegs.GPR.r[_Rs_].UL[2] & 0x1F)); } void PMTHI() { diff --git a/pcsx2/VifDma.cpp b/pcsx2/VifDma.cpp index afa55b1cca..ce6a523715 100644 --- a/pcsx2/VifDma.cpp +++ b/pcsx2/VifDma.cpp @@ -1783,7 +1783,7 @@ int VIF1transfer(u32 *data, int size, int istag) { continue; } - if(vif1.tag.size != 0) SysPrintf("no vif1 cmd but tag size is left last cmd read %x\n", vif1Regs->code); + if(vif1.tag.size != 0) DevCon::Error("no vif1 cmd but tag size is left last cmd read %x\n", params vif1Regs->code); if(vif1.irq) break; diff --git a/pcsx2/x86/iMMI.cpp b/pcsx2/x86/iMMI.cpp index 596ee0d767..927275c303 100644 --- a/pcsx2/x86/iMMI.cpp +++ b/pcsx2/x86/iMMI.cpp @@ -3401,7 +3401,6 @@ CPU_SSE2_XMMCACHE_START((((_Rs_)&&(_Rt_))?XMMINFO_READS:0)|(((_Rs_)&&(_Rt_))?XMM SSEX_MOVDQA_XMM_to_XMM(EEREC_D, EEREC_S); SSE2_PMULUDQ_XMM_to_XMM(EEREC_D, EEREC_T); } - SSEX_MOVDQA_XMM_to_XMM(EEREC_HI, EEREC_D); } else { if( !_Rs_ || !_Rt_ ) SSE2_PXOR_XMM_to_XMM(EEREC_HI, EEREC_HI); @@ -3412,7 +3411,10 @@ CPU_SSE2_XMMCACHE_START((((_Rs_)&&(_Rt_))?XMMINFO_READS:0)|(((_Rs_)&&(_Rt_))?XMM } // add from LO/HI - if ( _Rd_ ) SSE2_PADDQ_XMM_to_XMM(EEREC_D, EEREC_LO); + if ( _Rd_ ) { + SSE2_PADDQ_XMM_to_XMM(EEREC_D, EEREC_LO); + SSEX_MOVDQA_XMM_to_XMM(EEREC_HI, EEREC_D); + } else SSE2_PADDQ_XMM_to_XMM(EEREC_HI, EEREC_LO); // interleave & sign extend