|
|
68eac24152
|
feat(mir): 实现x86-64架构寄存器分配和指令选择优化
- 修改x86_64_isel.h接口,将func_meta替换为func指针,并添加新的isel函数原型
- 添加x86_64_reg_alloc.h头文件,提供架构特定的寄存器分配操作填充函数
- 更新frame_layout.h定义frame_layout上下文结构
- 重构reg_alloc.h中的寄存器分配操作结构体,将ops从指针改为值类型,
并将mark_reg_unused重命名为clean_mark_regs
- 扩展scc_mir.h中的函数元数据,添加vregs_count字段和虚拟寄存器管理函数
- 重新定义MIR pass阶段枚举,添加FRAME_LAYOUT和PROLOGUE_EPILOGUE阶段
- 添加win64目标相关头文件和实现,提供Windows x64 ABI降低和寄存器分配填充
- 更新虚拟寄存器表示格式从$到%,修复alloca指令处理
- 重构寄存器分配算法,改进虚拟寄存器到物理寄存器/栈槽的映射机制
- 完善MIR pass调度,支持多阶段处理流程
|
2026-05-12 10:55:58 +08:00 |
|
|
|
4f40f0d5e4
|
feat(mir): 添加寄存器分配 pass 支持
- 实现了核心寄存器分配接口 scc_reg_alloc.h
- 添加 x86_64 架构特定的寄存器分配实现
- 实现基础的虚拟寄存器到物理寄存器分配逻辑
- 支持栈槽分配和重载/存储指令生成
fix(argparse): 修复帮助信息打印中的枚举类型显示
- 将固定大小缓冲区改为动态字符串处理
- 正确显示枚举类型的选项值和可选值列表
- 使用 | 分隔符展示多个可选值
refactor(main): 调整编译流程中的 pass 阶段支持
- 更新配置文件中各编译阶段的名称定义
- 添加对寄存器分配、帧布局等中间表示 pass 的支持
- 重构主流程以支持不同 MIR 阶段的代码输出
|
2026-05-11 13:18:58 +08:00 |
|
|
|
902ee6dea3
|
feat(argparse): 添加枚举类型选项支持
添加了对命令行参数枚举类型的支持,允许用户从预定义的选项中进行选择,
并在解析时进行验证。同时修复了空值检查问题。
refactor(mir): 重构pass管理系统
将原有的pass管理器系统简化为直接的pass执行函数,移除了复杂的
依赖管理和流水线构建机制,使系统更加简洁明了。
chore(ir): 添加Windows x64 ABI实现
实现了Windows x64平台的ABI约定,包括参数传递、寄存器使用和
栈帧布局的处理逻辑。
feat(config): 统一编译阶段控制配置
将多个独立的布尔类型编译阶段控制改为统一的枚举类型,便于
管理和扩展新的编译阶段。
|
2026-05-10 15:02:36 +08:00 |
|
|
|
e5cb70732e
|
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: 更新测试用例期望值
调整多个测试用例的期望返回值,
修改字符串字面量和循环条件以匹配新的预期行为,
确保测试用例与编译器功能变化保持一致。
|
2026-05-07 20:07:27 +08:00 |
|
|
|
b06c4fe3cc
|
feat(ast2ir): 添加AST上下文支持并修复类型转换逻辑
- 在scc_ast2ir_ctx_t中添加ast_ctx字段用于访问AST上下文
- 修改scc_ast2ir_ctx_init函数签名以接收ast_ctx参数
- 修复enum类型的处理逻辑,使用正确的内置类型获取方式
- 修正for循环控制流中错误的跳转目标
- 移除未使用的parse_struct_union_layout函数
refactor(cfg): 优化模块接口的const正确性
- 将scc_cfg_module_unsafe_get_*系列函数的module参数标记为const
- 提高接口的安全性和一致性
refactor(lir): 简化寄存器定义宏
- 移除未使用的SCC_LIR_PREG宏定义
- 简化头文件中的冗余声明
fix(hir2lir): 修复空指针常量的表示方式
- 修正NULL值的AP整数表示,正确初始化ap结构体字段
- 确保空指针在低级IR中被正确表示
refactor(mir): 重构函数元数据结构
- 为MIR函数元数据添加栈槽位和寄存器分配相关字段
- 定义新的栈槽位数据结构scc_mir_stack_slot_t
- 添加函数元数据初始化函数scc_mir_func_meta_init
refactor(x86): 改进后端代码生成
- 修正ret指令生成,使用近返回指令RET_NEAR
- 修复伪alloca指令的形式转换问题
- 改进选择函数的const正确性
- 正确初始化函数元数据结构
style(config): 添加MIR阶段配置选项
- 为MIR各个处理阶段添加配置标志
- 包括寄存器分配、栈布局和前言后记生成的输出选项
fix(parser): 改进错误处理机制
- 修正语义分析上下文变量命名
- 添加解析错误码检查,及时返回错误状态
|
2026-05-01 22:51:31 +08:00 |
|
|
|
f57ba9bd31
|
feat(ir): 添加MIR中间表示层并重构LIR相关代码
- 新增mir库模块,包含scc_mir、scc_mir_module、scc_mir_dump等组件
- 添加LIR到MIR的转换接口scc_lir2mir
- 定义MIR操作数类型和指令结构,支持虚拟寄存器、物理寄存器、立即数等
- 实现x86_64指令选择器,将LIR指令转换为MIR指令
- 重构LIR模块中函数参数命名,统一使用lir_module参数名
- 移除LIR中物理寄存器相关的代码和注释
- 更新cbuild.toml依赖配置,添加mir模块依赖
|
2026-04-26 17:38:30 +08:00 |
|