Fix global register forward mixing up x and y in one case
This commit is contained in:
parent
6076808f5e
commit
f720feebbf
|
@ -17465,7 +17465,7 @@ bool NativeCodeBasicBlock::GlobalLoadStoreForwarding(bool zpage, const NativeCod
|
||||||
mYLSIns.mType = ASMIT_INV;
|
mYLSIns.mType = ASMIT_INV;
|
||||||
if (mALSIns.mType != ASMIT_INV && mALSIns.mMode == ASMIM_ABSOLUTE_Y)
|
if (mALSIns.mType != ASMIT_INV && mALSIns.mMode == ASMIM_ABSOLUTE_Y)
|
||||||
mALSIns.mType = ASMIT_INV;
|
mALSIns.mType = ASMIT_INV;
|
||||||
if (mXLSIns.mType != ASMIT_INV && mYLSIns.mMode == ASMIM_ABSOLUTE_Y)
|
if (mXLSIns.mType != ASMIT_INV && mXLSIns.mMode == ASMIM_ABSOLUTE_Y)
|
||||||
mXLSIns.mType = ASMIT_INV;
|
mXLSIns.mType = ASMIT_INV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45599,6 +45599,8 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerShuffle(int pass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckLive();
|
||||||
|
|
||||||
int shifti = -1, shiftr = -1;
|
int shifti = -1, shiftr = -1;
|
||||||
for (int i = 0; i + 2 < mIns.Size(); i++)
|
for (int i = 0; i + 2 < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -45620,8 +45622,8 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerShuffle(int pass)
|
||||||
!(mIns[i + 1].mLive & (LIVE_MEM | LIVE_CPU_REG_C)))
|
!(mIns[i + 1].mLive & (LIVE_MEM | LIVE_CPU_REG_C)))
|
||||||
{
|
{
|
||||||
mIns[shifti].mType = ASMIT_NOP; mIns[shifti].mMode = ASMIM_IMPLIED;
|
mIns[shifti].mType = ASMIT_NOP; mIns[shifti].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 0].mType = ASMIT_LSR; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
mIns[i + 0].mType = ASMIT_LSR; mIns[i + 0].mMode = ASMIM_IMPLIED; mIns[i + 0].mLive |= LIVE_CPU_REG_C;
|
||||||
mIns[i + 1].mType = ASMIT_LDA;
|
mIns[i + 1].mType = ASMIT_LDA; mIns[i + 1].mLive |= LIVE_CPU_REG_C;
|
||||||
mIns.Insert(i + 2, NativeCodeInstruction(mIns[i + 0].mIns, ASMIT_ROL));
|
mIns.Insert(i + 2, NativeCodeInstruction(mIns[i + 0].mIns, ASMIT_ROL));
|
||||||
shiftr = -1;
|
shiftr = -1;
|
||||||
changed = true;
|
changed = true;
|
||||||
|
@ -45629,6 +45631,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerShuffle(int pass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckLive();
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
for (int i = 0; i < mIns.Size(); i++)
|
for (int i = 0; i < mIns.Size(); i++)
|
||||||
|
@ -45645,6 +45648,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerShuffle(int pass)
|
||||||
//
|
//
|
||||||
// shorten x/y register lifetime
|
// shorten x/y register lifetime
|
||||||
|
|
||||||
|
CheckLive();
|
||||||
#if 1
|
#if 1
|
||||||
//
|
//
|
||||||
// move ldx/y down
|
// move ldx/y down
|
||||||
|
@ -55272,7 +55276,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
|
||||||
|
|
||||||
mInterProc->mLinkerObject->mNativeProc = this;
|
mInterProc->mLinkerObject->mNativeProc = this;
|
||||||
|
|
||||||
CheckFunc = !strcmp(mIdent->mString, "carvedoors");
|
CheckFunc = !strcmp(mIdent->mString, "floaters_update");
|
||||||
|
|
||||||
int nblocks = proc->mBlocks.Size();
|
int nblocks = proc->mBlocks.Size();
|
||||||
tblocks = new NativeCodeBasicBlock * [nblocks];
|
tblocks = new NativeCodeBasicBlock * [nblocks];
|
||||||
|
|
Loading…
Reference in New Issue