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:
@@ -1779,6 +1779,12 @@ unsigned OptStackOps (CodeSeg* S)
|
|||||||
/* While searching, track register load insns, so we can tell
|
/* While searching, track register load insns, so we can tell
|
||||||
* what is in a register once pushax is encountered.
|
* 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")) {
|
if (CE_IsCallTo (E, "pushax")) {
|
||||||
Data.PushIndex = I;
|
Data.PushIndex = I;
|
||||||
State = FoundPush;
|
State = FoundPush;
|
||||||
@@ -1793,6 +1799,12 @@ unsigned OptStackOps (CodeSeg* S)
|
|||||||
* follow and in the meantime, track zeropage usage and check
|
* follow and in the meantime, track zeropage usage and check
|
||||||
* for code that will disable us from translating the sequence.
|
* 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) {
|
if (E->OPC == OP65_JSR) {
|
||||||
|
|
||||||
/* Subroutine call: Check if this is one of the functions,
|
/* Subroutine call: Check if this is one of the functions,
|
||||||
|
|||||||
Reference in New Issue
Block a user