| /* |
| * To support deadlock prediction, this version of MONITOR_ENTER |
| * will always call the heavyweight dvmLockObject, check for an |
| * exception and then bail out to the interpreter. |
| * |
| * On entry: |
| * a0 - self pointer |
| * a1 - the object (which has already been null-checked by the caller |
| * rPC - the Dalvik PC of the following instruction. |
| * |
| */ |
| la a2, .LdvmLockObject |
| lw t9, (a2) |
| sw zero, offThread_inJitCodeCache(a0) # record that we're not returning |
| JALR(t9) # dvmLockObject(self, obj) |
| lw gp, STACK_OFFSET_GP(sp) |
| |
| # test for exception |
| lw a1, offThread_exception(rSELF) |
| beqz a1, 1f |
| sub a0, rPC, 2 # roll dPC back to this monitor instruction |
| j .LhandleException |
| 1: |
| # Bail to interpreter - no chain [note - rPC still contains dPC] |
| #if defined(WITH_JIT_TUNING) |
| li a0, kHeavyweightMonitor |
| #endif |
| la a2, .LdvmJitToInterpNoChain |
| lw a2, (a2) |
| jr a2 |