Pass:Asmgen
1. 目标与位置
- 位置:各架构目录下
*/Asmgen.v(如
x86/Asmgen.v, arm/Asmgen.v)
- 输入/输出:
Mach.program → Asm.program
- 目标:将 Mach 指令映射为目标架构的汇编指令序列。
2. 核心思想
- 使用架构特定的指令/寄存器描述(
Asm.v,
Machregs.v, Op.v)。
- 对 Mach 的操作进行合法性检查(例如寄存器类型、两地址约束)。
- 使用目标 ISA 的 smart constructors 生成最优指令序列。
3. 关键组件(以 x86/arm 为例)
ireg_of /
freg_of:抽取整数/浮点寄存器。
mk_*:构造并校验特定指令模式(如移位、加载、存储)。
transl_instr /
transl_code:指令翻译主入口。
transf_program:程序入口(架构模块提供)。
4. 具体变换要点
- 两地址指令约束:检查/调整输入输出寄存器一致性。
- 立即数限制:按架构规则拆分或改写立即数。
- 内存寻址模式:匹配目标 ISA 的地址格式。
5. 与前后 pass 的接口
- 前:
Stacking(Mach)
- 后:
Asmexpand(可选扩展)
6. 常见边界与约束
- Mach 代码必须满足先前 pass 的结构性约束,否则 Asmgen 可能报错。
- 架构差异会导致具体生成逻辑完全不同。