• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     *    r0 - self pointer
9     *    r1 - the object (which has already been null-checked by the caller
10     *    r4 - the Dalvik PC of the following instruction.
11     */
12    ldr     r2, .LdvmLockObject
13    mov     r3, #0                       @ Record that we're not returning
14    str     r3, [r0, #offThread_inJitCodeCache]
15    blx     r2                           @ dvmLockObject(self, obj)
16    ldr     r2, .LdvmJitToInterpNoChain
17    @ Bail to interpreter - no chain [note - r4 still contains rPC]
18#if defined(WITH_JIT_TUNING)
19    mov     r0, #kHeavyweightMonitor
20#endif
21    bx      r2
22