diff --git a/crates/oxide_bytecode/src/module.rs b/crates/oxide_bytecode/src/module.rs index 0241a70c..892d9552 100644 --- a/crates/oxide_bytecode/src/module.rs +++ b/crates/oxide_bytecode/src/module.rs @@ -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}")?; } diff --git a/crates/oxide_bytecode/src/opcode.rs b/crates/oxide_bytecode/src/opcode.rs index 717a10e1..9f215ab6 100644 --- a/crates/oxide_bytecode/src/opcode.rs +++ b/crates/oxide_bytecode/src/opcode.rs @@ -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, diff --git a/crates/oxide_ir/tests/contract_tests.rs b/crates/oxide_ir/tests/contract_tests.rs index d64fa92f..9d268e78 100644 --- a/crates/oxide_ir/tests/contract_tests.rs +++ b/crates/oxide_ir/tests/contract_tests.rs @@ -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); diff --git a/crates/oxide_vm/src/vm/dispatch_loop.rs b/crates/oxide_vm/src/vm/dispatch_loop.rs index 9773782c..183b8bfb 100644 --- a/crates/oxide_vm/src/vm/dispatch_loop.rs +++ b/crates/oxide_vm/src/vm/dispatch_loop.rs @@ -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")); - } } } }