From 30d942478f4022c906e0849e5acc2f37fdd4fc8e Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Wed, 13 Mar 2024 22:14:29 +0100 Subject: [PATCH] Fix infinite loop in move condition out of loop --- oscar64/InterCode.cpp | 4 ++-- oscar64/NativeCodeGenerator.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index fb18378..96a7ade 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -5584,7 +5584,7 @@ void InterCodeBasicBlock::GenerateTraces(bool expand, bool compact) { int sz = mInstructions.Size(); - if (mFalseJump && sz > 0 && mInstructions[sz - 1]->mCode == IC_BRANCH && mInstructions[sz - 1]->mSrc[0].mType == IT_BOOL && mInstructions[sz - 1]->mSrc[0].mTemp < 0) + if (mFalseJump && sz > 0 && mInstructions[sz - 1]->mCode == IC_BRANCH && (mInstructions[sz - 1]->mSrc[0].mType == IT_BOOL || IsIntegerType(mInstructions[sz - 1]->mSrc[0].mType)) && mInstructions[sz - 1]->mSrc[0].mTemp < 0) { mInstructions[sz - 1]->mCode = IC_JUMP; mInstructions[sz - 1]->mNumOperands = 0; @@ -20285,7 +20285,7 @@ void InterCodeProcedure::Close(void) { GrowingTypeArray tstack(IT_NONE); - CheckFunc = !strcmp(mIdent->mString, "interpret_statement"); + CheckFunc = !strcmp(mIdent->mString, "palette_draw"); CheckCase = false; mEntryBlock = mBlocks[0]; diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index a38fa3e..40d7fc4 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -30258,6 +30258,7 @@ bool NativeCodeBasicBlock::MoveStoreYUp(int at) if (ins.RequiresXReg()) mIns[at].mLive |= LIVE_CPU_REG_X; if (ins.RequiresAccu()) mIns[at].mLive |= LIVE_CPU_REG_A; + if (ins.RequiresCarry()) mIns[at].mLive |= LIVE_CPU_REG_C; mIns[at - 1] = mIns[at]; mIns[at] = ins;