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