Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930package codegen
import ( "git.urbach.dev/cli/q/src/asm")
// leave cleans up the stack and returns to the caller.func (f *Function) leave() { if f.IsExit { return }
if f.stackSize > 0 { f.Assembler.Append(&asm.AddNumber{ Destination: f.CPU.StackPointer, Source: f.CPU.StackPointer, Number: int(f.stackSize), }) }
if f.hasStackFrame || f.hasExternCalls { f.Assembler.Append(&asm.StackFrameEnd{FramePointer: f.needsFramePointer}) }
if f.Preserved.Count() > 0 { f.Assembler.Append(&asm.Pop{Registers: f.Preserved.Slice()}) }
f.Assembler.Append(&asm.Return{})}