1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-05-31 18:41:30 +00:00
millfork/src/main/scala/millfork/assembly/m6809/opt/ForwardFlowAnalysisForInherent.scala

29 lines
1000 B
Scala

package millfork.assembly.m6809.opt
import millfork.assembly.m6809.MOpcode
import millfork.assembly.m6809.MOpcode._
import millfork.assembly.opt.Status.SingleFalse
import millfork.assembly.opt.{AnyStatus, SingleStatus, Status}
import millfork.env.Constant
/**
* @author Karol Stasiak
*/
object ForwardFlowAnalysisForInherent {
private val map: Map[MOpcode.Value, CpuStatus => CpuStatus] = Map(
NOP -> identity,
MUL -> { currentStatus =>
val newD = (currentStatus.a <*> currentStatus.b) { (a, b) => ((a & 0xff) * (b & 0xff)) & 0xff }
currentStatus.copy(c = AnyStatus, z = AnyStatus, a = newD.hi, b = newD.hi)
},
SEX -> { currentStatus =>
val newA = currentStatus.b.map{ n => if (n.&(0x80) == 0) 0 else 0xff }
currentStatus.copy(v = Status.SingleFalse, n = AnyStatus, z = AnyStatus, a = newA)
},
)
def hasDefinition(opcode: MOpcode.Value): Boolean = map.contains(opcode)
def get(opcode: MOpcode.Value): CpuStatus => CpuStatus = map(opcode)
}