mirror of
https://github.com/KarolS/millfork.git
synced 2024-07-07 21:28:59 +00:00
Separate optimization presets for Z80, LR35902 and 8080
This commit is contained in:
parent
b7f173fb71
commit
1948c38e04
@ -213,7 +213,12 @@ object Main {
|
|||||||
|
|
||||||
val assemblyOptimizations = optLevel match {
|
val assemblyOptimizations = optLevel match {
|
||||||
case 0 => Nil
|
case 0 => Nil
|
||||||
case _ => Z80OptimizationPresets.Good
|
case _ => platform.cpu match {
|
||||||
|
case Cpu.Z80 | Cpu.EZ80 => Z80OptimizationPresets.GoodForZ80
|
||||||
|
case Cpu.Intel8080 => Z80OptimizationPresets.GoodForIntel8080
|
||||||
|
case Cpu.Sharp => Z80OptimizationPresets.GoodForSharp
|
||||||
|
case _ => Nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// compile
|
// compile
|
||||||
|
@ -8,7 +8,7 @@ import millfork.assembly.z80.ZLine
|
|||||||
*/
|
*/
|
||||||
object Z80OptimizationPresets {
|
object Z80OptimizationPresets {
|
||||||
|
|
||||||
val Good: List[AssemblyOptimization[ZLine]] = {
|
val GoodForZ80: List[AssemblyOptimization[ZLine]] = {
|
||||||
List.fill(5)(
|
List.fill(5)(
|
||||||
List.fill(5)(
|
List.fill(5)(
|
||||||
AlwaysGoodZ80Optimizations.All ++
|
AlwaysGoodZ80Optimizations.All ++
|
||||||
@ -20,4 +20,8 @@ object Z80OptimizationPresets {
|
|||||||
).flatten
|
).flatten
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val GoodForIntel8080: List[AssemblyOptimization[ZLine]] = Nil // TODO
|
||||||
|
|
||||||
|
val GoodForSharp: List[AssemblyOptimization[ZLine]] = Nil // TODO
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,8 @@ object EmuZ80BenchmarkRun {
|
|||||||
object EmuIntel8080BenchmarkRun {
|
object EmuIntel8080BenchmarkRun {
|
||||||
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
|
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
|
||||||
val (Timings(t0, _), m0) = EmuUnoptimizedIntel8080Run.apply2(source)
|
val (Timings(t0, _), m0) = EmuUnoptimizedIntel8080Run.apply2(source)
|
||||||
// val (Timings(t1, _), m1) = EmuOptimizedZ80Run.apply2(source)
|
// val (Timings(t1, _), m1) = EmuOptimizedIntel8080Run.apply2(source)
|
||||||
// val (Timings(t2, _), m2) = EmuOptimizedInlinedZ80Run.apply2(source)
|
// val (Timings(t2, _), m2) = EmuOptimizedInlinedIntel8080Run.apply2(source)
|
||||||
println(f"Before optimization: $t0%7d")
|
println(f"Before optimization: $t0%7d")
|
||||||
// println(f"After optimization: $t1%7d")
|
// println(f"After optimization: $t1%7d")
|
||||||
// println(f"After inlining: $t2%7d")
|
// println(f"After inlining: $t2%7d")
|
||||||
@ -66,8 +66,8 @@ object EmuIntel8080BenchmarkRun {
|
|||||||
object EmuSharpBenchmarkRun {
|
object EmuSharpBenchmarkRun {
|
||||||
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
|
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
|
||||||
val (Timings(t0, _), m0) = EmuUnoptimizedSharpRun.apply2(source)
|
val (Timings(t0, _), m0) = EmuUnoptimizedSharpRun.apply2(source)
|
||||||
// val (Timings(t1, _), m1) = EmuOptimizedZ80Run.apply2(source)
|
// val (Timings(t1, _), m1) = EmuOptimizedSharpRun.apply2(source)
|
||||||
// val (Timings(t2, _), m2) = EmuOptimizedInlinedZ80Run.apply2(source)
|
// val (Timings(t2, _), m2) = EmuOptimizedInlinedSharpRun.apply2(source)
|
||||||
println(f"Before optimization: $t0%7d")
|
println(f"Before optimization: $t0%7d")
|
||||||
// println(f"After optimization: $t1%7d")
|
// println(f"After optimization: $t1%7d")
|
||||||
// println(f"After inlining: $t2%7d")
|
// println(f"After inlining: $t2%7d")
|
||||||
|
@ -26,7 +26,15 @@ object EmuOptimizedInlinedRun extends EmuRun(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
object EmuOptimizedInlinedZ80Run extends EmuZ80Run(Cpu.Z80, OptimizationPresets.NodeOpt, Z80OptimizationPresets.Good) {
|
object EmuOptimizedInlinedZ80Run extends EmuZ80Run(Cpu.Z80, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForZ80) {
|
||||||
|
override def inline: Boolean = true
|
||||||
|
}
|
||||||
|
|
||||||
|
object EmuOptimizedInlinedIntel8080Run extends EmuZ80Run(Cpu.Intel8080, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForIntel8080) {
|
||||||
|
override def inline: Boolean = true
|
||||||
|
}
|
||||||
|
|
||||||
|
object EmuOptimizedInlinedSharpRun extends EmuZ80Run(Cpu.Sharp, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForSharp) {
|
||||||
override def inline: Boolean = true
|
override def inline: Boolean = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,4 +22,8 @@ object EmuOptimizedRun extends EmuRun(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
object EmuOptimizedZ80Run extends EmuZ80Run(Cpu.Z80, OptimizationPresets.NodeOpt, Z80OptimizationPresets.Good)
|
object EmuOptimizedZ80Run extends EmuZ80Run(Cpu.Z80, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForZ80)
|
||||||
|
|
||||||
|
object EmuOptimizedIntel8080Run extends EmuZ80Run(Cpu.Intel8080, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForIntel8080)
|
||||||
|
|
||||||
|
object EmuOptimizedSharpRun extends EmuZ80Run(Cpu.Sharp, OptimizationPresets.NodeOpt, Z80OptimizationPresets.GoodForSharp)
|
||||||
|
Loading…
Reference in New Issue
Block a user