diff --git a/irtoc_scripts/interpreter_main_loop.irt b/irtoc_scripts/interpreter_main_loop.irt index a263a90144cb0d5af58b45af799bb6deb03cc5dd..9dbf9b80ae05c88905a6af395ff4fb83767cf3e6 100644 --- a/irtoc_scripts/interpreter_main_loop.irt +++ b/irtoc_scripts/interpreter_main_loop.irt @@ -15,18 +15,18 @@ # ecma basic when "ECMA_ADD2DYN_PREF_V8" - acc := handle_ecma_add2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_add2dyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("Add2Dyn", vreg_value(op[0]).u64, acc.u64) # slow version when "ECMA_MOD2DYN_PREF_V8" acc := handle_ecma_mod2dyn(vreg_value(op[0]).any, acc.any) when "ECMA_SUB2DYN_PREF_V8" - acc := handle_ecma_sub2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_sub2dyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("Sub2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_MUL2DYN_PREF_V8" - acc := handle_ecma_mul2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_mul2dyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("Mul2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_DIV2DYN_PREF_V8" - acc := handle_ecma_div2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_div2dyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("Mul2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_EXPDYN_PREF_V8" ecma_intrinsic_setacc("ExpDynSlow", vreg_value(op[0]).u64, acc.u64) @@ -35,51 +35,51 @@ acc := handle_ecma_and2dyn(vreg_value(op[0]).any, acc.any) #ecma_intrinsic_setacc("And2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_OR2DYN_PREF_V8" - acc := handle_ecma_or2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_or2dyn(vreg_value(op[0]).any, acc) when "ECMA_XOR2DYN_PREF_V8" - acc := handle_ecma_xor2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_xor2dyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("And2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_NOTDYN_PREF_V8" acc := handle_ecma_notdyn(vreg_value(op[0]).any) when "ECMA_SHL2DYN_PREF_V8" - acc := handle_ecma_shl2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_shl2dyn(vreg_value(op[0]).any, acc) # ecma_intrinsic_setacc("Shl2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_SHR2DYN_PREF_V8" - acc := handle_ecma_shr2dyn(vreg_value(op[0]), acc) + acc := handle_ecma_shr2dyn(vreg_value(op[0]).any, acc) # ecma_intrinsic_setacc("Shr2Dyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_ASHR2DYN_PREF_V8" ecma_intrinsic_setacc("Ashr2Dyn", vreg_value(op[0]).any, acc.any) when "ECMA_STRICTEQDYN_PREF_V8" - acc := handle_ecma_stricteqdyn(vreg_value(op[0]), acc) + acc := handle_ecma_stricteqdyn(vreg_value(op[0]).any, acc) when "ECMA_STRICTNOTEQDYN_PREF_V8" - acc := handle_ecma_strictnoteqdyn(vreg_value(op[0]), acc) + acc := handle_ecma_strictnoteqdyn(vreg_value(op[0]).any, acc) when "ECMA_EQDYN_PREF_V8" acc := handle_ecma_eqdyn(vreg_value(op[0]).any, acc.any) #ecma_intrinsic_setacc("EqDyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_NOTEQDYN_PREF_V8" - acc := handle_ecma_noteqdyn(vreg_value(op[0]), acc) + acc := handle_ecma_noteqdyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("NotEqDyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_LESSDYN_PREF_V8" - acc := handle_ecma_lessdyn(vreg_value(op[0]), acc) + acc := handle_ecma_lessdyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("LessDyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_LESSEQDYN_PREF_V8" - acc := handle_ecma_lesseqdyn(vreg_value(op[0]), acc) + acc := handle_ecma_lesseqdyn(vreg_value(op[0]).any, acc) #ecma_intrinsic_setacc("LessEqDyn", vreg_value(op[0]).u64, acc.u64) when "ECMA_GREATERDYN_PREF_V8" #ecma_intrinsic_setacc("GreaterDyn", vreg_value(op[0]).u64, acc.u64) acc := handle_ecma_greaterdyn(vreg_value(op[0]).any, acc.any) when "ECMA_GREATEREQDYN_PREF_V8" - acc := handle_ecma_greatereqdyn(vreg_value(op[0]), acc) + acc := handle_ecma_greatereqdyn(vreg_value(op[0]), acc).any when "ECMA_INCDYN_PREF_V8" - acc := handle_ecma_incdyn(vreg_value(op[0])) + acc := handle_ecma_incdyn(vreg_value(op[0]).any) #ecma_intrinsic_setacc("IncDyn", vreg_value(op[0]).u64) when "ECMA_DECDYN_PREF_V8" - acc := handle_ecma_decdyn(vreg_value(op[0])) + acc := handle_ecma_decdyn(vreg_value(op[0]).any) when "ECMA_NEGDYN_PREF_V8" acc := handle_ecma_negdyn(vreg_value(op[0]).any) #ecma_intrinsic_setacc("NegDyn", vreg_value(op[0]).u64) when "ECMA_TONUMBER_PREF_V8" - acc := handle_ecma_tonumber(vreg_value(op[0])) + acc := handle_ecma_tonumber(vreg_value(op[0]).any) #ecma_intrinsic_setacc("Tonumber", vreg_value(op[0]).u64) when "ECMA_TOBOOLEAN_PREF" acc := handle_ecma_toboolean(acc.any) @@ -187,33 +187,33 @@ when "ECMA_DEFINECLASSWITHBUFFER_PREF_ID16_IMM16_V8_V8" ecma_intrinsic_setacc("DefineClassWithBuffer", as_id(op[0]), as_imm(op[1]), vreg_value(op[2]).any, vreg_value(op[3]).any) when "ECMA_LOADCLASSCOMPUTEDINSTANCEFIELDS_PREF_V8" - ecma_intrinsic_setacc("LoadClassComputedInstanceFields", vreg_value(op[0])) + ecma_intrinsic_setacc("LoadClassComputedInstanceFields", vreg_value(op[0]).any) when "ECMA_SETCLASSCOMPUTEDFIELDS_PREF_V8_V8" - ecma_intrinsic_invoke("SetClassComputedFields", vreg_value(op[0]), vreg_value(op[1])) + ecma_intrinsic_invoke("SetClassComputedFields", vreg_value(op[0]).any, vreg_value(op[1]).any) when "ECMA_CLASSFIELDADD_PREF_V8_V8" - ecma_intrinsic_setacc("ClassFieldAdd", vreg_value(op[0]), vreg_value(op[1]), acc.any) + ecma_intrinsic_setacc("ClassFieldAdd", vreg_value(op[0]).any, vreg_value(op[1]).any, acc.any) when "ECMA_DEFINECLASSPRIVATEFIELDS_PREF_ID16_V8" - ecma_intrinsic_invoke("DefineClassPrivateFields", as_id(op[0]), vreg_value(op[1]), acc.any) + ecma_intrinsic_invoke("DefineClassPrivateFields", as_id(op[0]), vreg_value(op[1]).any, acc.any) when "ECMA_CLASSPRIVATEMETHODORACCESSORADD_PREF_V8_V8" - ecma_intrinsic_setacc("ClassPrivateMethodOrAccessorAdd", vreg_value(op[0]), vreg_value(op[1])) + ecma_intrinsic_setacc("ClassPrivateMethodOrAccessorAdd", vreg_value(op[0]).any, vreg_value(op[1]).any) when "ECMA_CLASSPRIVATEFIELDADD_PREF_ID32_V8_V8" - ecma_intrinsic_setacc("ClassPrivateFieldAdd", as_id(op[0]), vreg_value(op[1]), vreg_value(op[2]), acc.any) + ecma_intrinsic_setacc("ClassPrivateFieldAdd", as_id(op[0]), vreg_value(op[1]).any, vreg_value(op[2]).any, acc.any) when "ECMA_CLASSPRIVATEFIELDGET_PREF_ID32_V8_V8" - ecma_intrinsic_setacc("ClassPrivateFieldGet", as_id(op[0]), vreg_value(op[1]), vreg_value(op[2])) + ecma_intrinsic_setacc("ClassPrivateFieldGet", as_id(op[0]), vreg_value(op[1]).any, vreg_value(op[2]).any) when "ECMA_CLASSPRIVATEFIELDSET_PREF_ID32_V8_V8" - ecma_intrinsic_setacc("ClassPrivateFieldSet", as_id(op[0]), vreg_value(op[1]), vreg_value(op[2]), acc.any) + ecma_intrinsic_setacc("ClassPrivateFieldSet", as_id(op[0]), vreg_value(op[1]).any, vreg_value(op[2]).any, acc.any) when "ECMA_CLASSPRIVATEFIELDIN_PREF_ID32_V8" - ecma_intrinsic_setacc("ClassPrivateFieldIn", as_id(op[0]), vreg_value(op[1]), acc.any) + ecma_intrinsic_setacc("ClassPrivateFieldIn", as_id(op[0]), vreg_value(op[1]).any, acc.any) #eval when "ECMA_LDEVALBINDINGS_PREF_ID16" ecma_intrinsic_setacc("LdEvalBindings", as_id(op[0])) when "ECMA_DIRECTEVAL_PREF_IMM32_V8_V8" - ecma_intrinsic_setacc("DirectEval", as_imm(op[0]), vreg_value(op[1]), vreg_value(op[2])) + ecma_intrinsic_setacc("DirectEval", as_imm(op[0]), vreg_value(op[1]).any, vreg_value(op[2]).any) when "ECMA_LDEVALVAR_PREF_ID32" ecma_intrinsic_setacc("LdEvalVar", as_id(op[0]), acc.any) when "ECMA_STEVALVAR_PREF_ID32_V8" - ecma_intrinsic_setacc("StEvalVar", as_id(op[0]), vreg_value(op[1]), acc.any) + ecma_intrinsic_setacc("StEvalVar", as_id(op[0]), vreg_value(op[1]).any, acc.any) # ecma frames when "ECMA_CALL0DYN_PREF_NONE" @@ -240,7 +240,7 @@ method_ptr := LoadI(%frame).Imm(Constants::FRAME_METHOD_OFFSET).ptr num_vregs := u32toword(read_uleb(method_file_data(method_ptr))) new_target_idx := AddI(num_vregs).Imm(1).word - new_target := get_value(frame_vreg_ptr(%frame, new_target_idx)) + new_target := get_value(frame_vreg_ptr(%frame, new_target_idx)).i64 ecma_intrinsic_setacc("SuperCallSpread", vreg_value(op[0]).any, new_target, acc.any) when "ECMA_LDLEXENVDYN_PREF_NONE" acc := handle_ecma_ldlexenvdyn() @@ -309,7 +309,7 @@ method_ptr := LoadI(%frame).Imm(Constants::FRAME_METHOD_OFFSET).ptr num_vregs := u32toword(read_uleb(method_file_data(method_ptr))) new_target_idx := AddI(num_vregs).Imm(1).word - new_target := get_value(frame_vreg_ptr(%frame, new_target_idx)) + new_target := get_value(frame_vreg_ptr(%frame, new_target_idx)).i64 ecma_intrinsic_setacc("SuperCall", as_imm(op[0]), vreg_ptr(op[1]), new_target, acc.any) # ecma load/stores by index diff --git a/irtoc_scripts/new_obj_dyn.irt b/irtoc_scripts/new_obj_dyn.irt index 7061f554e121548a891d5226914bef8b04c5d0a8..649b6e68cddcd47d4c6f777d03df332f636884d8 100644 --- a/irtoc_scripts/new_obj_dyn.irt +++ b/irtoc_scripts/new_obj_dyn.irt @@ -47,8 +47,8 @@ function("AllocDynObjectStub", # # Check if ctor's method is native # - method := LoadI(anytoheapobj(ctor)).Imm(Constants::JS_FUNCTION_METHOD_OFFSET).ptr - method_access_flags := LoadI(method).Imm(Constants::METHOD_ACCESS_FLAGS_OFFSET).Volatile.u32 + local_method_ptr := LoadI(anytoheapobj(ctor)).Imm(Constants::JS_FUNCTION_METHOD_OFFSET).ptr + method_access_flags := LoadI(local_method_ptr).Imm(Constants::METHOD_ACCESS_FLAGS_OFFSET).Volatile.u32 IfImm(AndI(method_access_flags).Imm("ACC_NATIVE").u32).Imm(0).CC(:CC_NE) { Goto(:NativeCall) }