blob: a26e52816895c79b4f7a77b24b0f82630e127209 [file] [log] [blame]
/*
* thumb2 specific.
*
* In this variant of the MONITOR_ENTER handler, we assume that
* the test for the simple thin lock case has already been done.
* So, we'll just call dvmLockObject(), refresh the
* jit's on/off switch on return and then bail out to the interpreter.
* We have to bail to the interpreter because the translation cache
* may have been cleared while we were blocked on a monitor in
* dvmLockObject.
*
* On entry:
* r0 - self pointer
* r1 - the object (which has already been null-checked by the caller
* r4 - the Dalvik PC of the following instruction.
*
*/
ldr r2, .LdvmLockObject
mov r3, #0 @ Record that we're not returning
str r3, [r0, #offThread_inJitCodeCache]
blx r2 @ dvmLockObject(self, obj)
@ refresh Jit's on/off status
ldr r0, [rGLUE, #offGlue_ppJitProfTable]
ldr r0, [r0]
ldr r2, .LdvmJitToInterpNoChain
str r0, [rGLUE, #offGlue_pJitProfTable]
@ Bail to interpreter - no chain [note - r4 still contains rPC]
bx r2