This commit is contained in:
2024-08-28 23:33:29 +00:00
parent 88c7ae3fab
commit bd9392ec83
4 changed files with 66 additions and 13 deletions

View File

@ -430,7 +430,7 @@ void IRBuilder::ActuralVisit(NewArrayExpr_ASTNode *node) {
}
auto dim_info = std::make_shared<AllocaAction>();
std::string dim_info_var = "%.var.tmp." + std::to_string(tmp_var_counter++);
std::string dim_info_var = "%.var.local.tmp." + std::to_string(tmp_var_counter++);
cur_alloca_block->actions.push_back(dim_info);
dim_info->num = dims_with_size;
dim_info->name_full = dim_info_var;

View File

@ -52,10 +52,19 @@ void GenerateNaiveASM(std::ostream &os, std::shared_ptr<ModuleItem> prog) {
riscv->funcs.push_back(func_asm);
func_asm->full_label = func_def->func_name_raw;
FuncLayout &layout = func_layouts[func_def->func_name_raw];
func_asm->code_lines.push_back("addi sp, sp, -" + std::to_string(layout.total_frame_size));
func_asm->code_lines.push_back("sw ra, " + std::to_string(layout.total_frame_size - 4) + "(sp)");
func_asm->code_lines.push_back("sw s0, " + std::to_string(layout.total_frame_size - 8) + "(sp)");
func_asm->code_lines.push_back("addi s0, sp, " + std::to_string(layout.total_frame_size));
if (layout.total_frame_size < 2048) {
func_asm->code_lines.push_back("addi sp, sp, -" + std::to_string(layout.total_frame_size));
func_asm->code_lines.push_back("sw ra, " + std::to_string(layout.total_frame_size - 4) + "(sp)");
func_asm->code_lines.push_back("sw s0, " + std::to_string(layout.total_frame_size - 8) + "(sp)");
func_asm->code_lines.push_back("addi s0, sp, " + std::to_string(layout.total_frame_size));
} else {
func_asm->code_lines.push_back("li t0, " + std::to_string(layout.total_frame_size));
func_asm->code_lines.push_back("sub sp, sp, t0");
func_asm->code_lines.push_back("add t0, t0, sp");
func_asm->code_lines.push_back("sw ra, -4(t0)");
func_asm->code_lines.push_back("sw s0, -8(t0)");
func_asm->code_lines.push_back("mv s0, t0");
}
if (func_def->init_block) {
func_asm->code_lines.push_back(".entrylabel." + func_def->init_block->label_full + ":");
for (auto act : func_def->init_block->actions) {