refactor: do not append epilogue to user functions since they all return anyway
This commit is contained in:
parent
c748a34e4c
commit
16de964f74
@ -99,17 +99,13 @@ object asmGenerator {
|
||||
).toList
|
||||
}
|
||||
|
||||
def wrapFunc(labelName: String, funcBody: Chain[AsmLine])(using
|
||||
stack: Stack,
|
||||
strings: ListBuffer[String]
|
||||
private def wrapBuiltinFunc(labelName: String, funcBody: Chain[AsmLine])(using
|
||||
stack: Stack
|
||||
): Chain[AsmLine] = {
|
||||
var chain = Chain.empty[AsmLine]
|
||||
|
||||
chain += LabelDef(labelName)
|
||||
var chain = Chain.one[AsmLine](LabelDef(labelName))
|
||||
chain ++= funcPrologue()
|
||||
chain ++= funcBody
|
||||
chain ++= funcEpilogue()
|
||||
|
||||
chain
|
||||
}
|
||||
|
||||
@ -120,13 +116,15 @@ object asmGenerator {
|
||||
given stack: Stack = Stack()
|
||||
// Setup the stack with param 7 and up
|
||||
func.params.drop(argRegs.size).foreach(stack.reserve(_))
|
||||
var chain = Chain.empty[AsmLine]
|
||||
var chain = Chain.one[AsmLine](LabelDef(labelGenerator.getLabel(func.name)))
|
||||
chain ++= funcPrologue()
|
||||
// Push the rest of params onto the stack for simplicity
|
||||
argRegs.zip(func.params).foreach { (reg, param) =>
|
||||
chain += stack.push(param, reg)
|
||||
}
|
||||
chain ++= func.body.foldMap(generateStmt(_))
|
||||
wrapFunc(labelGenerator.getLabel(func.name), chain)
|
||||
// No need for epilogue here since all user functions must return explicitly
|
||||
chain
|
||||
}
|
||||
|
||||
def generateBuiltInFuncs()(using
|
||||
@ -136,12 +134,12 @@ object asmGenerator {
|
||||
): Chain[AsmLine] = {
|
||||
var chain = Chain.empty[AsmLine]
|
||||
|
||||
chain ++= wrapFunc(
|
||||
chain ++= wrapBuiltinFunc(
|
||||
labelGenerator.getLabel(Builtin.Exit),
|
||||
Chain(stack.align(), assemblyIR.Call(CLibFunc.Exit))
|
||||
)
|
||||
|
||||
chain ++= wrapFunc(
|
||||
chain ++= wrapBuiltinFunc(
|
||||
labelGenerator.getLabel(Builtin.Printf),
|
||||
Chain(
|
||||
stack.align(),
|
||||
@ -151,14 +149,14 @@ object asmGenerator {
|
||||
)
|
||||
)
|
||||
|
||||
chain ++= wrapFunc(
|
||||
chain ++= wrapBuiltinFunc(
|
||||
labelGenerator.getLabel(Builtin.Malloc),
|
||||
Chain.one(stack.align())
|
||||
)
|
||||
|
||||
chain ++= wrapFunc(labelGenerator.getLabel(Builtin.Free), Chain.empty)
|
||||
chain ++= wrapBuiltinFunc(labelGenerator.getLabel(Builtin.Free), Chain.empty)
|
||||
|
||||
chain ++= wrapFunc(
|
||||
chain ++= wrapBuiltinFunc(
|
||||
labelGenerator.getLabel(Builtin.Read),
|
||||
Chain(
|
||||
stack.align(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user