阶段2-3:Codec V2 化(变长指令字编解码 + 配置驱动 disasm 类型后缀)

- instr_len 前缀定长(1/01/001/0001 → 4/8/16/32B)
- prefix_of/op_of/func_of + 全部位号 get/set(rd/rs1/rs2/imm32/slot32/off32/
  fn_id32/fb_id16/cal_slot32/off32_hi/imm64)
- set_byte0 按前缀写(11/10/011/010xxx 形态位/0010/0011/0001)
- disasm:find_op_by_key 查配置;full/float/dst 类显示 .TYPE 后缀
  (U8/I8/.../F64);CAL 打印 fb 名(CAL.TON s5);未知输出 ??? 0x hex
- main.cpp --disasm 调用适配(TODO V2 待 Stb 重写)
- 状态:编译仅剩 Codegen.cpp(84 处 V1 残留,下一步阶段2-5 重写)
This commit is contained in:
2026-08-25 20:08:37 +08:00
parent a4335693d4
commit 246fe09646
4 changed files with 387 additions and 96 deletions
+3 -3
View File
@@ -31,16 +31,16 @@ static int g_checks = 0;
// ---- 写临时 toml ----
static std::string write_tmp(const char* name, const char* content) {
static std::string write_tmp(const char* name, const std::string& content) {
const std::filesystem::path dir = std::filesystem::temp_directory_path();
const std::filesystem::path path = dir / name;
std::FILE* f = std::fopen(path.string().c_str(), "w");
std::fputs(content, f);
std::fputs(content.c_str(), f);
std::fclose(f);
return path.string();
}
static bool expect_load_err(const char* name, const char* content, const char* keyword) {
static bool expect_load_err(const char* name, const std::string& content, const char* keyword) {
const std::string path = write_tmp(name, content);
compiler::MachineConfig cfg;
std::string err;