1
0
mirror of https://github.com/KarolS/millfork.git synced 2025-08-18 23:32:38 +00:00

Added -Of and -Os command line options

This commit is contained in:
Karol Stasiak
2018-02-26 02:41:18 +01:00
parent 42818df340
commit 6f9ee33514
4 changed files with 17 additions and 5 deletions

View File

@@ -75,7 +75,7 @@ object CompilationFlag extends Enumeration {
// compilation options: // compilation options:
EmitIllegals, EmitCmosOpcodes, DecimalMode, ReadOnlyArrays, PreventJmpIndirectBug, EmitIllegals, EmitCmosOpcodes, DecimalMode, ReadOnlyArrays, PreventJmpIndirectBug,
// optimization options: // optimization options:
DetailedFlowAnalysis, DangerousOptimizations, InlineFunctions, DetailedFlowAnalysis, DangerousOptimizations, InlineFunctions, OptimizeForSize, OptimizeForSpeed,
// memory allocation options // memory allocation options
VariableOverlap, CompactReturnDispatchParams, VariableOverlap, CompactReturnDispatchParams,
// runtime check options // runtime check options

View File

@@ -225,7 +225,15 @@ object Main {
} }
flag("--inline").action { c => flag("--inline").action { c =>
c.changeFlag(CompilationFlag.InlineFunctions, true) c.changeFlag(CompilationFlag.InlineFunctions, true)
}.description("Inline functions automatically (experimental).") }.description("Inline functions automatically.")
flag("-Of", "--fast").action { c =>
c.changeFlag(CompilationFlag.OptimizeForSize, false)
c.changeFlag(CompilationFlag.OptimizeForSpeed, true)
}.description("Optimize for speed (experimental).")
flag("-Os", "--size").action { c =>
c.changeFlag(CompilationFlag.OptimizeForSize, true)
c.changeFlag(CompilationFlag.OptimizeForSpeed, false)
}.description("Optimize for size (experimental).")
flag("--detailed-flow").action { c => flag("--detailed-flow").action { c =>
c.changeFlag(CompilationFlag.DetailedFlowAnalysis, true) c.changeFlag(CompilationFlag.DetailedFlowAnalysis, true)
}.description("Use detailed flow analysis (experimental).") }.description("Use detailed flow analysis (experimental).")

View File

@@ -145,7 +145,11 @@ class Assembler(private val program: Program, private val rootEnv: Environment)
val assembly = mutable.ArrayBuffer[String]() val assembly = mutable.ArrayBuffer[String]()
val potentiallyInlineable: Map[String, Int] = val potentiallyInlineable: Map[String, Int] =
InliningCalculator.getPotentiallyInlineableFunctions(program, options.flags(CompilationFlag.InlineFunctions)) InliningCalculator.getPotentiallyInlineableFunctions(
program,
options.flags(CompilationFlag.InlineFunctions),
if (options.flags(CompilationFlag.OptimizeForSpeed)) 1.3 else 1.0,
if (options.flags(CompilationFlag.OptimizeForSpeed)) 8.0 else 1.2)
var inlinedFunctions = Map[String, List[AssemblyLine]]() var inlinedFunctions = Map[String, List[AssemblyLine]]()
val compiledFunctions = mutable.Map[String, List[AssemblyLine]]() val compiledFunctions = mutable.Map[String, List[AssemblyLine]]()

View File

@@ -16,8 +16,8 @@ object InliningCalculator {
def getPotentiallyInlineableFunctions(program: Program, def getPotentiallyInlineableFunctions(program: Program,
inlineByDefault: Boolean, inlineByDefault: Boolean,
aggressivenessForNormal: Double = 1.0, aggressivenessForNormal: Double,
aggressivenessForRecommended: Double = 1.2): Map[String, Int] = { aggressivenessForRecommended: Double): Map[String, Int] = {
val callCount = mutable.Map[String, Int]().withDefaultValue(0) val callCount = mutable.Map[String, Int]().withDefaultValue(0)
val allFunctions = mutable.Set[String]() val allFunctions = mutable.Set[String]()
val badFunctions = mutable.Set[String]() val badFunctions = mutable.Set[String]()