From 901395243178a0b4c05ca8f2577fe4444a0889f8 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Wed, 31 Jul 2024 17:59:20 +0200 Subject: [PATCH] Fix missing int range adaption on complex address optimization --- oscar64/InterCode.cpp | 6 +++++- oscar64/NativeCodeGenerator.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 1fac959..eb5880b 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -18964,6 +18964,7 @@ bool InterCodeBasicBlock::PeepholeReplaceOptimization(const GrowingVariableArray { mInstructions[i + 2]->mSrc[1].mIntConst += mInstructions[i + 0]->mSrc[0].mIntConst; mInstructions[i + 1]->mSrc[1] = mInstructions[i + 0]->mSrc[1]; + mInstructions[i + 1]->mDst.mRange.Reset(); mInstructions[i + 0]->mSrc[1].mFinal = false; mInstructions[i + 1]->mSrc[0].mFinal = false; changed = true; @@ -18987,11 +18988,14 @@ bool InterCodeBasicBlock::PeepholeReplaceOptimization(const GrowingVariableArray mInstructions[i + 0]->mSrc[0].mIntConst += mInstructions[i + 1]->mSrc[0].mIntConst; mInstructions[i + 1]->mSrc[1].mFinal = false; mInstructions[i + 2]->mSrc[1] = mInstructions[i + 1]->mSrc[1]; + mInstructions[i + 0]->mDst.mRange.Reset(); + mInstructions[i + 1]->mDst.mRange.Reset(); } else { mInstructions[i + 1]->mSrc[0].mIntConst += mInstructions[i + 0]->mSrc[0].mIntConst; mInstructions[i + 0]->mSrc[1].mFinal = false; + mInstructions[i + 1]->mDst.mRange.Reset(); mInstructions[i + 2]->mSrc[0] = mInstructions[i + 0]->mSrc[1]; } @@ -21742,7 +21746,7 @@ void InterCodeProcedure::Close(void) { GrowingTypeArray tstack(IT_NONE); - CheckFunc = !strcmp(mIdent->mString, "bmu_line"); + CheckFunc = !strcmp(mIdent->mString, "copy_left"); CheckCase = false; mEntryBlock = mBlocks[0]; diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 02f69f3..afde6e3 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -50208,7 +50208,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) mInterProc = proc; mInterProc->mLinkerObject->mNativeProc = this; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "testpow"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "copy_left"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks];