Forward binary op in txax

This commit is contained in:
drmortalwombat 2024-11-17 21:54:55 +01:00
parent b6341e402d
commit df18dc273e
2 changed files with 44 additions and 0 deletions

View File

@ -33827,6 +33827,33 @@ bool NativeCodeBasicBlock::CombineImmediateADCUp(int at)
return false;
}
bool NativeCodeBasicBlock::MoveTXALogicTAXDown(int at)
{
int i = at + 3;
while (i < mIns.Size())
{
if (mIns[i].ChangesXReg())
return false;
if (mIns[i].mType == ASMIT_TXA)
{
if (mIns[i].mLive & LIVE_CPU_REG_X)
return false;
mIns[at + 1].mLive |= mIns[i].mLive;
mIns.Insert(i + 1, mIns[at + 1]);
mIns.Remove(at, 3);
return true;
}
if (mIns[i].RequiresXReg())
return false;
i++;
}
return false;
}
bool NativeCodeBasicBlock::MoveTXADCDown(int at)
{
int i = at + 4;
@ -43827,6 +43854,22 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerShuffle(int pass)
#endif
#if 1
for (int i = 0; i + 3 < mIns.Size(); i++)
{
if (mIns[i + 0].mType == ASMIT_TXA &&
mIns[i + 1].IsLogic() && mIns[i + 1].mMode == ASMIM_IMMEDIATE &&
mIns[i + 2].mType == ASMIT_TAX && !(mIns[i + 2].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
{
if (MoveTXALogicTAXDown(i))
changed = true;
}
}
CheckLive();
#endif
#if 1
for (int i = 0; i + 1 < mIns.Size(); i++)
{

View File

@ -505,6 +505,7 @@ public:
bool CombineImmediateADCUp(int at);
bool CombineImmediateADCUpX(int at);
bool MoveTXADCDown(int at);
bool MoveTXALogicTAXDown(int at);
bool FoldShiftORAIntoLoadImmUp(int at);
bool FindAccuExitValue(int& at);