Home | History | Annotate | Download | only in arm64
      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     mov     x0, xSELF
     10     add     x1, xFP, #OFF_FP_SHADOWFRAME
     11     mov     x2, xPC
     12     mov     x3, xINST
     13     bl      $helper
     14     cbz     w0, MterpException
     15     FETCH_ADVANCE_INST 3
     16     ldr     w0, [xSELF, #THREAD_USE_MTERP_OFFSET]
     17     cbz     w0, MterpFallback
     18     GET_INST_OPCODE ip
     19     GOTO_OPCODE ip
     20 
     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     EXPORT_PC
     30     mov     x0, xSELF
     31     add     x1, xFP, #OFF_FP_SHADOWFRAME
     32     mov     x2, xPC
     33     mov     x3, xINST
     34     bl      $helper
     35     cbz     w0, MterpException
     36     FETCH_ADVANCE_INST 4
     37     ldr     w0, [xSELF, #THREAD_USE_MTERP_OFFSET]
     38     cbz     w0, MterpFallback
     39     GET_INST_OPCODE ip
     40     GOTO_OPCODE ip
     41 
     42 %def op_invoke_custom():
     43 %  invoke(helper="MterpInvokeCustom")
     44 
     45 %def op_invoke_custom_range():
     46 %  invoke(helper="MterpInvokeCustomRange")
     47 
     48 %def op_invoke_direct():
     49 %  invoke(helper="MterpInvokeDirect")
     50 
     51 %def op_invoke_direct_range():
     52 %  invoke(helper="MterpInvokeDirectRange")
     53 
     54 %def op_invoke_interface():
     55 %  invoke(helper="MterpInvokeInterface")
     56     /*
     57      * Handle an interface method call.
     58      *
     59      * for: invoke-interface, invoke-interface/range
     60      */
     61     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
     62     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
     63 
     64 %def op_invoke_interface_range():
     65 %  invoke(helper="MterpInvokeInterfaceRange")
     66 
     67 %def op_invoke_polymorphic():
     68 %  invoke_polymorphic(helper="MterpInvokePolymorphic")
     69 
     70 %def op_invoke_polymorphic_range():
     71 %  invoke_polymorphic(helper="MterpInvokePolymorphicRange")
     72 
     73 %def op_invoke_static():
     74 %  invoke(helper="MterpInvokeStatic")
     75 
     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