From 4e5d98aa8a5de64b0f035cc80820c6013aff0ebd Mon Sep 17 00:00:00 2001 From: Anna Antipina Date: Fri, 17 Feb 2023 16:48:41 +0300 Subject: [PATCH] Implement register allocation for mirror frame Signed-off-by: Anna Antipina --- irtoc_scripts/interpreter_handlers.irt | 3 +++ irtoc_scripts/interpreter_main_loop.irt | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/irtoc_scripts/interpreter_handlers.irt b/irtoc_scripts/interpreter_handlers.irt index 88d02a42f..261ce4a94 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 d449202ec..a263a9014 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) -- Gitee