From: cuz Date: Sat, 5 Jun 2004 22:10:04 +0000 (+0000) Subject: Improved code for or and xor X-Git-Tag: V2.12.0~730 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c76e14f9f5341df20f92980caae5f41460303aa4;p=cc65 Improved code for or and xor git-svn-id: svn://svn.cc65.org/cc65/trunk@3102 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 1854c4b8d..88cebe9a4 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -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) {