mirror of
https://github.com/KarolS/millfork.git
synced 2025-04-13 05:39:54 +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 {
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
}
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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…
x
Reference in New Issue
Block a user