/* * 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)