]> git.sur5r.net Git - cc65/commitdiff
Improved code for or and xor
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 22:10:04 +0000 (22:10 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 22:10:04 +0000 (22:10 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3102 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/codegen.c

index 1854c4b8d38accdfa57bba791eef9d697b6c0ce5..88cebe9a4b734ead469354eb1fb8d466a06a88f9 100644 (file)
@@ -2779,33 +2779,38 @@ void g_or (unsigned flags, unsigned long val)
                }
                /* FALLTHROUGH */
 
-           case CF_INT:
-               if (val <= 0xFF) {
+           case CF_INT:
+               if (val <= 0xFF) {
                     if ((val & 0xFF) != 0) {
-                       AddCodeLine ("ora #$%02X", (unsigned char)val);
+                       AddCodeLine ("ora #$%02X", (unsigned char)val);
                     }
-                   return;
                } else if ((val & 0xFF00) == 0xFF00) {
                     if ((val & 0xFF) != 0) {
-                       AddCodeLine ("ora #$%02X", (unsigned char)val);
+                       AddCodeLine ("ora #$%02X", (unsigned char)val);
                     }
                     ldxconst (0xFF);
-                    return;
+                } else if (val != 0) {
+                    AddCodeLine ("ora #$%02X", (unsigned char)val);
+                    AddCodeLine ("pha");
+                    AddCodeLine ("txa");
+                    AddCodeLine ("ora #$%02X", (unsigned char)(val >> 8));
+                    AddCodeLine ("tax");
+                    AddCodeLine ("pla");
                 }
-               break;
+               return;
 
-           case CF_LONG:
-               if (val <= 0xFF) {
+           case CF_LONG:
+               if (val <= 0xFF) {
                     if ((val & 0xFF) != 0) {
                         AddCodeLine ("ora #$%02X", (unsigned char)val);
                     }
-                   return;
-               }
-               break;
+                   return;
+               }
+               break;
 
-           default:
-               typeerror (flags);
-       }
+           default:
+               typeerror (flags);
+       }
 
        /* If we go here, we didn't emit code. Push the lhs on stack and fall
         * into the normal, non-optimized stuff. Note: The standard stuff will
@@ -2853,16 +2858,17 @@ void g_xor (unsigned flags, unsigned long val)
                    if (val != 0) {
                        AddCodeLine ("eor #$%02X", (unsigned char)val);
                    }
-                   return;
-               } else if ((val & 0xFF) == 0) {
+                       } else if (val != 0) {
+                    if ((val & 0xFF) != 0) {
+                        AddCodeLine ("eor #$%02X", (unsigned char)val);
+                    }
                    AddCodeLine ("pha");
                    AddCodeLine ("txa");
                    AddCodeLine ("eor #$%02X", (unsigned char)(val >> 8));
                    AddCodeLine ("tax");
                    AddCodeLine ("pla");
-                   return;
                }
-               break;
+               return;
 
            case CF_LONG:
                if (val <= 0xFF) {