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:
@@ -2,7 +2,7 @@
|
||||
# windows powershell: echo $LASTEXITCODE
|
||||
# nushell: echo $env.LAST_EXIT_CODE
|
||||
# bash: echo $?
|
||||
"./return_val_cases/01_return.c" = 65536
|
||||
"./return_val_cases/01_return.c" = 255
|
||||
"./return_val_cases/02_decl_expr.c" = 1
|
||||
"./return_val_cases/03_decl_init.c" = 11
|
||||
"./return_val_cases/04_if.c" = 1
|
||||
@@ -14,12 +14,12 @@
|
||||
"./return_val_cases/10_main.c" = 3
|
||||
"./return_val_cases/11_recursive.c" = 120
|
||||
"./return_val_cases/12_logic.c" = 10
|
||||
"./return_val_cases/13_array.c" = 1198
|
||||
"./return_val_cases/13_array.c" = 209
|
||||
"./return_val_cases/14_pointer.c" = 2
|
||||
"./return_val_cases/15_array_subscript.c" = 1198
|
||||
"./return_val_cases/15_array_subscript.c" = 209
|
||||
"./return_val_cases/16_enum.c" = 5
|
||||
"./return_val_cases/17_more_arg.c" = 45
|
||||
"./return_val_cases/18_break_continue.c" = 676
|
||||
"./return_val_cases/19_goto.c" = 676
|
||||
"./return_val_cases/18_break_continue.c" = 219
|
||||
"./return_val_cases/19_goto.c" = 219
|
||||
[stdout_val_cases]
|
||||
"./stdout_val_cases/01_include.c" = "Hello World!\n"
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
int main() {
|
||||
return 65536;
|
||||
}
|
||||
int main() { return 255; }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
int main(void) {
|
||||
char buff[] = "hello buffer";
|
||||
char buff[] = "hi";
|
||||
int res = 0;
|
||||
for (char *ptr = buff; *ptr != 0; ptr += 1) {
|
||||
res += *ptr;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
int main(void) {
|
||||
char buff[] = "hello buffer";
|
||||
char buff[] = "hi";
|
||||
int res = 0;
|
||||
for (int i = 0; buff[i] != 0; i += 1) {
|
||||
res += buff[i];
|
||||
|
||||
@@ -3,7 +3,7 @@ int main(void) {
|
||||
char buff[] = "hello buffer";
|
||||
int res = 0;
|
||||
for (int i = 0; buff[i] != 0; i += 1) {
|
||||
if (i < 2)
|
||||
if (i <= 6)
|
||||
continue;
|
||||
if (i > 8)
|
||||
break;
|
||||
|
||||
@@ -2,7 +2,7 @@ int main(void) {
|
||||
char buff[] = "hello buffer";
|
||||
int res = 0;
|
||||
for (int i = 0; buff[i] != 0; i += 1) {
|
||||
if (i < 2)
|
||||
if (i <= 6)
|
||||
goto the_continue;
|
||||
if (i > 8)
|
||||
goto the_break;
|
||||
|
||||
Reference in New Issue
Block a user