步骤C:FB 函数化——共享体(r1 实例指针 + LOAD_PTR/STORE_PTR 基址寻址 + CALL),退役内联/fb_temp,嵌套 r1 保护

This commit is contained in:
2026-08-27 09:19:58 +08:00
parent f32a8c6aa6
commit c19e306512
3 changed files with 129 additions and 83 deletions
+9 -3
View File
@@ -237,14 +237,20 @@ static bool test_line1() {
CHECK(v.n_globals() == 4); // EmergencyStop/I0_0/I0_1/Q0_0
CHECK(v.n_slots() == 5); // 4 全局 + 1 实例(字段走偏移,实例占 1 条)
CHECK(v.values_size() == 7); // 全局 4×1B + starter 3×1B
CHECK(v.max_stack() >= 12 + 13 * 8);
// 指令序列LOADI 读)、STORE_OFFFB 输入写)、LOAD_OFFFB 输出读)、STOREQ 写)
CHECK(v.max_stack() >= (12 + 13 * 8) + (12 + 10 * 8)); // fn0 共享体 13 + MAIN 10
// MAINfn 1LOADI 读)、STORE_OFF实参写)、LOADK r1 + CALL(共享体)、LOAD_OFF(输出读)、STOREQ 写)
const std::vector<std::string> lines = disasm_lines(cfg_global(), v, 1);
CHECK(has_line(lines, "LOAD.U8"));
CHECK(has_line(lines, "STORE_OFF.U8"));
CHECK(has_line(lines, "LOAD_OFF.U8"));
CHECK(has_line(lines, "STORE.U8"));
CHECK(has_line(lines, "JF r"));
CHECK(has_line(lines, "LOADK.U32 r1"));
CHECK(has_line(lines, "CALL 0"));
// MotorStarter 共享体(fn 0):LOAD_PTR/STORE_PTR + 短路 JF
const std::vector<std::string> fb = disasm_lines(cfg_global(), v, 0);
CHECK(has_line(fb, "LOAD_PTR.U8"));
CHECK(has_line(fb, "STORE_PTR.U8"));
CHECK(has_line(fb, "JF r"));
return true;
}