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 20 1: 21 movl offThread_curHandlerTable(%eax), rIBASE # reload rIBASE 22 jmp *dvmAsmInstructionStart+(${opnum}*4) 23