mirror of
https://github.com/cc65/cc65.git
synced 2025-02-09 02:30:42 +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:
parent
4cbf8b352d
commit
9a2b4dc849
@ -6,9 +6,9 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 2001-2002 Ullrich von Bassewitz */
|
||||
/* Wacholderweg 14 */
|
||||
/* D-70597 Stuttgart */
|
||||
/* (C) 2001-2003 Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
/* */
|
||||
@ -236,7 +236,7 @@ unsigned OptBoolTrans (CodeSeg* S)
|
||||
/* Check for a boolean transformer */
|
||||
if (E->OPC == OP65_JSR &&
|
||||
(Cond = FindBoolCmpCond (E->Arg)) != CMP_INV &&
|
||||
(N = CS_GetNextEntry (S, I)) != 0 &&
|
||||
(N = CS_GetNextEntry (S, I)) != 0 &&
|
||||
(N->Info & OF_ZBRA) != 0) {
|
||||
|
||||
/* Make the boolean transformer unnecessary by changing the
|
||||
@ -306,7 +306,7 @@ unsigned OptCmp1 (CodeSeg* S)
|
||||
if (E->OPC == OP65_STX &&
|
||||
!CS_RangeHasLabel (S, 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 &&
|
||||
L[1]->OPC == OP65_ORA &&
|
||||
strcmp (L[1]->Arg, "tmp1") == 0) {
|
||||
@ -361,22 +361,24 @@ unsigned OptCmp2 (CodeSeg* S)
|
||||
/* Check for the sequence */
|
||||
if ((L[0]->OPC == OP65_ADC ||
|
||||
L[0]->OPC == OP65_AND ||
|
||||
L[0]->OPC == OP65_ASL ||
|
||||
L[0]->OPC == OP65_DEA ||
|
||||
L[0]->OPC == OP65_EOR ||
|
||||
L[0]->OPC == OP65_INA ||
|
||||
L[0]->OPC == OP65_LDA ||
|
||||
L[0]->OPC == OP65_LSR ||
|
||||
L[0]->OPC == OP65_ORA ||
|
||||
L[0]->OPC == OP65_PLA ||
|
||||
L[0]->OPC == OP65_SBC ||
|
||||
L[0]->OPC == OP65_TXA ||
|
||||
L[0]->OPC == OP65_TYA) &&
|
||||
!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 &&
|
||||
CE_KnownImm (L[1]) &&
|
||||
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
|
||||
* set the carry flag.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user