1/*
2 * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
3 * any interesting requests and then jump to the real instruction
4 * handler.  Unlike the Arm handler, we can't do this as a tail call
5 * because rIBASE is caller save and we need to reload it.
6 *
7 * Note that unlike in the Arm implementation, we should never arrive
8 * here with a zero breakFlag because we always refresh rIBASE on
9 * return.
10 */
11    .extern MterpCheckBefore
12    movl    rSELF, %ecx
13    movl    %ecx, OUT_ARG0(%esp)
14    leal    OFF_FP_SHADOWFRAME(rFP), %eax
15    movl    %eax, OUT_ARG1(%esp)
16    movl    rPC, OUT_ARG2(%esp)
17    call    SYMBOL(MterpCheckBefore)        # (self, shadow_frame, dex_pc_ptr)
18    REFRESH_IBASE
19    jmp     .L_op_nop+(${opnum}*${handler_size_bytes})
20