From 16810b63d4bc505998dc27922796c4e7a73f5425 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 10 Dec 2023 09:48:23 +0100 Subject: [PATCH] Fix over eager lda/sta movement --- oscar64/NativeCodeGenerator.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index f91ac82..ae0b5f3 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -15835,6 +15835,8 @@ bool NativeCodeBasicBlock::MoveImmediateStoreUp(int at) return false; else if (usey && mIns[i].ChangesYReg()) return false; + else if (mIns[at + 1].mMode == ASMIM_INDIRECT_Y && (mIns[i].ChangesZeroPage(mIns[at + 1].mAddress) || mIns[i].ChangesZeroPage(mIns[at + 1].mAddress + 1))) + return false; } return false; } @@ -15897,6 +15899,8 @@ bool NativeCodeBasicBlock::MoveImmediateStoreDown(int at) return false; else if (usey && mIns[i].ChangesYReg()) return false; + else if (mIns[at + 1].mMode == ASMIM_INDIRECT_Y && (mIns[i].ChangesZeroPage(mIns[at + 1].mAddress) || mIns[i].ChangesZeroPage(mIns[at + 1].mAddress + 1))) + return false; i++; } @@ -15983,6 +15987,10 @@ bool NativeCodeBasicBlock::MoveLoadStoreDown(int at) return false; else if (usey && mIns[i].ChangesYReg()) return false; + else if (mIns[at].mMode == ASMIM_INDIRECT_Y && (mIns[i].ChangesZeroPage(mIns[at].mAddress) || mIns[i].ChangesZeroPage(mIns[at].mAddress + 1))) + return false; + else if (mIns[at + 1].mMode == ASMIM_INDIRECT_Y && (mIns[i].ChangesZeroPage(mIns[at + 1].mAddress) || mIns[i].ChangesZeroPage(mIns[at + 1].mAddress + 1))) + return false; i++; } @@ -44463,7 +44471,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) { mInterProc = proc; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "main"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "PlayingState::InitMaps"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks];