From cf9f19c93d3e5308910521aef3a53fba8a8ce5f1 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Tue, 20 Dec 2022 20:21:25 -0600 Subject: [PATCH] Optimize LDA+TAY to LDY (when A is unused after). This pattern comes up in the new return code when returning a local variable. --- Native.pas | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Native.pas b/Native.pas index f8d775d..4fada0d 100644 --- a/Native.pas +++ b/Native.pas @@ -1773,11 +1773,22 @@ var npeep[ns+2] := npeep[ns]; Remove(ns); end {else if} - else if npeep[ns+1].opcode = m_xba then + else if npeep[ns+1].opcode = m_xba then begin if npeep[ns+2].opcode = m_and_imm then if npeep[ns+2].operand = $00FF then begin operand := operand+1; Remove(ns+1); + end {if} + end {else if} + else if npeep[ns+1].opcode = m_tay then + if npeep[ns+2].opcode = m_lda_dir then begin + opcode := m_ldy_dir; + Remove(ns+1); + end {if} + else if npeep[ns+2].opcode = m_pld then + if npeep[ns+3].opcode = m_tsc then begin + opcode := m_ldy_dir; + Remove(ns+1); end; {if} m_ldx_dir: