1 %def invoke(helper="UndefinedInvokeHandler"): 2 /* 3 * Generic invoke handler wrapper. 4 */ 5 /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6 /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7 .extern $helper 8 EXPORT_PC() 9 move a0, rSELF 10 addu a1, rFP, OFF_FP_SHADOWFRAME 11 move a2, rPC 12 move a3, rINST 13 JAL($helper) 14 beqz v0, MterpException 15 FETCH_ADVANCE_INST(3) 16 JAL(MterpShouldSwitchInterpreters) 17 bnez v0, MterpFallback 18 GET_INST_OPCODE(t0) 19 GOTO_OPCODE(t0) 20 21 %def invoke_polymorphic(helper="UndefinedInvokeHandler"): 22 /* 23 * invoke-polymorphic handler wrapper. 24 */ 25 /* op {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH */ 26 /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB, proto@HHHH */ 27 .extern $helper 28 EXPORT_PC() 29 move a0, rSELF 30 addu a1, rFP, OFF_FP_SHADOWFRAME 31 move a2, rPC 32 move a3, rINST 33 JAL($helper) 34 beqz v0, MterpException 35 FETCH_ADVANCE_INST(4) 36 JAL(MterpShouldSwitchInterpreters) 37 bnez v0, MterpFallback 38 GET_INST_OPCODE(t0) 39 GOTO_OPCODE(t0) 40 41 %def op_invoke_custom(): 42 % invoke(helper="MterpInvokeCustom") 43 44 %def op_invoke_custom_range(): 45 % invoke(helper="MterpInvokeCustomRange") 46 47 %def op_invoke_direct(): 48 % invoke(helper="MterpInvokeDirect") 49 50 %def op_invoke_direct_range(): 51 % invoke(helper="MterpInvokeDirectRange") 52 53 %def op_invoke_interface(): 54 % invoke(helper="MterpInvokeInterface") 55 56 %def op_invoke_interface_range(): 57 % invoke(helper="MterpInvokeInterfaceRange") 58 59 %def op_invoke_polymorphic(): 60 % invoke_polymorphic(helper="MterpInvokePolymorphic") 61 62 %def op_invoke_polymorphic_range(): 63 % invoke_polymorphic(helper="MterpInvokePolymorphicRange") 64 65 %def op_invoke_static(): 66 % invoke(helper="MterpInvokeStatic") 67 68 %def op_invoke_static_range(): 69 % invoke(helper="MterpInvokeStaticRange") 70 71 %def op_invoke_super(): 72 % invoke(helper="MterpInvokeSuper") 73 74 %def op_invoke_super_range(): 75 % invoke(helper="MterpInvokeSuperRange") 76 77 %def op_invoke_virtual(): 78 % invoke(helper="MterpInvokeVirtual") 79 80 %def op_invoke_virtual_quick(): 81 % invoke(helper="MterpInvokeVirtualQuick") 82 83 %def op_invoke_virtual_range(): 84 % invoke(helper="MterpInvokeVirtualRange") 85 86 %def op_invoke_virtual_range_quick(): 87 % invoke(helper="MterpInvokeVirtualQuickRange") 88