diff --git a/irtoc_scripts/interpreter_handlers.irt b/irtoc_scripts/interpreter_handlers.irt index 88d02a42f454a0708d8f26b57128fc2919647881..261ce4a944465bc610b86633c9b9fd0502cf8daf 100644 --- a/irtoc_scripts/interpreter_handlers.irt +++ b/irtoc_scripts/interpreter_handlers.irt @@ -30,6 +30,9 @@ macro(:ecma_intrinsic_check_setacc) do |sym, size, *args| pc_inc := advance_pc_imm(pc, size) } frame := Phi(frame_eh, frame).ptr + if Options.arm64? + moffset := Phi(moffset_eh, moffset).word + end pc := Phi(pc_eh, pc_inc).ptr acc := Phi(acc_eh, acc.u64).u64 end diff --git a/irtoc_scripts/interpreter_main_loop.irt b/irtoc_scripts/interpreter_main_loop.irt index d449202ecf6eeb474cc1b42c7d4376314017c723..a263a90144cb0d5af58b45af799bb6deb03cc5dd 100644 --- a/irtoc_scripts/interpreter_main_loop.irt +++ b/irtoc_scripts/interpreter_main_loop.irt @@ -407,26 +407,41 @@ ecma_intrinsic_setacc("ThrowDyn", acc.u64) pc := find_catch_block() frame := frame_eh + if Options.arm64? + moffset := moffset_eh + end acc := acc_eh when "ECMA_THROWCONSTASSIGNMENT_PREF_ID32" ecma_intrinsic_invoke("ThrowConstAssignment", as_id(op[0])) pc := find_catch_block() frame := frame_eh + if Options.arm64? + moffset := moffset_eh + end acc := acc_eh when "ECMA_THROWPATTERNNONCOERCIBLE_PREF_NONE" ecma_intrinsic_invoke("ThrowPatternNonCoercible") pc := find_catch_block() frame := frame_eh + if Options.arm64? + moffset := moffset_eh + end acc := acc_eh when "ECMA_THROWTHROWNOTEXISTS_PREF_NONE" ecma_intrinsic_invoke("ThrowThrowNotExists") pc := find_catch_block() frame := frame_eh + if Options.arm64? + moffset := moffset_eh + end acc := acc_eh when "ECMA_THROWTDZ_PREF_ID32" ecma_intrinsic_invoke("ThrowTdz", as_id(op[0])) pc := find_catch_block() frame := frame_eh + if Options.arm64? + moffset := moffset_eh + end acc := acc_eh when "ECMA_THROWIFNOTOBJECT_PREF_NONE" ecma_intrinsic_invoke("ThrowIfNotObject", acc.any)