mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
feat: 二元幂运算 opcode 支持 number 与 BigInt
- 新增 EXP opcode(0x94)与 emit 层 Exponential 分支,二元 a ** b 不再 compile error - dispatch_exp 与 dispatch_compound_exp 共享 exp_result:IEEE-754 powf 快路径 + BigInt 幂(负/超 u32 指数 RangeError)+ 混合 BigInt/Number TypeError - 复合 **= 补 BigInt 语义(此前走 f64 近似),与二元 ** 行为一致
This commit is contained in:
@@ -193,6 +193,10 @@ define_opcodes! {
|
||||
COMPOUND_EXP = 0x0B => "COMPOUND_EXP",
|
||||
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [SlotSpec::Slot(Slot::Rd), SlotSpec::Slot(Slot::A)],
|
||||
pure = false, jump = false, term = false, ic = false,
|
||||
// 二元幂运算 `a ** b`(三寄存器,与 SUB/MUL 同族;0x00-0x0F 已满,值用空闲槽 0x94)。
|
||||
EXP = 0x94 => "EXP",
|
||||
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [SlotSpec::Slot(Slot::A), SlotSpec::Slot(Slot::B)],
|
||||
pure = true, jump = false, term = false, ic = false,
|
||||
MOV = 0x0C => "MOV", // rd=dst, a=src(寄存器复制,区间拆分搬值)
|
||||
def = Some(SlotSpec::Slot(Slot::Rd)), uses = [SlotSpec::Slot(Slot::A)],
|
||||
pure = true, jump = false, term = false, ic = false,
|
||||
|
||||
Reference in New Issue
Block a user