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:
@@ -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
|
||||||
|
@@ -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).")
|
||||||
|
@@ -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]]()
|
||||||
|
@@ -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]()
|
||||||
|
Reference in New Issue
Block a user