Home | History | Annotate | Download | only in mips
      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