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.
12345678910111213141516171819202122232425262728293031package codegen
import ( "git.urbach.dev/cli/q/src/asm")
// enter sets up the stack frame.func (f *Function) enter() { f.Assembler.Append(&asm.Label{ Name: f.FullName, Align: f.alignment(), })
if f.Preserved.Count() > 0 && !f.IsExit { f.Assembler.Append(&asm.Push{Registers: f.Preserved.Slice()}) }
if f.hasExternCalls || (f.hasStackFrame && !f.IsExit) { f.Assembler.Append(&asm.StackFrameStart{FramePointer: f.needsFramePointer, ExternCalls: f.hasExternCalls}) }
if f.stackSize > 0 { f.stackSize = (f.stackSize + 15) &^ 15
f.Assembler.Append(&asm.SubtractNumber{ Destination: f.CPU.StackPointer, Source: f.CPU.StackPointer, Number: int(f.stackSize), }) }}