步骤C:FB 函数化——共享体(r1 实例指针 + LOAD_PTR/STORE_PTR 基址寻址 + CALL),退役内联/fb_temp,嵌套 r1 保护
This commit is contained in:
@@ -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);
|
||||
// 指令序列:LOAD(I 读)、STORE_OFF(FB 输入写)、LOAD_OFF(FB 输出读)、STORE(Q 写)
|
||||
CHECK(v.max_stack() >= (12 + 13 * 8) + (12 + 10 * 8)); // fn0 共享体 13 + MAIN 10
|
||||
// MAIN(fn 1):LOAD(I 读)、STORE_OFF(实参写)、LOADK r1 + CALL(共享体)、LOAD_OFF(输出读)、STORE(Q 写)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user