12.11 闭环:二十用例点亮 + 单步观察。
- cases_test:tests/cases/01..20 逐一跑完整管线(解析→链接→类型→码→VM 周期), 按 EXPECTED.md 期望断言:13 正例运行通过(含双周期可重复)、06 CycleLimit、6 负例报错类别 - BytecodeExecutor --step:采样 I → 逐指令打印 pc/fn/反汇编 + 执行后非零寄存器 → I/Q - Machine 补 header()/ended()/nregs()/cur_instr() 观察接口 - ctest 11/11(cases_all 20 用例点亮);line1 回放 0/1 组合 Q 正确、单步 I=[0 1]→Q=[1]
This commit is contained in:
@@ -78,6 +78,7 @@ bool Machine::step() {
|
||||
}
|
||||
|
||||
Fault Machine::fault() const { return fault_; }
|
||||
bool Machine::ended() const { return ended_; }
|
||||
const isa::ImageHeader& Machine::header() const { return image_.header(); }
|
||||
uint32_t Machine::pc() const { return pc_; }
|
||||
uint32_t Machine::fn_id() const { return cur_frame().fn_id; }
|
||||
@@ -88,6 +89,19 @@ const uint8_t* Machine::data() const { return data_.data(); }
|
||||
size_t Machine::data_len() const { return data_.size(); }
|
||||
int64_t Machine::reg(uint8_t i) const { return cur_frame().regs[i]; }
|
||||
|
||||
uint32_t Machine::nregs() const {
|
||||
return static_cast<uint32_t>(cur_frame().regs.size());
|
||||
}
|
||||
|
||||
isa::Instr Machine::cur_instr() const {
|
||||
const isa::FuncRow row = image_.func_row(cur_frame().fn_id);
|
||||
const uint8_t* base = image_.code_bytes() + row.code_offset;
|
||||
if (pc_ >= row.code_len) {
|
||||
return isa::pack(isa::Op::RET, 0, 0, 0);
|
||||
}
|
||||
return reinterpret_cast<const uint32_t*>(base)[pc_];
|
||||
}
|
||||
|
||||
Machine::Frame& Machine::cur_frame() { return frames_.back(); }
|
||||
const Machine::Frame& Machine::cur_frame() const { return frames_.back(); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user