1 /* 2 * To support deadlock prediction, this version of MONITOR_ENTER 3 * will always call the heavyweight dvmLockObject, check for an 4 * exception and then bail out to the interpreter. 5 * 6 * On entry: 7 * a0 - self pointer 8 * a1 - the object (which has already been null-checked by the caller 9 * rPC - the Dalvik PC of the following instruction. 10 * 11 */ 12 la a2, .LdvmLockObject 13 lw t9, (a2) 14 sw zero, offThread_inJitCodeCache(a0) # record that we're not returning 15 JALR(t9) # dvmLockObject(self, obj) 16 lw gp, STACK_OFFSET_GP(sp) 17 18 # test for exception 19 lw a1, offThread_exception(rSELF) 20 beqz a1, 1f 21 sub a0, rPC, 2 # roll dPC back to this monitor instruction 22 j .LhandleException 23 1: 24 # Bail to interpreter - no chain [note - rPC still contains dPC] 25 #if defined(WITH_JIT_TUNING) 26 li a0, kHeavyweightMonitor 27 #endif 28 la a2, .LdvmJitToInterpNoChain 29 lw a2, (a2) 30 jr a2 31