Pass:Stacking
1. 目标与位置
- 位置:
backend/Stacking.v
- 输入/输出:
Linear.program →
Mach.program
- 目标:构建栈帧布局并插入保存/恢复指令,生成 Mach 级代码。
2. 核心思想
- 依据
Stacklayout 和 ABI 约束生成
frame_env。
- 将 Linear 中的抽象栈访问转为 Mach 的具体地址计算。
- 插入 callee-save 寄存器保存/恢复。
3. 关键数据结构与函数
frame_env / offset_local /
offset_arg:栈布局与偏移。
save_callee_save /
restore_callee_save:保存/恢复逻辑。
simplify_load / simplify_store:将
load/store 转为 ISA 可支持的粒度。
transl_instr /
transl_code:指令翻译。
transf_program:程序入口。
4. 与前后 pass 的接口
- 前:
Debugvar(或 CleanupLabels)
- 后:
Asmgen
5. 常见边界与约束
- 栈布局与调用约定强相关;不匹配会导致调用错误。
- 对不支持的 load/store 宽度需要拆分或重写。