diff options
Diffstat (limited to 'vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S')
-rw-r--r-- | vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S index 12af0d27c..b157ff3f0 100644 --- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S +++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S @@ -1388,6 +1388,76 @@ dvmCompiler_TEMPLATE_INTERPRET: .LinterpPunt: .word dvmJitToInterpPunt +/* ------------------------------ */ + .balign 4 + .global dvmCompiler_TEMPLATE_MONITOR_ENTER +dvmCompiler_TEMPLATE_MONITOR_ENTER: +/* File: armv7-a/TEMPLATE_MONITOR_ENTER.S */ + /* + * 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 + + +/* ------------------------------ */ + .balign 4 + .global dvmCompiler_TEMPLATE_MONITOR_ENTER_DEBUG +dvmCompiler_TEMPLATE_MONITOR_ENTER_DEBUG: +/* File: armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S */ + /* + * To support deadlock prediction, this version of MONITOR_ENTER + * will always call the heavyweight dvmLockObject, check for an + * exception and then bail out to the interpreter. + * + * 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 & test for exception + ldr r0, [rGLUE, #offGlue_ppJitProfTable] + ldr r1, [rGLUE, #offGlue_self] + ldr r0, [r0] + ldr r1, [r1, #offThread_exception] + str r0, [rGLUE, #offGlue_pJitProfTable] + cmp r1, #0 + beq 1f + ldr r2, .LhandleException + sub r0, r4, #2 @ roll dPC back to this monitor instruction + bx r2 +1: + @ Bail to interpreter - no chain [note - r4 still contains rPC] + ldr pc, .LdvmJitToInterpNoChain + .size dvmCompilerTemplateStart, .-dvmCompilerTemplateStart /* File: armv5te/footer.S */ /* @@ -1469,6 +1539,8 @@ dvmCompiler_TEMPLATE_INTERPRET: .word dvmMterpStdBail .LdvmMterpCommonExceptionThrown: .word dvmMterpCommonExceptionThrown +.LdvmLockObject: + .word dvmLockObject .L__aeabi_cdcmple: .word __aeabi_cdcmple .L__aeabi_cfcmple: |