mirror of
https://github.com/cc65/cc65.git
synced 2025-08-08 06:25:17 +00:00
Handle more opcodes in OptCmp2
git-svn-id: svn://svn.cc65.org/cc65/trunk@2482 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -6,9 +6,9 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2001-2002 Ullrich von Bassewitz */
|
/* (C) 2001-2003 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* R<EFBFBD>merstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
@@ -236,7 +236,7 @@ unsigned OptBoolTrans (CodeSeg* S)
|
|||||||
/* Check for a boolean transformer */
|
/* Check for a boolean transformer */
|
||||||
if (E->OPC == OP65_JSR &&
|
if (E->OPC == OP65_JSR &&
|
||||||
(Cond = FindBoolCmpCond (E->Arg)) != CMP_INV &&
|
(Cond = FindBoolCmpCond (E->Arg)) != CMP_INV &&
|
||||||
(N = CS_GetNextEntry (S, I)) != 0 &&
|
(N = CS_GetNextEntry (S, I)) != 0 &&
|
||||||
(N->Info & OF_ZBRA) != 0) {
|
(N->Info & OF_ZBRA) != 0) {
|
||||||
|
|
||||||
/* Make the boolean transformer unnecessary by changing the
|
/* Make the boolean transformer unnecessary by changing the
|
||||||
@@ -306,7 +306,7 @@ unsigned OptCmp1 (CodeSeg* S)
|
|||||||
if (E->OPC == OP65_STX &&
|
if (E->OPC == OP65_STX &&
|
||||||
!CS_RangeHasLabel (S, I+1, 2) &&
|
!CS_RangeHasLabel (S, I+1, 2) &&
|
||||||
CS_GetEntries (S, L, I+1, 2) &&
|
CS_GetEntries (S, L, I+1, 2) &&
|
||||||
L[0]->OPC == OP65_STX &&
|
L[0]->OPC == OP65_STX &&
|
||||||
strcmp (L[0]->Arg, "tmp1") == 0 &&
|
strcmp (L[0]->Arg, "tmp1") == 0 &&
|
||||||
L[1]->OPC == OP65_ORA &&
|
L[1]->OPC == OP65_ORA &&
|
||||||
strcmp (L[1]->Arg, "tmp1") == 0) {
|
strcmp (L[1]->Arg, "tmp1") == 0) {
|
||||||
@@ -361,22 +361,24 @@ unsigned OptCmp2 (CodeSeg* S)
|
|||||||
/* Check for the sequence */
|
/* Check for the sequence */
|
||||||
if ((L[0]->OPC == OP65_ADC ||
|
if ((L[0]->OPC == OP65_ADC ||
|
||||||
L[0]->OPC == OP65_AND ||
|
L[0]->OPC == OP65_AND ||
|
||||||
|
L[0]->OPC == OP65_ASL ||
|
||||||
L[0]->OPC == OP65_DEA ||
|
L[0]->OPC == OP65_DEA ||
|
||||||
L[0]->OPC == OP65_EOR ||
|
L[0]->OPC == OP65_EOR ||
|
||||||
L[0]->OPC == OP65_INA ||
|
L[0]->OPC == OP65_INA ||
|
||||||
L[0]->OPC == OP65_LDA ||
|
L[0]->OPC == OP65_LDA ||
|
||||||
|
L[0]->OPC == OP65_LSR ||
|
||||||
L[0]->OPC == OP65_ORA ||
|
L[0]->OPC == OP65_ORA ||
|
||||||
L[0]->OPC == OP65_PLA ||
|
L[0]->OPC == OP65_PLA ||
|
||||||
L[0]->OPC == OP65_SBC ||
|
L[0]->OPC == OP65_SBC ||
|
||||||
L[0]->OPC == OP65_TXA ||
|
L[0]->OPC == OP65_TXA ||
|
||||||
L[0]->OPC == OP65_TYA) &&
|
L[0]->OPC == OP65_TYA) &&
|
||||||
!CS_RangeHasLabel (S, I+1, 2) &&
|
!CS_RangeHasLabel (S, I+1, 2) &&
|
||||||
CS_GetEntries (S, L+1, I+1, 2) &&
|
CS_GetEntries (S, L+1, I+1, 2) &&
|
||||||
L[1]->OPC == OP65_CMP &&
|
L[1]->OPC == OP65_CMP &&
|
||||||
CE_KnownImm (L[1]) &&
|
CE_KnownImm (L[1]) &&
|
||||||
L[1]->Num == 0) {
|
L[1]->Num == 0) {
|
||||||
|
|
||||||
/* Check for the call to boolxx. We cannot remove the compare if
|
/* Check for the call to boolxx. We only remove the compare if
|
||||||
* the carry flag is evaluated later, because the load will not
|
* the carry flag is evaluated later, because the load will not
|
||||||
* set the carry flag.
|
* set the carry flag.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user