blob: 18fd5e61250b713696340e928ecb4387961aea01 [file] [log] [blame]
%def invoke_polymorphic(helper="UndefinedInvokeHandler"):
/*
* invoke-polymorphic handler wrapper.
*/
/* op {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH */
/* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB, proto@HHHH */
.extern $helper
EXPORT_PC
movq rSELF, OUT_ARG0
leaq OFF_FP_SHADOWFRAME(rFP), OUT_ARG1
movq rPC, OUT_ARG2
REFRESH_INST ${opnum}
movl rINST, OUT_32_ARG3
call SYMBOL($helper)
testb %al, %al
jz MterpException
ADVANCE_PC 4
call SYMBOL(MterpShouldSwitchInterpreters)
testb %al, %al
jnz MterpFallback
FETCH_INST
GOTO_NEXT