lamina_codegen/x86_64/
frame.rs1pub struct X86Frame;
5
6impl X86Frame {
7 pub fn generate_prologue<W: std::io::Write>(
9 writer: &mut W,
10 stack_size: usize,
11 ) -> Result<(), std::io::Error> {
12 writeln!(writer, " pushq %rbp")?;
13 writeln!(writer, " movq %rsp, %rbp")?;
14 if stack_size > 0 {
15 writeln!(writer, " subq ${}, %rsp", stack_size)?;
16 }
17 Ok(())
18 }
19
20 pub fn generate_epilogue<W: std::io::Write>(
22 writer: &mut W,
23 stack_size: usize,
24 ) -> Result<(), std::io::Error> {
25 if stack_size > 0 {
26 writeln!(writer, " addq ${}, %rsp", stack_size)?;
27 }
28 writeln!(writer, " popq %rbp")?;
29 writeln!(writer, " ret")?;
30 Ok(())
31 }
32
33 pub fn calculate_stack_offset(slot_index: usize) -> i32 {
35 -((slot_index as i32 + 1) * 8)
36 }
37}