Home | History | Annotate | Download | only in mips64
      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     .extern MterpShouldSwitchInterpreters
      9     EXPORT_PC
     10     move    a0, rSELF
     11     daddu   a1, rFP, OFF_FP_SHADOWFRAME
     12     move    a2, rPC
     13     move    a3, rINST
     14     jal     $helper
     15     beqzc   v0, MterpException
     16     FETCH_ADVANCE_INST 3
     17     jal     MterpShouldSwitchInterpreters
     18     bnezc   v0, MterpFallback
     19     GET_INST_OPCODE v0
     20     GOTO_OPCODE v0
     21 
     22 %def invoke_polymorphic(helper="UndefinedInvokeHandler"):
     23     /*
     24      * invoke-polymorphic handler wrapper.
     25      */
     26     /* op {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH */
     27     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB, proto@HHHH */
     28     .extern $helper
     29     .extern MterpShouldSwitchInterpreters
     30     EXPORT_PC
     31     move    a0, rSELF
     32     daddu   a1, rFP, OFF_FP_SHADOWFRAME
     33     move    a2, rPC
     34     move    a3, rINST
     35     jal     $helper
     36     beqzc   v0, MterpException
     37     FETCH_ADVANCE_INST 4
     38     jal     MterpShouldSwitchInterpreters
     39     bnezc   v0, MterpFallback
     40     GET_INST_OPCODE v0
     41     GOTO_OPCODE v0
     42 
     43 %def op_invoke_custom():
     44 %  invoke(helper="MterpInvokeCustom")
     45 
     46 %def op_invoke_custom_range():
     47 %  invoke(helper="MterpInvokeCustomRange")
     48 
     49 %def op_invoke_direct():
     50 %  invoke(helper="MterpInvokeDirect")
     51 
     52 %def op_invoke_direct_range():
     53 %  invoke(helper="MterpInvokeDirectRange")
     54 
     55 %def op_invoke_interface():
     56 %  invoke(helper="MterpInvokeInterface")
     57     /*
     58      * Handle an interface method call.
     59      *
     60      * for: invoke-interface, invoke-interface/range
     61      */
     62     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
     63     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
     64 
     65 %def op_invoke_interface_range():
     66 %  invoke(helper="MterpInvokeInterfaceRange")
     67 
     68 %def op_invoke_polymorphic():
     69 %  invoke_polymorphic(helper="MterpInvokePolymorphic")
     70 
     71 %def op_invoke_polymorphic_range():
     72 %  invoke_polymorphic(helper="MterpInvokePolymorphicRange")
     73 
     74 %def op_invoke_static():
     75 %  invoke(helper="MterpInvokeStatic")
     76 
     77 %def op_invoke_static_range():
     78 %  invoke(helper="MterpInvokeStaticRange")
     79 
     80 %def op_invoke_super():
     81 %  invoke(helper="MterpInvokeSuper")
     82     /*
     83      * Handle a "super" method call.
     84      *
     85      * for: invoke-super, invoke-super/range
     86      */
     87     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
     88     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
     89 
     90 %def op_invoke_super_range():
     91 %  invoke(helper="MterpInvokeSuperRange")
     92 
     93 %def op_invoke_virtual():
     94 %  invoke(helper="MterpInvokeVirtual")
     95     /*
     96      * Handle a virtual method call.
     97      *
     98      * for: invoke-virtual, invoke-virtual/range
     99      */
    100     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
    101     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
    102 
    103 %def op_invoke_virtual_quick():
    104 %  invoke(helper="MterpInvokeVirtualQuick")
    105 
    106 %def op_invoke_virtual_range():
    107 %  invoke(helper="MterpInvokeVirtualRange")
    108 
    109 %def op_invoke_virtual_range_quick():
    110 %  invoke(helper="MterpInvokeVirtualQuickRange")
    111