blob: 9807ad1f3822cd1aa1e638bf6daf11a8c2fad4c9 [file] [log] [blame]
/*
* Inter-instruction transfer stub. Call out to dvmCheckBefore to handle
* any interesting requests and then jump to the real instruction
* handler. Unlike the Arm handler, we can't do this as a tail call
* because rIBASE is caller save and we need to reload it.
*
* Note that unlike in the Arm implementation, we should never arrive
* here with a zero breakFlag because we always refresh rIBASE on
* return.
*/
EXPORT_PC
movl rSELF, %eax
movl rPC, OUT_ARG0(%esp)
cmpb $$0,offThread_breakFlags(%eax) # anything to do?
movl rFP, OUT_ARG1(%esp)
je 1f # reload rIBASE & resume if not
movl %eax, OUT_ARG2(%esp)
call dvmCheckBefore # (dPC, dFP, self)
movl rSELF, %eax
1:
movl offThread_curHandlerTable(%eax), rIBASE # reload rIBASE
jmp *dvmAsmInstructionStart+(${opnum}*4)