blob: 23bf6615749cf267ba441e8526b4448b2c109ff8 [file] [log] [blame]
/*
* 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