docs: clarify evalExprOntoStack sanity check, explanation comments for generateCall
This commit is contained in:
@@ -372,7 +372,10 @@ object asmGenerator {
|
||||
asm += stack.push(call.ty.size, RAX)
|
||||
}
|
||||
|
||||
assert(stack.size == stackSizeStart + 1)
|
||||
assert(
|
||||
stack.size == stackSizeStart + 1,
|
||||
"Sanity check: ONLY the evaluated expression should have been pushed onto the stack"
|
||||
)
|
||||
asm ++= zeroRest(MemLocation(stack.head.pointer, Q64), expr.ty.size)
|
||||
asm
|
||||
}
|
||||
@@ -384,17 +387,20 @@ object asmGenerator {
|
||||
var asm = Chain.empty[AsmLine]
|
||||
val microWacc.Call(target, args) = call
|
||||
|
||||
// Evaluate arguments 0-6
|
||||
argRegs
|
||||
.zip(args)
|
||||
.map { (reg, expr) =>
|
||||
asm ++= evalExprOntoStack(expr)
|
||||
reg
|
||||
}
|
||||
// And set the appropriate registers
|
||||
.reverse
|
||||
.foreach { reg =>
|
||||
asm += stack.pop(Register(Q64, reg))
|
||||
}
|
||||
|
||||
// Evaluate arguments 7 and up and push them onto the stack
|
||||
args.drop(argRegs.size).foldMap {
|
||||
asm ++= evalExprOntoStack(_)
|
||||
}
|
||||
@@ -406,6 +412,7 @@ object asmGenerator {
|
||||
asm += assemblyIR.Call(labelGenerator.getLabelArg(target)) // regular call
|
||||
}
|
||||
|
||||
// Remove arguments 7 and up from the stack
|
||||
if (args.size > argRegs.size) {
|
||||
asm += stack.drop(args.size - argRegs.size)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user