refactor: 删除占位 opcode 表项与派发兜底臂

This commit is contained in:
2026-09-26 08:44:36 +00:00
parent 811e9e928a
commit d0a95309ba
4 changed files with 2 additions and 46 deletions
-4
View File
@@ -172,10 +172,6 @@ impl fmt::Display for CompiledModule {
OpCode::JMP | OpCode::JMP_IF_FALSE | OpCode::JMP_IF_TRUE => {
write!(f, " r{rd}, {offset:+}", offset = opcode::offset16(instr))?;
}
OpCode::SWITCH_TABLE => {
let n_cases = rd as u16 | ((b as u16) << 8);
write!(f, " r{disc_reg}={a}, {n_cases} cases", disc_reg = a)?;
}
OpCode::RETURN | OpCode::HALT | OpCode::NOP => {
write!(f, " r{rd}")?;
}
+1 -21
View File
@@ -297,9 +297,6 @@ define_opcodes! {
FOR_IN_DONE = 0x2B => "FOR_IN_DONE",
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
SWITCH_TABLE = 0x2C => "SWITCH_TABLE", // 占位:emit 不产,按 catch-all 保守 def
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
FOR_IN_CLEANUP = 0x2D => "FOR_IN_CLEANUP",
def = None, uses = [],
pure = false, jump = false, term = false, ic = false,
@@ -613,24 +610,7 @@ define_opcodes! {
def = Some(SlotSpec::Slot(Slot::A)), uses = [SlotSpec::Slot(Slot::Rd), SlotSpec::Slot(Slot::A), SlotSpec::Slot(Slot::B)],
pure = false, jump = false, term = false, ic = true,
// ── Profiling — 占位符 (0x6A-0x6F) ──
PROFILE_SHAPE = 0x6A => "PROFILE_SHAPE", // 占位:catch-all 保守 def
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
PROFILE_BRANCH = 0x6B => "PROFILE_BRANCH",
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
PROFILE_CALL = 0x6C => "PROFILE_CALL",
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
// ── 并行 — 占位符 (0x70-0x75) ──
FORK = 0x70 => "FORK",
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
JOIN = 0x71 => "JOIN",
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [],
pure = false, jump = false, term = false, ic = false,
// ── 私有 (0x72-0x75) ──
GET_PRIVATE = 0x72 => "GET_PRIVATE", // ext[0]=brand_reg,非 0 才产生 use
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [SlotSpec::Slot(Slot::A), SlotSpec::Slot(Slot::B), SlotSpec::BrandReg],
pure = false, jump = false, term = false, ic = false,
-16
View File
@@ -337,8 +337,6 @@ fn impure_ops_are_not_deletable() {
// RegAlloc 辅助:SPILL/UNSPILL 有副作用(删 SPILL 后 UNSPILL 读陈旧值)
assert!(!Inst::inst_spill(Operand::Reg(5), 42).is_pure(&f));
assert!(!Inst::inst_unspill(Operand::Reg(9), 42).is_pure(&f));
// 占位 opcode 防御性有副作用
assert!(!Inst::new(OpCode::SWITCH_TABLE, Operand::None, Operand::None, Operand::None).is_pure(&f));
}
#[test]
@@ -549,20 +547,6 @@ fn opcode_semantics_golden_table() {
&[1],
false,
);
// 占位 opcode:def=rd 保守,不可删
assert_group(
&[
OpCode::SWITCH_TABLE,
OpCode::PROFILE_SHAPE,
OpCode::PROFILE_BRANCH,
OpCode::PROFILE_CALL,
OpCode::FORK,
OpCode::JOIN,
],
Some(1),
&[],
false,
);
// 异常 / 返回 / 停机
assert_contract(OpCode::THROW, None, &[1], false);
assert_contract(OpCode::RETURN, None, &[1], false);
+1 -5
View File
@@ -1,4 +1,4 @@
//! dispatch 主循环:逐指令解码与 156 个 OpCode 臂分派、执行期 GC 安全点、
//! dispatch 主循环:逐指令解码与 OpCode 臂分派、执行期 GC 安全点、
//! 步数/分配上限采样与二元运算宏 `binary_arith!`。
use num_traits::Zero;
@@ -835,10 +835,6 @@ impl Vm {
self.profiling.set_instruction_count(steps);
return Ok(JsValue::undefined());
}
_ => {
return Err(format!("opcode {op} not yet implemented"));
}
}
}
}