Pass:Asmexpand
1. 目标与位置
- 位置:各架构目录下
*/Asmexpand.ml(配合
backend/Asmexpandaux.ml)
- 输入/输出:
Asm.program → Asm.program
- 目标:在汇编级对 builtin 与伪指令进行展开,补齐调试与 ABI
相关细节。
2. 核心思想
- 在 OCaml 侧对 Asm 指令列表做二次遍历/重写。
- 维护当前函数与标签生成器,插入必要的辅助指令。
3. 关键组件
Asmexpandaux:
current_code 缓冲
new_label 生成新标签
emit 写入扩展指令
- debug 相关的 scope 展开
- 架构特定
Asmexpand.ml:
- 展开 builtin
- 处理 vararg、伪指令、调试注解
4. 与前后 pass 的接口
- 前:
Asmgen
- 后:
PrintAsm 与汇编器(外部)
5. 常见边界与约束
- 展开过程依赖当前函数签名与 ABI(例如可变参数)。
- 生成的新标签必须保持唯一性。