[backend]添加了一个Pass,将调用者、被调用者寄存器实现转移到其中

This commit is contained in:
Lixuanwang
2025-07-26 18:38:04 +08:00
parent 8ae7478ef3
commit 540742be0c
7 changed files with 142 additions and 57 deletions

View File

@@ -18,8 +18,24 @@ namespace sysy {
// 物理寄存器定义
enum class PhysicalReg {
ZERO, RA, SP, GP, TP, T0, T1, T2, S0, S1, A0, A1, A2, A3, A4, A5, A6, A7, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, T3, T4, T5, T6,
F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15,F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31
// --- 特殊功能寄存器 ---
ZERO, RA, SP, GP, TP,
// --- 整数寄存器 (按调用约定分组) ---
// 临时寄存器 (调用者保存)
T0, T1, T2, T3, T4, T5, T6,
// 保存寄存器 (被调用者保存)
S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11,
// 参数/返回值寄存器 (调用者保存)
A0, A1, A2, A3, A4, A5, A6, A7,
// --- 浮点寄存器 ---
// (保持您原有的 F0-F31 命名)
F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11,
F12, F13, F14, F15, F16, F17, F18, F19, F20, F21,
F22, F23, F24, F25, F26, F27, F28, F29, F30, F31
};
// RISC-V 指令操作码枚举
@@ -173,6 +189,7 @@ struct StackFrameInfo {
int total_size = 0; // 总大小
std::map<unsigned, int> alloca_offsets; // <AllocaInst的vreg, 栈偏移>
std::map<unsigned, int> spill_offsets; // <溢出vreg, 栈偏移>
std::set<PhysicalReg> used_callee_saved_regs; // 使用的保存寄存器
};
// 机器函数