From 18d865e609512925d113a92042545d507e77f77d Mon Sep 17 00:00:00 2001 From: uz Date: Fri, 4 Sep 2009 19:54:29 +0000 Subject: [PATCH] Fixed another problem with OptStackOps: Load tracking will not work across branches - if we find a label, just forget all information we had before. git-svn-id: svn://svn.cc65.org/cc65/trunk@4116 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/cc65/coptstop.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index a7f6e80eb..2f1bf5e67 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -312,7 +312,7 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) /*****************************************************************************/ -/* Helpers */ +/* Helpers */ /*****************************************************************************/ @@ -1779,6 +1779,12 @@ unsigned OptStackOps (CodeSeg* S) /* While searching, track register load insns, so we can tell * what is in a register once pushax is encountered. */ + if (CE_HasLabel (E)) { + /* Currently we don't track across branches */ + InvalidateLoadRegInfo (&Data.Lhs.A); + InvalidateLoadRegInfo (&Data.Lhs.X); + InvalidateLoadRegInfo (&Data.Lhs.Y); + } if (CE_IsCallTo (E, "pushax")) { Data.PushIndex = I; State = FoundPush; @@ -1793,6 +1799,12 @@ unsigned OptStackOps (CodeSeg* S) * follow and in the meantime, track zeropage usage and check * for code that will disable us from translating the sequence. */ + if (CE_HasLabel (E)) { + /* Currently we don't track across branches */ + InvalidateLoadRegInfo (&Data.Rhs.A); + InvalidateLoadRegInfo (&Data.Rhs.X); + InvalidateLoadRegInfo (&Data.Rhs.Y); + } if (E->OPC == OP65_JSR) { /* Subroutine call: Check if this is one of the functions, -- 2.39.5