feat(lir): 添加函数参数操作数类型支持

添加 SCC_LIR_INSTR_KIND_ARG 枚举值用于表示函数参数操作数,
修改 scc_lir_instr 结构体以支持参数类型的值存储,
新增 SCC_LIR_ARG 宏定义用于创建参数操作数,
更新 HIR 到 LIR 的转换逻辑以正确处理函数参数引用。

BREAKING CHANGE: 修改了 LIR 指令格式以支持参数操作数类型。

refactor(mir): 重命名并重构 x86_64 指令选择模块

将 mir_x86.c 重命名为 arch/x86_64_isel.c,
创建新的头文件 arch/x86_64_isel.h,
重构结构体名称为 scc_x86_64_isel_t,
统一函数命名前缀为 scc_x86_,
移除重复的包含头文件。

feat(abi): 添加 ABI 降低框架接口定义

定义 scc_abi_lowering_t 结构体用于 ABI 降低功能,
提供函数指针类型定义用于调用、返回、参数等处理,
为后续实现不同平台 ABI 支持奠定基础。

fix(x86): 支持参数操作数的 MIR 转换

更新 lir_val_to_mir_op 函数以处理 SCC_LIR_INSTR_KIND_ARG 类型,
通过 ABI 降低框架获取参数的实际物理位置,
修复移位运算和除法运算中的函数调用命名。

test: 更新测试用例期望值

调整多个测试用例的期望返回值,
修改字符串字面量和循环条件以匹配新的预期行为,
确保测试用例与编译器功能变化保持一致。
This commit is contained in:
zzy
2026-05-07 20:07:27 +08:00
parent 096177e7e8
commit e5cb70732e
13 changed files with 161 additions and 113 deletions

View File

@@ -0,0 +1,22 @@
#ifndef __SCC_ABI_LOWERING_H__
#define __SCC_ABI_LOWERING_H__
#include "../scc_mir_module.h"
#include <scc_lir_module.h>
typedef void (*scc_abi_lower_fn)(void *user_data, const scc_lir_instr_t *instr);
typedef scc_mir_operand_t (*scc_abi_lower_param_fn)(void *userdata,
const scc_lir_val_t *val);
typedef struct scc_abi_lowering {
scc_abi_lower_fn lower_call;
scc_abi_lower_fn lower_ret;
scc_abi_lower_param_fn lower_param;
// TODO va_list
scc_abi_lower_fn lower_va_start;
scc_abi_lower_fn lower_va_arg;
scc_abi_lower_fn lower_va_end;
scc_abi_lower_fn lower_va_copy;
} scc_abi_lowering_t;
#endif /* __SCC_ABI_LOWERING_H__ */