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