1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-07-17 11:28:55 +00:00

6502: More optimizations

This commit is contained in:
Karol Stasiak 2019-07-23 23:17:03 +02:00
parent a25f6ca3f6
commit b873030b29

View File

@ -667,21 +667,37 @@ object AlwaysGoodOptimizations {
(Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code =>
List(AssemblyLine.implied(TAY), AssemblyLine.implied(INY)) 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(SEC) & HasClear(State.D)) ~
(Elidable & HasOpcode(SBC) & HasImmediate(1)) ~ (Elidable & HasOpcode(SBC) & HasImmediate(1)) ~
(Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => (Elidable & HasOpcode(TAY) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code =>
List(AssemblyLine.implied(TAY), AssemblyLine.implied(DEY)) 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(CLC) & HasClear(State.D)) ~
(Elidable & HasOpcode(ADC) & HasImmediate(1)) ~ (Elidable & HasOpcode(ADC) & HasImmediate(1)) ~
(Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code =>
List(AssemblyLine.implied(TAX), AssemblyLine.implied(INX)) 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(SEC) & HasClear(State.D)) ~
(Elidable & HasOpcode(SBC) & HasImmediate(1)) ~ (Elidable & HasOpcode(SBC) & HasImmediate(1)) ~
(Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code => (Elidable & HasOpcode(TAX) & DoesntMatterWhatItDoesWith(State.A, State.C, State.V)) ~~> { code =>
List(AssemblyLine.implied(TAX), AssemblyLine.implied(DEX)) 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(TXA)) ~
(Elidable & HasOpcode(CLC) & HasClear(State.D)) ~ (Elidable & HasOpcode(CLC) & HasClear(State.D)) ~
(Elidable & HasOpcode(ADC) & HasImmediate(1)) ~ (Elidable & HasOpcode(ADC) & HasImmediate(1)) ~