From fafbbe82d13262cb05349ddd5b5c9c005baac2d0 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:50:34 +0100 Subject: [PATCH] Fix prevent swap of X and Y when used in JSR --- oscar64/Compiler.cpp | 2 +- oscar64/NativeCodeGenerator.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/oscar64/Compiler.cpp b/oscar64/Compiler.cpp index 3607c12..d41c88a 100644 --- a/oscar64/Compiler.cpp +++ b/oscar64/Compiler.cpp @@ -1097,7 +1097,7 @@ bool Compiler::GenerateCode(void) if (mCompilerOptions & COPT_OPTIMIZE_BASIC) { mLinker->CombineSameConst(); -// mLinker->InlineSimpleJumps(); + mLinker->InlineSimpleJumps(); mLinker->CheckDirectJumps(); } diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 4f0473a..54b0e2f 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -997,6 +997,8 @@ bool NativeCodeInstruction::CanSwapXYReg(void) return HasAsmInstructionMode(mType, ASMIM_ABSOLUTE_Y); else if (mMode == ASMIM_ABSOLUTE_Y) return HasAsmInstructionMode(mType, ASMIM_ABSOLUTE_X); + else if (mType == ASMIT_JSR && (mFlags & (NCIF_USE_CPU_REG_X | NCIF_USE_CPU_REG_Y))) + return false; else return true; } @@ -45477,7 +45479,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) { mInterProc = proc; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "main"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "krnio_setbnk"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks];