From: laubzega Date: Sun, 14 Oct 2018 20:53:14 +0000 (-0700) Subject: Fix for issue #735 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8eb9f4a8aa63ffbee31f5c87586ba298271e4cd5;p=cc65 Fix for issue #735 --- diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index ca9d5effd..f87c367b2 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -2056,8 +2056,14 @@ unsigned OptPrecalc (CodeSeg* S) ** results we don't already have (including the flags), so ** remove it. Something like this is generated as a result of ** a compare where parts of the values are known to be zero. + ** The only situation where we need to leave things as they are + ** is when V flag is being tested in the next instruction, + ** because ADC/SBC #0 always clears it. */ - if (In->RegA == 0 && CE_IsKnownImm (E, 0x00)) { + if (In->RegA == 0 && CE_IsKnownImm (E, 0x00) && + (E = CS_GetEntry (S, I + 1)) && + E->OPC != OP65_BVC && + E->OPC != OP65_BVS ) { /* 0-0 or 0+0 -> remove */ CS_DelEntry (S, I); ++Changes;