1ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 2ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * =========================================================================== 3ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Common subroutines and data 4ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * =========================================================================== 5ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 6ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 7ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .text 8ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .align 2 9ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LinvokeNative: 10ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ Prep for the native call 11ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ r1 = newFP, r0 = methodToCall 12ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 137a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r2, #0 14d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden ldr r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->... 157a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng str r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache 16ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r1, [r3, #offThread_curFrame] @ self->curFrame = newFp 17d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)] 18d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden @ newFp->localRefCookie=top 19ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r9, r3 @ r9<- glue->self (preserve) 20ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng SAVEAREA_FROM_FP(r10, r1) @ r10<- new stack save area 21ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 22ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r2, r0 @ r2<- methodToCall 23ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0, r1 @ r0<- newFP 24ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng add r1, rGLUE, #offGlue_retval @ r1<- &retval 25ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 26ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng LDR_PC_LR "[r2, #offMethod_nativeFunc]" 27ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 28964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee @ Refresh Jit's on/off status 29964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee ldr r3, [rGLUE, #offGlue_ppJitProfTable] 30964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee 31ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ native return; r9=self, r10=newSaveArea 32ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ equivalent to dvmPopJniLocals 33ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret 34d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top 35ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r1, [r9, #offThread_exception] @ check for exception 36964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee ldr r3, [r3] @ r1 <- pointer to Jit profile table 37ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str rFP, [r9, #offThread_curFrame] @ self->curFrame = fp 38ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r1, #0 @ null? 39d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden str r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top 404f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC 41964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee str r3, [rGLUE, #offGlue_pJitProfTable] @ cache current JitProfTable 4260c24f436d603c564d5351a6f81821f12635733cBen Cheng 4360c24f436d603c564d5351a6f81821f12635733cBen Cheng @ r0 = dalvikCallsitePC 4460c24f436d603c564d5351a6f81821f12635733cBen Cheng bne .LhandleException @ no, handle exception 4560c24f436d603c564d5351a6f81821f12635733cBen Cheng 467a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng str r2, [r9, #offThread_inJitCodeCache] @ set the new mode 4760c24f436d603c564d5351a6f81821f12635733cBen Cheng cmp r2, #0 @ return chaining cell still exists? 4860c24f436d603c564d5351a6f81821f12635733cBen Cheng bxne r2 @ yes - go ahead 4960c24f436d603c564d5351a6f81821f12635733cBen Cheng 5060c24f436d603c564d5351a6f81821f12635733cBen Cheng @ continue executing the next instruction through the interpreter 5140094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S 5260c24f436d603c564d5351a6f81821f12635733cBen Cheng add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes) 53978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING) 547a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r0, #kCallsiteInterpreted 557a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng#endif 5660c24f436d603c564d5351a6f81821f12635733cBen Cheng mov pc, r1 57ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 584f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng/* 594f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng * On entry: 604f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng * r0 Faulting Dalvik PC 614f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng */ 62ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LhandleException: 6311d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng#if defined(WITH_SELF_VERIFICATION) 6411d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng ldr pc, .LdeadFood @ should not see this under self-verification mode 6511d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng.LdeadFood: 6611d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng .word 0xdeadf00d 6711d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng#endif 687a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 697a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r2, #0 707a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng str r2, [r3, #offThread_inJitCodeCache] @ in interpreter land 714f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng ldr r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func 72cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng ldr rIBASE, .LdvmAsmInstructionStart @ same as above 734f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng mov rPC, r0 @ reload the faulting Dalvik address 744f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng mov pc, r1 @ branch to dvmMterpCommonExceptionThrown 75ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 76ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .align 2 77ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmAsmInstructionStart: 78ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmAsmInstructionStart 797a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng.LdvmJitToInterpNoChainNoProfile: 807a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng .word dvmJitToInterpNoChainNoProfile 8140094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng.LdvmJitToInterpTraceSelectNoChain: 8240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng .word dvmJitToInterpTraceSelectNoChain 83ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmJitToInterpNoChain: 84ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmJitToInterpNoChain 85ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmMterpStdBail: 86ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmMterpStdBail 87cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng.LdvmMterpCommonExceptionThrown: 88cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng .word dvmMterpCommonExceptionThrown 89c1d9ed490a7bd6caab51df41f3c9e590fcecb727Bill Buzbee.LdvmLockObject: 90c1d9ed490a7bd6caab51df41f3c9e590fcecb727Bill Buzbee .word dvmLockObject 91978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING) 92978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng.LdvmICHitCount: 93978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng .word gDvmICHitCount 94978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#endif 959e45c0b968d63ea38353c99252d233879c2efdafjeffhao#if defined(WITH_SELF_VERIFICATION) 969e45c0b968d63ea38353c99252d233879c2efdafjeffhao.LdvmSelfVerificationMemOpDecode: 979e45c0b968d63ea38353c99252d233879c2efdafjeffhao .word dvmSelfVerificationMemOpDecode 989e45c0b968d63ea38353c99252d233879c2efdafjeffhao#endif 99ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.L__aeabi_cdcmple: 100ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word __aeabi_cdcmple 101ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.L__aeabi_cfcmple: 102ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word __aeabi_cfcmple 103ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 104ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dmvCompilerTemplateEnd 105ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdmvCompilerTemplateEnd: 106ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 107ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif /* WITH_JIT */ 108