TEMPLATE_MONITOR_ENTER.S revision a8b91c52fd8a90b784835dfe1f8898035266c4dd
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