#ifndef __SCC_FRAME_MANAGER_H__ #define __SCC_FRAME_MANAGER_H__ typedef struct frame_manager frame_manager_t; // 初始化帧管理器,传入 ABI 参数(影子空间大小、栈对齐等) void frame_manager_init(frame_manager_t *fm, int shadow_space, int align); // 分配一个栈槽(用于局部变量或临时值),返回虚拟槽索引(从0开始) int frame_alloc_slot(frame_manager_t *fm, int size); // 分配一个保存的寄存器槽(用于被调用者保存的寄存器),返回虚拟槽索引 int frame_alloc_saved_reg(frame_manager_t *fm, int reg_width); // 计算最终栈帧总大小(已对齐) int frame_total_size(frame_manager_t *fm); // 将虚拟槽索引转换为相对于 RBP 的偏移(正数,表示从 RBP 向下的距离) int frame_slot_offset(frame_manager_t *fm, int slot_idx); // 获取影子空间大小(固定) int frame_shadow_space(frame_manager_t *fm); // 获取保存寄存器区域的总大小 int frame_saved_reg_size(frame_manager_t *fm); #endif /* __SCC_FRAME_MANAGER_H__ */