From 50d3c843b4c3395e0a0df63bd54d749e7d8b3804 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 8 Jan 2023 10:56:14 +0100 Subject: [PATCH] Use X instead of A when lda/sta sequence inside TAXA range --- oscar64/NativeCodeGenerator.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 2eeb82c..9cc5d57 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -18048,6 +18048,28 @@ bool NativeCodeBasicBlock::JoinTAXARange(int from, int to) } } + + int i = from + 1; + while (i < to && (mIns[i].mType == ASMIT_LDA || mIns[i].mType == ASMIT_STA) && (mIns[i].mMode == ASMIM_IMMEDIATE || mIns[i].mMode == ASMIM_ABSOLUTE || mIns[i].mMode == ASMIM_ZERO_PAGE)) + i++; + if (i == to) + { + for (int i = from + 1; i < to; i++) + { + if (mIns[i].mType == ASMIT_LDA) + mIns[i].mType = ASMIT_LDX; + else if (mIns[i].mType == ASMIT_STA) + mIns[i].mType = ASMIT_STX; + mIns[i].mLive |= LIVE_CPU_REG_X; + } + mIns[from].mType = ASMIT_NOP; mIns[from].mMode = ASMIM_IMPLIED; + mIns[to].mType = ASMIT_NOP; mIns[to].mMode = ASMIM_IMPLIED; + + CheckLive(); + + return true; + } + if (to + 1 < mIns.Size() && mIns[to + 1].mType == ASMIT_STA && !(mIns[to + 1].mLive & LIVE_CPU_REG_A)) { NativeCodeInstruction ins(mIns[to + 1]);