feat(ir2amd64): 支持函数返回值处理
- 在RET节点中添加对返回值的处理逻辑 - 解析返回值位置并加载到RAX寄存器 refactor(pe_builder): 禁用PE构建器中的日志输出 - 定义空的LOG_INFO宏以禁用调试信息 - 避免在PE构建过程中产生不必要的日志输出
This commit is contained in:
@@ -156,6 +156,10 @@ static void parse_node(scc_ir2mcode_ctx_t *ctx, scc_ir_bblock_ref_t node_ref,
|
|||||||
LOG_ERROR("Unsupported node type: %d", node->tag);
|
LOG_ERROR("Unsupported node type: %d", node->tag);
|
||||||
break;
|
break;
|
||||||
case SCC_IR_NODE_RET: ///< 函数返回
|
case SCC_IR_NODE_RET: ///< 函数返回
|
||||||
|
if (node->data.ret.ret_val) {
|
||||||
|
scc_reg_loc_t *loc = parse_location(ctx, node->data.ret.ret_val);
|
||||||
|
load_value_to_reg(&ctx->mcode, loc, SCC_AMD64_RAX);
|
||||||
|
}
|
||||||
scc_mcode_amd64_mov_r64_r64(&ctx->mcode, SCC_AMD64_RSP, SCC_AMD64_RBP);
|
scc_mcode_amd64_mov_r64_r64(&ctx->mcode, SCC_AMD64_RSP, SCC_AMD64_RBP);
|
||||||
scc_mcode_amd64_pop_r64(&ctx->mcode, SCC_AMD64_RBP);
|
scc_mcode_amd64_pop_r64(&ctx->mcode, SCC_AMD64_RBP);
|
||||||
scc_mcode_amd64_ret(&ctx->mcode);
|
scc_mcode_amd64_ret(&ctx->mcode);
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#include <scc_pe_builder.h>
|
#include <scc_pe_builder.h>
|
||||||
|
|
||||||
|
#ifdef LOG_INFO
|
||||||
|
#undef LOG_INFO
|
||||||
|
#endif
|
||||||
|
#define LOG_INFO(...)
|
||||||
|
|
||||||
#define reserve_align(offset, size) ((offset) + ((size) - 1)) & ~((size) - 1)
|
#define reserve_align(offset, size) ((offset) + ((size) - 1)) & ~((size) - 1)
|
||||||
|
|
||||||
void scc_pe_builder_init(scc_pe_builder_t *builder, bool is_64,
|
void scc_pe_builder_init(scc_pe_builder_t *builder, bool is_64,
|
||||||
|
|||||||
Reference in New Issue
Block a user