mirror of https://github.com/PCSX2/pcsx2.git
parent
d7e09167fa
commit
b54521de51
|
@ -54,17 +54,17 @@ REC_FUNC_DEL(MADDU1, _Rd_);
|
||||||
// if upper is 1, write in upper 64 bits of LO/HI
|
// if upper is 1, write in upper 64 bits of LO/HI
|
||||||
void recWritebackHILO(int info, int writed, int upper)
|
void recWritebackHILO(int info, int writed, int upper)
|
||||||
{
|
{
|
||||||
int regd, reglo = -1, reghi, savedlo = 0;
|
int savedlo = 0;
|
||||||
uptr loaddr = (uptr)&cpuRegs.LO.UL[upper ? 2 : 0];
|
uptr loaddr = (uptr)&cpuRegs.LO.UL[upper ? 2 : 0];
|
||||||
uptr hiaddr = (uptr)&cpuRegs.HI.UL[upper ? 2 : 0];
|
const uptr hiaddr = (uptr)&cpuRegs.HI.UL[upper ? 2 : 0];
|
||||||
u8 testlive = upper ? EEINST_LIVE2 : EEINST_LIVE0;
|
const u8 testlive = upper ? EEINST_LIVE2 : EEINST_LIVE0;
|
||||||
|
|
||||||
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
||||||
xMOVSX(rcx, edx);
|
xMOVSX(rcx, edx);
|
||||||
|
|
||||||
if (g_pCurInstInfo->regs[XMMGPR_LO] & testlive)
|
if (g_pCurInstInfo->regs[XMMGPR_LO] & testlive)
|
||||||
{
|
{
|
||||||
|
int reglo = 0;
|
||||||
if ((reglo = _checkXMMreg(XMMTYPE_GPRREG, XMMGPR_LO, MODE_READ)) >= 0)
|
if ((reglo = _checkXMMreg(XMMTYPE_GPRREG, XMMGPR_LO, MODE_READ)) >= 0)
|
||||||
{
|
{
|
||||||
if (xmmregs[reglo].mode & MODE_WRITE)
|
if (xmmregs[reglo].mode & MODE_WRITE)
|
||||||
|
@ -87,7 +87,7 @@ void recWritebackHILO(int info, int writed, int upper)
|
||||||
{
|
{
|
||||||
_eeOnWriteReg(_Rd_, 1);
|
_eeOnWriteReg(_Rd_, 1);
|
||||||
|
|
||||||
regd = -1;
|
int regd = -1;
|
||||||
if (g_pCurInstInfo->regs[_Rd_] & EEINST_XMM)
|
if (g_pCurInstInfo->regs[_Rd_] & EEINST_XMM)
|
||||||
{
|
{
|
||||||
if (savedlo)
|
if (savedlo)
|
||||||
|
@ -112,6 +112,7 @@ void recWritebackHILO(int info, int writed, int upper)
|
||||||
|
|
||||||
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
||||||
{
|
{
|
||||||
|
int reghi = 0;
|
||||||
if ((reghi = _checkXMMreg(XMMTYPE_GPRREG, XMMGPR_HI, MODE_READ)) >= 0)
|
if ((reghi = _checkXMMreg(XMMTYPE_GPRREG, XMMGPR_HI, MODE_READ)) >= 0)
|
||||||
{
|
{
|
||||||
if (xmmregs[reghi].mode & MODE_WRITE)
|
if (xmmregs[reghi].mode & MODE_WRITE)
|
||||||
|
@ -132,14 +133,13 @@ void recWritebackHILO(int info, int writed, int upper)
|
||||||
|
|
||||||
void recWritebackConstHILO(u64 res, int writed, int upper)
|
void recWritebackConstHILO(u64 res, int writed, int upper)
|
||||||
{
|
{
|
||||||
int reglo, reghi;
|
|
||||||
uptr loaddr = (uptr)&cpuRegs.LO.UL[upper ? 2 : 0];
|
uptr loaddr = (uptr)&cpuRegs.LO.UL[upper ? 2 : 0];
|
||||||
uptr hiaddr = (uptr)&cpuRegs.HI.UL[upper ? 2 : 0];
|
uptr hiaddr = (uptr)&cpuRegs.HI.UL[upper ? 2 : 0];
|
||||||
u8 testlive = upper ? EEINST_LIVE2 : EEINST_LIVE0;
|
u8 testlive = upper ? EEINST_LIVE2 : EEINST_LIVE0;
|
||||||
|
|
||||||
if (g_pCurInstInfo->regs[XMMGPR_LO] & testlive)
|
if (g_pCurInstInfo->regs[XMMGPR_LO] & testlive)
|
||||||
{
|
{
|
||||||
reglo = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_LO, MODE_WRITE | MODE_READ);
|
int reglo = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_LO, MODE_WRITE | MODE_READ);
|
||||||
|
|
||||||
if (reglo >= 0)
|
if (reglo >= 0)
|
||||||
{
|
{
|
||||||
|
@ -158,7 +158,7 @@ void recWritebackConstHILO(u64 res, int writed, int upper)
|
||||||
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
if (g_pCurInstInfo->regs[XMMGPR_HI] & testlive)
|
||||||
{
|
{
|
||||||
|
|
||||||
reghi = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_HI, MODE_WRITE | MODE_READ);
|
int reghi = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_HI, MODE_WRITE | MODE_READ);
|
||||||
|
|
||||||
if (reghi >= 0)
|
if (reghi >= 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -294,7 +294,6 @@ void eeRecompileCode0(R5900FNPTR constcode, R5900FNPTR_INFO constscode, R5900FNP
|
||||||
// rt = rs op imm16
|
// rt = rs op imm16
|
||||||
void eeRecompileCode1(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
void eeRecompileCode1(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
{
|
{
|
||||||
int mmreg1, mmreg2;
|
|
||||||
if (!_Rt_)
|
if (!_Rt_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -312,7 +311,7 @@ void eeRecompileCode1(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
pxAssert(0);
|
pxAssert(0);
|
||||||
|
|
||||||
// no const regs
|
// no const regs
|
||||||
mmreg1 = _allocCheckGPRtoXMM(g_pCurInstInfo, _Rs_, MODE_READ);
|
const int mmreg1 = _allocCheckGPRtoXMM(g_pCurInstInfo, _Rs_, MODE_READ);
|
||||||
|
|
||||||
if (mmreg1 >= 0)
|
if (mmreg1 >= 0)
|
||||||
{
|
{
|
||||||
|
@ -320,7 +319,7 @@ void eeRecompileCode1(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
|
|
||||||
// check for last used, if so don't alloc a new XMM reg
|
// check for last used, if so don't alloc a new XMM reg
|
||||||
_addNeededGPRtoXMMreg(_Rt_);
|
_addNeededGPRtoXMMreg(_Rt_);
|
||||||
mmreg2 = _checkXMMreg(XMMTYPE_GPRREG, _Rt_, MODE_WRITE);
|
int mmreg2 = _checkXMMreg(XMMTYPE_GPRREG, _Rt_, MODE_WRITE);
|
||||||
|
|
||||||
if (mmreg2 < 0)
|
if (mmreg2 < 0)
|
||||||
{
|
{
|
||||||
|
@ -357,7 +356,6 @@ void eeRecompileCode1(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
// rd = rt op sa
|
// rd = rt op sa
|
||||||
void eeRecompileCode2(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
void eeRecompileCode2(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
{
|
{
|
||||||
int mmreg1, mmreg2;
|
|
||||||
if (!_Rd_)
|
if (!_Rd_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -375,7 +373,7 @@ void eeRecompileCode2(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
pxAssert(0);
|
pxAssert(0);
|
||||||
|
|
||||||
// no const regs
|
// no const regs
|
||||||
mmreg1 = _allocCheckGPRtoXMM(g_pCurInstInfo, _Rt_, MODE_READ);
|
const int mmreg1 = _allocCheckGPRtoXMM(g_pCurInstInfo, _Rt_, MODE_READ);
|
||||||
|
|
||||||
if (mmreg1 >= 0)
|
if (mmreg1 >= 0)
|
||||||
{
|
{
|
||||||
|
@ -383,7 +381,7 @@ void eeRecompileCode2(R5900FNPTR constcode, R5900FNPTR_INFO noconstcode)
|
||||||
|
|
||||||
// check for last used, if so don't alloc a new XMM reg
|
// check for last used, if so don't alloc a new XMM reg
|
||||||
_addNeededGPRtoXMMreg(_Rd_);
|
_addNeededGPRtoXMMreg(_Rd_);
|
||||||
mmreg2 = _checkXMMreg(XMMTYPE_GPRREG, _Rd_, MODE_WRITE);
|
int mmreg2 = _checkXMMreg(XMMTYPE_GPRREG, _Rd_, MODE_WRITE);
|
||||||
|
|
||||||
if (mmreg2 < 0)
|
if (mmreg2 < 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue