Fixed problems with OptPrecalc. It removed insns because it results were known

- but the insns generate a carry which may be needed later.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4115 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2009-09-04 15:44:48 +00:00
parent 67d64e67d5
commit f6c589bf8e

View file

@ -1059,7 +1059,7 @@ unsigned OptDupLoads (CodeSeg* S)
In->RegX == In->RegA &&
E->AM != AM65_ABSY &&
E->AM != AM65_ZPY) {
/* Use the A register instead */
/* Use the A register instead */
CE_ReplaceOPC (E, OP65_STA);
}
break;
@ -1112,7 +1112,7 @@ unsigned OptDupLoads (CodeSeg* S)
!CE_UseLoadFlags (N)) {
/* Value is identical and not followed by a branch */
Delete = 1;
}
}
break;
case OP65_TAY:
@ -1880,9 +1880,7 @@ unsigned OptPrecalc (CodeSeg* S)
}
break;
case OP65_ASL:
case OP65_EOR:
case OP65_LSR:
if (RegValIsKnown (Out->RegA)) {
/* Accu op zp with known contents */
Arg = MakeHexArg (Out->RegA);
@ -1901,9 +1899,6 @@ unsigned OptPrecalc (CodeSeg* S)
/* 0-0 or 0+0 -> remove */
CS_DelEntry (S, I);
++Changes;
} else if (RegValIsKnown (Out->RegA)) {
/* Accu op zp with known contents */
Arg = MakeHexArg (Out->RegA);
}
break;