From b873030b2955bd3e5ce260d47138f95b4f7548a8 Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Tue, 23 Jul 2019 23:17:03 +0200 Subject: [PATCH] 6502: More optimizations --- .../mos/opt/AlwaysGoodOptimizations.scala | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala b/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala index e4cd1878..6ad36c3e 100644 --- a/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala +++ b/src/main/scala/millfork/assembly/mos/opt/AlwaysGoodOptimizations.scala @@ -667,21 +667,37 @@ object AlwaysGoodOptimizations { (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => List(AssemblyLine.implied(TAY), AssemblyLine.implied(INY)) }, + (Elidable & HasOpcode(ADC) & HasImmediate(1) & HasClear(State.D) & HasClear(State.C)) ~ + (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => + List(AssemblyLine.implied(TAY), AssemblyLine.implied(INY)) + }, (Elidable & HasOpcode(SEC) & HasClear(State.D)) ~ (Elidable & HasOpcode(SBC) & HasImmediate(1)) ~ (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => List(AssemblyLine.implied(TAY), AssemblyLine.implied(DEY)) }, + (Elidable & HasOpcode(SBC) & HasImmediate(1) & HasClear(State.D) & HasSet(State.C)) ~ + (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => + List(AssemblyLine.implied(TAY), AssemblyLine.implied(DEY)) + }, (Elidable & HasOpcode(CLC) & HasClear(State.D)) ~ (Elidable & HasOpcode(ADC) & HasImmediate(1)) ~ (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => List(AssemblyLine.implied(TAX), AssemblyLine.implied(INX)) }, + (Elidable & HasOpcode(ADC) & HasImmediate(1) & HasClear(State.D) & HasClear(State.C)) ~ + (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => + List(AssemblyLine.implied(TAX), AssemblyLine.implied(INX)) + }, (Elidable & HasOpcode(SEC) & HasClear(State.D)) ~ (Elidable & HasOpcode(SBC) & HasImmediate(1)) ~ (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => List(AssemblyLine.implied(TAX), AssemblyLine.implied(DEX)) }, + (Elidable & HasOpcode(SBC) & HasImmediate(1) & HasClear(State.D) & HasSet(State.C)) ~ + (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => + List(AssemblyLine.implied(TAX), AssemblyLine.implied(DEX)) + }, (Elidable & HasOpcode(TXA)) ~ (Elidable & HasOpcode(CLC) & HasClear(State.D)) ~ (Elidable & HasOpcode(ADC) & HasImmediate(1)) ~