summaryrefslogtreecommitdiff
path: root/runtime/interpreter/mterp/x86/invoke.S
blob: 80f782285a5a56fbe837c8902c978fd8407a0d6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%default { "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
    movl    rSELF, %ecx
    movl    %ecx, OUT_ARG0(%esp)
    leal    OFF_FP_SHADOWFRAME(rFP), %eax
    movl    %eax, OUT_ARG1(%esp)
    movl    rPC, OUT_ARG2(%esp)
    REFRESH_INST ${opnum}
    movl    rINST, OUT_ARG3(%esp)
    call    $helper
    testl   %eax, %eax
    jz      MterpException
    REFRESH_IBASE
    ADVANCE_PC_FETCH_AND_GOTO_NEXT 3