1/*
2 * Inter-instruction transfer stub.  Call out to dvmCheckBefore 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    EXPORT_PC
12    movl   rSELF, %eax
13    movl   rPC, OUT_ARG0(%esp)
14    cmpb   $$0,offThread_breakFlags(%eax)    # anything to do?
15    movl   rFP, OUT_ARG1(%esp)
16    je     1f                                # reload rIBASE & resume if not
17    movl   %eax, OUT_ARG2(%esp)
18    call   dvmCheckBefore                    # (dPC, dFP, self)
19    movl   rSELF, %eax
201:
21    movl   offThread_curHandlerTable(%eax), rIBASE # reload rIBASE
22    jmp    *dvmAsmInstructionStart+(${opnum}*4)
23