mirror of
https://github.com/cc65/cc65.git
synced 2025-01-26 17:36:57 +00:00
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
This commit is contained in:
parent
f6c589bf8e
commit
18d865e609
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user