From 4068957442b6a32263da63f4f32000d7cb6df4e0 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Thu, 4 Jul 2024 10:42:22 +0200 Subject: [PATCH] Fix register dependency update in multi block loop optimization --- oscar64/NativeCodeGenerator.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 64ac5d5..af99741 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -21352,7 +21352,7 @@ bool NativeCodeBasicBlock::LoopRegisterXYMap(void) { pblock = mProc->AllocateBlock(); pblock->mEntryRequiredRegs = mEntryRequiredRegs; - pblock->mExitRequiredRegs = mExitRequiredRegs; + pblock->mExitRequiredRegs = mEntryRequiredRegs; pblock->Close(pblocks[0]->mBranchIns, this, nullptr, ASMIT_JMP); AddEntryBlock(pblock); for (int i = 0; i < pblocks.Size(); i++) @@ -34761,7 +34761,7 @@ bool NativeCodeBasicBlock::OptimizeSingleEntryLoop(NativeCodeProcedure* proc) { pblock = mProc->AllocateBlock(); pblock->mEntryRequiredRegs = mEntryRequiredRegs; - pblock->mExitRequiredRegs = mExitRequiredRegs; + pblock->mExitRequiredRegs = mEntryRequiredRegs; pblock->Close(pblocks[0]->mBranchIns, this, nullptr, ASMIT_JMP); AddEntryBlock(pblock); for (int i = 0; i < pblocks.Size(); i++) @@ -49225,7 +49225,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) mInterProc = proc; mInterProc->mLinkerObject->mNativeProc = this; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "vspr_sort"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "enemies_check"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks]; @@ -50655,6 +50655,7 @@ void NativeCodeProcedure::Optimize(void) #endif + #if _DEBUG ResetVisited(); mEntryBlock->CheckAsmCode();