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