From 30d18fba01b1736bda7767c7482ddc545409c350 Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Wed, 19 Dec 2018 18:14:40 +0100 Subject: [PATCH] 6502: another optimization for comparisons --- .../assembly/mos/opt/AlwaysGoodOptimizations.scala | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala b/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala index be87a1c0..3a6cae78 100644 --- a/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala +++ b/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala @@ -2646,6 +2646,18 @@ object AlwaysGoodOptimizations { code(1).copy(opcode = LDA), code(0).copy(opcode = CMP), code(2).copy(opcode = BCS)) - } + }, + + (Elidable & HasOpcode(LDA)) ~ + (Elidable & HasOpcode(CMP) & DoesntMatterWhatItDoesWith(State.A, State.N)) ~ + (Elidable & HasOpcode(BEQ) & MatchParameter(2)) ~ + (Elidable & HasOpcode(BCS) & DoesntMatterWhatItDoesWith(State.C) & MatchParameter(1)) ~ + (Elidable & HasCallerCount(1) & MatchParameter(2)) ~~> { code => + List( + code(1).copy(opcode = LDA), + code(0).copy(opcode = CMP), + code(3).copy(opcode = BCC)) + }, + ) }