1 /* 2 * Call out to the runtime to lock an object. Because this thread 3 * may have been suspended in THREAD_MONITOR state and the Jit's 4 * translation cache subsequently cleared, we cannot return directly. 5 * Instead, unconditionally transition to the interpreter to resume. 6 * 7 * On entry: 8 * a0 - self pointer 9 * a1 - the object (which has already been null-checked by the caller 10 * rPC - the Dalvik PC of the following instruction. 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 la a2, .LdvmJitToInterpNoChain 19 lw a2, (a2) 20 21 # Bail to interpreter - no chain [note - rPC still contains dPC] 22 #if defined(WITH_JIT_TUNING) 23 li a0, kHeavyweightMonitor 24 #endif 25 jr a2 26