From 7c8ec41148e23eb3d1573f04c7d4d5547b46c728 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Thu, 9 Mar 2023 17:53:45 -0600 Subject: [PATCH] Optimize some assembly code sequences that can occur for array access. Here is an example that benefits from the new optimizations: #pragma optimize 7 void f(char *a, unsigned i, unsigned n) { a[i] = (a[i] & 0xF0) | n; } --- Native.pas | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Native.pas b/Native.pas index a89083c..f919fa7 100644 --- a/Native.pas +++ b/Native.pas @@ -1781,7 +1781,7 @@ var end {if} end {else if} else if npeep[ns+1].opcode = m_tay then - if npeep[ns+2].opcode = m_lda_dir then begin + if npeep[ns+2].opcode in [m_lda_dir,m_lda_indly,m_pla] then begin opcode := m_ldy_dir; Remove(ns+1); end {if} @@ -1952,7 +1952,8 @@ var Remove(ns); Remove(ns); end {if} - else if npeep[ns+1].opcode in [m_ldx_abs,m_ldx_dir] then + else if npeep[ns+1].opcode in + [m_ldx_abs,m_ldx_dir,m_ldy_imm,m_ldy_dir] then if npeep[ns+2].opcode = m_pla then begin Remove(ns+2); Remove(ns);