1ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 2ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * =========================================================================== 3ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Common subroutines and data 4ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * =========================================================================== 5ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 6ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 75dfcc78af479937ba8dafceefd9b1931a88dfaafArd Biesheuvel .section .data.rel.ro 8ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .align 2 9ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LinvokeNative: 10ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ Prep for the native call 11ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ r1 = newFP, r0 = methodToCall 127a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r2, #0 139f601a917c8878204482c37aec7005054b6776fabuzbee ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->... 149f601a917c8878204482c37aec7005054b6776fabuzbee str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache 1530bc0d46ae730d78c42c39cfa56a59ba3025380bbuzbee str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp 16d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)] 17d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden @ newFp->localRefCookie=top 18389e258a5b9b2afb7bfaee3344c615d3310fae4ebuzbee ldrh lr, [rSELF, #offThread_subMode] 19ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng SAVEAREA_FROM_FP(r10, r1) @ r10<- new stack save area 20ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 21ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r2, r0 @ r2<- methodToCall 22ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0, r1 @ r0<- newFP 239f601a917c8878204482c37aec7005054b6776fabuzbee add r1, rSELF, #offThread_retval @ r1<- &retval 249f601a917c8878204482c37aec7005054b6776fabuzbee mov r3, rSELF @ arg3<- self 2518fba346582c08d81aa96d9508c0e935bad5f36fbuzbee ands lr, #kSubModeMethodTrace 2618fba346582c08d81aa96d9508c0e935bad5f36fbuzbee beq 121f @ hop if not profiling 279f601a917c8878204482c37aec7005054b6776fabuzbee @ r2: methodToCall, r6: rSELF 285cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng stmfd sp!, {r2,r6} 295cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng stmfd sp!, {r0-r3} 305cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng mov r0, r2 315cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng mov r1, r6 328b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, .LdvmFastMethodTraceEnter 338b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 345cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng ldmfd sp!, {r0-r3} 35ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 368b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, [r2, #offMethod_nativeFunc] 378b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 38ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 395cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng ldmfd sp!, {r0-r1} 408b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, .LdvmFastNativeMethodTraceExit 418b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 4218fba346582c08d81aa96d9508c0e935bad5f36fbuzbee b 212f 4318fba346582c08d81aa96d9508c0e935bad5f36fbuzbee121: 448b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, [r2, #offMethod_nativeFunc] 458b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 4618fba346582c08d81aa96d9508c0e935bad5f36fbuzbee212: 47964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee 489f601a917c8878204482c37aec7005054b6776fabuzbee @ native return; r10=newSaveArea 49ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ equivalent to dvmPopJniLocals 50ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret 51d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top 529f601a917c8878204482c37aec7005054b6776fabuzbee ldr r1, [rSELF, #offThread_exception] @ check for exception 5330bc0d46ae730d78c42c39cfa56a59ba3025380bbuzbee str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp 54ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r1, #0 @ null? 559f601a917c8878204482c37aec7005054b6776fabuzbee str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top 564f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC 5760c24f436d603c564d5351a6f81821f12635733cBen Cheng 5860c24f436d603c564d5351a6f81821f12635733cBen Cheng @ r0 = dalvikCallsitePC 5960c24f436d603c564d5351a6f81821f12635733cBen Cheng bne .LhandleException @ no, handle exception 6060c24f436d603c564d5351a6f81821f12635733cBen Cheng 619f601a917c8878204482c37aec7005054b6776fabuzbee str r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode 6260c24f436d603c564d5351a6f81821f12635733cBen Cheng cmp r2, #0 @ return chaining cell still exists? 6360c24f436d603c564d5351a6f81821f12635733cBen Cheng bxne r2 @ yes - go ahead 6460c24f436d603c564d5351a6f81821f12635733cBen Cheng 6560c24f436d603c564d5351a6f81821f12635733cBen Cheng @ continue executing the next instruction through the interpreter 6640094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S 6760c24f436d603c564d5351a6f81821f12635733cBen Cheng add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes) 68978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING) 697a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r0, #kCallsiteInterpreted 707a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng#endif 718b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher bx r1 72ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 734f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng/* 744f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng * On entry: 754f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng * r0 Faulting Dalvik PC 764f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng */ 77ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LhandleException: 7811d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng#if defined(WITH_SELF_VERIFICATION) 7911d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng ldr pc, .LdeadFood @ should not see this under self-verification mode 8011d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng.LdeadFood: 8111d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng .word 0xdeadf00d 8211d8f14eef83d1b7bfa8f116de56a92d5ba9e71eBen Cheng#endif 837a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r2, #0 849f601a917c8878204482c37aec7005054b6776fabuzbee str r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land 854f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng ldr r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func 86cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng ldr rIBASE, .LdvmAsmInstructionStart @ same as above 874f48917c0741e4d9b15ca7c45956aea05fea103fBen Cheng mov rPC, r0 @ reload the faulting Dalvik address 888b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher bx r1 @ branch to dvmMterpCommonExceptionThrown 89ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 90ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .align 2 91ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmAsmInstructionStart: 92ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmAsmInstructionStart 937a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng.LdvmJitToInterpNoChainNoProfile: 947a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng .word dvmJitToInterpNoChainNoProfile 9540094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng.LdvmJitToInterpTraceSelectNoChain: 9640094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng .word dvmJitToInterpTraceSelectNoChain 97ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmJitToInterpNoChain: 98ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmJitToInterpNoChain 99ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmMterpStdBail: 100ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmMterpStdBail 101cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng.LdvmMterpCommonExceptionThrown: 102cc6600c2702c0b29457836acde1cfc4f25c63b67Ben Cheng .word dvmMterpCommonExceptionThrown 103c1d9ed490a7bd6caab51df41f3c9e590fcecb727Bill Buzbee.LdvmLockObject: 104c1d9ed490a7bd6caab51df41f3c9e590fcecb727Bill Buzbee .word dvmLockObject 1052e152baec01433de9c63633ebc6f4adf1cea3a87buzbee.LdvmJitTraceProfilingOff: 1062e152baec01433de9c63633ebc6f4adf1cea3a87buzbee .word dvmJitTraceProfilingOff 107978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING) 108978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng.LdvmICHitCount: 109978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng .word gDvmICHitCount 110978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#endif 1119e45c0b968d63ea38353c99252d233879c2efdafjeffhao#if defined(WITH_SELF_VERIFICATION) 1129e45c0b968d63ea38353c99252d233879c2efdafjeffhao.LdvmSelfVerificationMemOpDecode: 1139e45c0b968d63ea38353c99252d233879c2efdafjeffhao .word dvmSelfVerificationMemOpDecode 1149e45c0b968d63ea38353c99252d233879c2efdafjeffhao#endif 1155cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng.LdvmFastMethodTraceEnter: 1165cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng .word dvmFastMethodTraceEnter 1175cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng.LdvmFastNativeMethodTraceExit: 1185cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng .word dvmFastNativeMethodTraceExit 1199a3147c7412f4794434b4c2604aa2ba784867774buzbee.LdvmFastMethodTraceExit: 1209a3147c7412f4794434b4c2604aa2ba784867774buzbee .word dvmFastMethodTraceExit 121ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.L__aeabi_cdcmple: 122ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word __aeabi_cdcmple 123ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.L__aeabi_cfcmple: 124ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word __aeabi_cfcmple 125ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 126d585beda3690b8b5b978e3c59af224336614ba72Yanchuan Nian .global dvmCompilerTemplateEnd 127d585beda3690b8b5b978e3c59af224336614ba72Yanchuan NiandvmCompilerTemplateEnd: 128ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 129ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif /* WITH_JIT */ 130