mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
refactor: 删除占位 opcode 表项与派发兜底臂
This commit is contained in:
@@ -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}")?;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user