mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
Fixed several bugs
git-svn-id: svn://svn.cc65.org/cc65/trunk@832 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
d341565ddc
commit
b4010bae8b
@ -1015,11 +1015,11 @@ static unsigned OptTest1 (CodeSeg* S)
|
||||
|
||||
/* Insert the compare */
|
||||
CodeEntry* N = NewCodeEntry (OP65_CMP, AM65_IMM, "$00", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, N, I);
|
||||
CS_InsertEntry (S, N, I+2);
|
||||
|
||||
/* Remove the two other insns */
|
||||
CS_DelEntry (S, I+2);
|
||||
CS_DelEntry (S, I+1);
|
||||
CS_DelEntry (S, I);
|
||||
|
||||
/* We had changes */
|
||||
++Changes;
|
||||
@ -1078,8 +1078,10 @@ static unsigned OptNegA1 (CodeSeg* S)
|
||||
CS_GetEntries (S, L, I+1, 2) &&
|
||||
L[0]->OPC == OP65_LDA &&
|
||||
(L[0]->Use & REG_X) == 0 &&
|
||||
!CE_HasLabel (L[0]) &&
|
||||
L[1]->OPC == OP65_JSR &&
|
||||
strcmp (L[1]->Arg, "bnega") == 0) {
|
||||
strcmp (L[1]->Arg, "bnega") == 0 &&
|
||||
!CE_HasLabel (L[1])) {
|
||||
|
||||
/* Remove the ldx instruction */
|
||||
CS_DelEntry (S, I);
|
||||
@ -1137,7 +1139,8 @@ static unsigned OptNegA2 (CodeSeg* S)
|
||||
L[0]->OPC == OP65_JSR &&
|
||||
strcmp (L[0]->Arg, "bnega") == 0 &&
|
||||
!CE_HasLabel (L[0]) &&
|
||||
(L[1]->Info & OF_ZBRA) != 0) {
|
||||
(L[1]->Info & OF_ZBRA) != 0 &&
|
||||
!CE_HasLabel (L[1])) {
|
||||
|
||||
/* Invert the branch */
|
||||
CE_ReplaceOPC (L[1], GetInverseBranch (L[1]->OPC));
|
||||
@ -1255,7 +1258,8 @@ static unsigned OptNegAX2 (CodeSeg* S)
|
||||
L[3]->OPC == OP65_JSR &&
|
||||
strcmp (L[3]->Arg, "bnegax") == 0 &&
|
||||
!CE_HasLabel (L[3]) &&
|
||||
(L[4]->Info & OF_ZBRA) != 0) {
|
||||
(L[4]->Info & OF_ZBRA) != 0 &&
|
||||
!CE_HasLabel (L[4])) {
|
||||
|
||||
/* lda --> ora */
|
||||
CE_ReplaceOPC (L[2], OP65_ORA);
|
||||
@ -1319,7 +1323,8 @@ static unsigned OptNegAX3 (CodeSeg* S)
|
||||
L[1]->OPC == OP65_JSR &&
|
||||
strcmp (L[1]->Arg, "bnegax") == 0 &&
|
||||
!CE_HasLabel (L[1]) &&
|
||||
(L[2]->Info & OF_ZBRA) != 0) {
|
||||
(L[2]->Info & OF_ZBRA) != 0 &&
|
||||
!CE_HasLabel (L[2])) {
|
||||
|
||||
/* ldx --> ora */
|
||||
CE_ReplaceOPC (L[0], OP65_ORA);
|
||||
@ -1377,7 +1382,8 @@ static unsigned OptNegAX4 (CodeSeg* S)
|
||||
L[0]->OPC == OP65_JSR &&
|
||||
strncmp (L[0]->Arg,"bnega",5) == 0 &&
|
||||
!CE_HasLabel (L[0]) &&
|
||||
(L[1]->Info & OF_ZBRA) != 0) {
|
||||
(L[1]->Info & OF_ZBRA) != 0 &&
|
||||
!CE_HasLabel (L[1])) {
|
||||
|
||||
CodeEntry* X;
|
||||
|
||||
@ -1469,13 +1475,13 @@ static unsigned OptPtrStore1 (CodeSeg* S)
|
||||
|
||||
/* Create and insert the stores */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I);
|
||||
|
||||
X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+2);
|
||||
|
||||
/* Delete the call to pushax */
|
||||
CS_DelEntry (S, I+2);
|
||||
CS_DelEntry (S, I);
|
||||
|
||||
/* Insert the store through ptr1 */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "ptr1", 0, L[3]->LI);
|
||||
@ -1554,8 +1560,8 @@ static unsigned OptPtrLoad1 (CodeSeg* S)
|
||||
|
||||
/* Store the high byte and remove the TAX instead */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1+1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I);
|
||||
CS_DelEntry (S, I+1);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
CS_DelEntry (S, I);
|
||||
|
||||
/* Store the low byte */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[2]->LI);
|
||||
@ -1594,9 +1600,9 @@ static unsigned OptPtrLoad2 (CodeSeg* S)
|
||||
*
|
||||
* and replace it by:
|
||||
*
|
||||
* ldy ...
|
||||
* stx ptr1+1
|
||||
* sta ptr1
|
||||
* ldy ...
|
||||
* ldx #$00
|
||||
* lda (ptr1),y
|
||||
*
|
||||
@ -1624,13 +1630,13 @@ static unsigned OptPtrLoad2 (CodeSeg* S)
|
||||
CodeEntry* X;
|
||||
|
||||
/* Store the high byte */
|
||||
X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I);
|
||||
|
||||
/* Store the low byte */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
/* Store the low byte */
|
||||
X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+2);
|
||||
|
||||
/* Delete the call to ldauidx */
|
||||
CS_DelEntry (S, I+3);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user