]> git.sur5r.net Git - cc65/commitdiff
Equality problem (Ullrich von Bassewitz) 138/head
authorSpiro Trikaliotis <spiro.trikaliotis@gmx.de>
Tue, 14 Oct 2014 11:41:17 +0000 (13:41 +0200)
committerSpiro Trikaliotis <spiro.trikaliotis@gmx.de>
Tue, 14 Oct 2014 11:41:17 +0000 (13:41 +0200)
Neil Stockbridge reported a problem with equality comparisons on
cc65.org's mailing list:

http://www.cc65.org/mailarchive/2014-10/11680.html

Uz provided a fix for it:

http://www.cc65.org/mailarchive/2014-10/11683.html

This pull request ask to add the fix to cc65 on github.

src/cc65/coptstop.c

index cf6392bd33a930a426f7d22b77c6e0d8fbc998dd..427d0bd137e7fca39585e2e559c3f7f3c7c3507d 100644 (file)
@@ -766,8 +766,12 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer
         InsertEntry (D, X, D->IP++);
 
         /* Lhs load entries can be removed */
-        D->Lhs.X.Flags |= LI_REMOVE;
-        D->Lhs.A.Flags |= LI_REMOVE;
+        if (LoadX->AM != AM65_IMM) {
+            D->Lhs.X.Flags |= LI_REMOVE;
+        }
+        if (LoadA->AM != AM65_IMM) {
+            D->Lhs.A.Flags |= LI_REMOVE;
+        }
 
     } else if ((D->Rhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT &&
                (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) {
@@ -790,8 +794,12 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer
         InsertEntry (D, X, D->IP++);
 
         /* Rhs load entries can be removed */
-        D->Rhs.X.Flags |= LI_REMOVE;
-        D->Rhs.A.Flags |= LI_REMOVE;
+        if (LoadX->AM != AM65_IMM) {
+            D->Rhs.X.Flags |= LI_REMOVE;
+        }
+        if (LoadA->AM != AM65_IMM) {
+            D->Rhs.A.Flags |= LI_REMOVE;
+        }
 
     } else if ((D->Rhs.A.Flags & LI_DIRECT) != 0 &&
                (D->Rhs.X.Flags & LI_DIRECT) != 0) {