1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-07-05 09:28:54 +00:00

Separate optimization presets for Z80, LR35902 and 8080

This commit is contained in:
Karol Stasiak 2018-07-27 19:09:38 +02:00
parent b7f173fb71
commit 1948c38e04
5 changed files with 29 additions and 8 deletions

View File

@ -213,7 +213,12 @@ object Main {
val assemblyOptimizations = optLevel match {
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

View File

@ -8,7 +8,7 @@ import millfork.assembly.z80.ZLine
*/
object Z80OptimizationPresets {
val Good: List[AssemblyOptimization[ZLine]] = {
val GoodForZ80: List[AssemblyOptimization[ZLine]] = {
List.fill(5)(
List.fill(5)(
AlwaysGoodZ80Optimizations.All ++
@ -20,4 +20,8 @@ object Z80OptimizationPresets {
).flatten
}
val GoodForIntel8080: List[AssemblyOptimization[ZLine]] = Nil // TODO
val GoodForSharp: List[AssemblyOptimization[ZLine]] = Nil // TODO
}

View File

@ -47,8 +47,8 @@ object EmuZ80BenchmarkRun {
object EmuIntel8080BenchmarkRun {
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
val (Timings(t0, _), m0) = EmuUnoptimizedIntel8080Run.apply2(source)
// val (Timings(t1, _), m1) = EmuOptimizedZ80Run.apply2(source)
// val (Timings(t2, _), m2) = EmuOptimizedInlinedZ80Run.apply2(source)
// val (Timings(t1, _), m1) = EmuOptimizedIntel8080Run.apply2(source)
// val (Timings(t2, _), m2) = EmuOptimizedInlinedIntel8080Run.apply2(source)
println(f"Before optimization: $t0%7d")
// println(f"After optimization: $t1%7d")
// println(f"After inlining: $t2%7d")
@ -66,8 +66,8 @@ object EmuIntel8080BenchmarkRun {
object EmuSharpBenchmarkRun {
def apply(source: String)(verifier: MemoryBank => Unit): Unit = {
val (Timings(t0, _), m0) = EmuUnoptimizedSharpRun.apply2(source)
// val (Timings(t1, _), m1) = EmuOptimizedZ80Run.apply2(source)
// val (Timings(t2, _), m2) = EmuOptimizedInlinedZ80Run.apply2(source)
// val (Timings(t1, _), m1) = EmuOptimizedSharpRun.apply2(source)
// val (Timings(t2, _), m2) = EmuOptimizedInlinedSharpRun.apply2(source)
println(f"Before optimization: $t0%7d")
// println(f"After optimization: $t1%7d")
// println(f"After inlining: $t2%7d")

View File

@ -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
}

View File

@ -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)