blob: edf71a7aa20ef0e2918bd6fc758bc0c218904e6c [file] [log] [blame]
/*
* Inter-instruction transfer stub. Call out to dvmCheckBefore to handle
* any interesting requests and then jump to the real instruction
* handler. Note that the call to dvmCheckBefore is done as a tail call.
* rIBASE updates won't be seen until a refresh, and we can tell we have a
* stale rIBASE if breakFlags==0. Always refresh rIBASE here, and then
* bail to the real handler if breakFlags==0.
*/
lbu a3, offThread_breakFlags(rSELF)
la rBIX, dvmAsmInstructionStart + (${opnum} * 128)
lw rIBASE, offThread_curHandlerTable(rSELF)
bnez a3, 1f
jr rBIX # nothing to do - jump to real handler
1:
EXPORT_PC()
move a0, rPC # arg0
move a1, rFP # arg1
move a2, rSELF # arg2
JAL(dvmCheckBefore)
jr rBIX