From 8eb9f4a8aa63ffbee31f5c87586ba298271e4cd5 Mon Sep 17 00:00:00 2001 From: laubzega Date: Sun, 14 Oct 2018 13:53:14 -0700 Subject: [PATCH] Fix for issue #735 --- src/cc65/coptind.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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; -- 2.39.5