perf: CONCAT_N 多操作数拼接单趟精确预分配替代逐次 ADD
新增 CONCAT_N opcode(0x93):连续加号左结合链摊平为单条指令, 字符串模式单趟精确总长预分配,消除 N-2 次中间串分配与逐次整串重拷贝。 - emit 只下钻 left 链、right 括号不拆(a+(b+c) 退化 ADD),求值序与 f64 结合性保持左结合原义;摊平上限 14 防超长链寄存器压力 - dispatch 两阶段:数值前缀逐项复用 ADD 判定序列(int 溢出升 double、 BigInt 混合 TypeError、对象 ToPrimitive 副作用序),遇字符串转入 字符串模式单趟预分配拼接(concat_n_strings) - RegAlloc graph/rewrite 登记 CONCAT_N ext 操作数(漏收集即错值); ic_helper ext_word_count 登记(clear_ic_caches 字节定位) - contract golden 显式 CONCAT_N 分支(规避 canonical_inst _ 兜底)
This commit is contained in:
@@ -556,6 +556,7 @@ mod tests {
|
||||
Inst::compound_member_ushr(Operand::Reg(1), Operand::Reg(2), Operand::Reg(3))
|
||||
}
|
||||
OpCode::TEMPLATE_STR => Inst::template_str(Operand::Reg(1), 2, 10, &[0x1234, 0x8000_0000 | 5]),
|
||||
OpCode::CONCAT_N => Inst::concat_n(Operand::Reg(1), &[2, 5, 9]),
|
||||
OpCode::GET_PRIVATE => {
|
||||
Inst::get_private(Operand::Reg(1), Operand::Reg(2), Operand::Reg(3), 7, 99)
|
||||
}
|
||||
@@ -723,6 +724,8 @@ mod tests {
|
||||
assert_contract(OpCode::HALT, None, &[0], false);
|
||||
// 模板字符串:表达式寄存器来自 ext
|
||||
assert_contract(OpCode::TEMPLATE_STR, Some(1), &[5], true);
|
||||
// 多操作数拼接:a 槽首操作数 + ext[1..] 后续操作数(SpreadArgs 解析)
|
||||
assert_contract(OpCode::CONCAT_N, Some(1), &[2, 5, 9], true);
|
||||
// 小语言特性
|
||||
assert_contract(OpCode::DELETE_PROP_STATIC, None, &[1], false);
|
||||
assert_contract(OpCode::DELETE_PROP_DYNAMIC, None, &[1, 3], false);
|
||||
|
||||
Reference in New Issue
Block a user