]> git.sur5r.net Git - cc65/commitdiff
Fix for issue #735
authorlaubzega <mileksmyk@gmail.com>
Sun, 14 Oct 2018 20:53:14 +0000 (13:53 -0700)
committerOliver Schmidt <ol.sc@web.de>
Tue, 16 Oct 2018 07:45:30 +0000 (09:45 +0200)
src/cc65/coptind.c

index ca9d5effd0558028972c293e6f565b0fac5e6bce..f87c367b20446cce03b17a69fe4c9b3144a3c17b 100644 (file)
@@ -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;