25 lines
680 B
ArmAsm
25 lines
680 B
ArmAsm
%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 SYMBOL($helper)
|
|
testb %al, %al
|
|
jz MterpException
|
|
ADVANCE_PC 3
|
|
call SYMBOL(MterpShouldSwitchInterpreters)
|
|
testb %al, %al
|
|
jnz MterpFallback
|
|
RESTORE_IBASE
|
|
FETCH_INST
|
|
GOTO_NEXT
|