diff --git a/src/backend/RISCv64/RISCv64Backend.cpp b/src/backend/RISCv64/RISCv64Backend.cpp index e45248f..7e08102 100644 --- a/src/backend/RISCv64/RISCv64Backend.cpp +++ b/src/backend/RISCv64/RISCv64Backend.cpp @@ -139,7 +139,29 @@ std::string RISCv64CodeGen::module_gen() { ss << ".type " << global->getName() << ", @object\n"; ss << ".size " << global->getName() << ", " << total_size << "\n"; ss << global->getName() << ":\n"; - printInitializer(ss, global->getInitValues()); + bool is_all_zeros = true; + const auto& init_values = global->getInitValues(); + if (init_values.getValues().empty()) { + is_all_zeros = true; + } else { + for (auto val : init_values.getValues()) { + if (auto const_val = dynamic_cast(val)) { + if (!const_val->isZero()) { + is_all_zeros = false; + break; + } + } else { + is_all_zeros = false; + break; + } + } + } + if (is_all_zeros) { + ss << " .zero " << total_size << "\n"; + } else { + // 对于有非零初始值的变量,保持原有的打印逻辑。 + printInitializer(ss, global->getInitValues()); + } } // b. 处理全局常量 (ConstantVariable)