138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite 2c8293e7dfe856ca95e27aef1ac2e64d750d60662Ben Cheng @ r7 = methodToCall->registersSize 39f601a917c8878204482c37aec7005054b6776fabuzbee ldr r9, [rSELF, #offThread_interpStackEnd] @ r9<- interpStackEnd 49a3147c7412f4794434b4c2604aa2ba784867774buzbee ldrb r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags 538329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng add r3, r1, #1 @ Thumb addr is odd 638329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng SAVEAREA_FROM_FP(r1, rFP) @ r1<- stack save area 738329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng sub r1, r1, r7, lsl #2 @ r1<- newFp (old savearea - regsSize) 838329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng SAVEAREA_FROM_FP(r10, r1) @ r10<- stack save area 938329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng cmp r10, r9 @ bottom < interpStackEnd? 10a62475ecfcc80c58add8f153c9605762dafb8227Ben Cheng bxlo lr @ return to raise stack overflow excep. 1138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite 1238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng str rPC, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)] 1338329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng str rPC, [r1, #(offStackSaveArea_savedPc - sizeofStackSaveArea)] 1438329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng 1538329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng @ set up newSaveArea 1638329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng str rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)] 1738329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng str r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)] 1838329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng str r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)] 199a3147c7412f4794434b4c2604aa2ba784867774buzbee cmp r8, #0 @ breakFlags != 0 2038329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng ldr r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc 2197319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#if !defined(WITH_SELF_VERIFICATION) 2238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng bxne lr @ bail to the interpreter 2397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#else 2497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao bx lr @ bail to interpreter unconditionally 2597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#endif 2638329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng 2738329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng @ go ahead and transfer control to the native code 289f601a917c8878204482c37aec7005054b6776fabuzbee ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->... 297a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r2, #0 3030bc0d46ae730d78c42c39cfa56a59ba3025380bbuzbee str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp 319f601a917c8878204482c37aec7005054b6776fabuzbee str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache 32d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)] 33d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden @ newFp->localRefCookie=top 3438329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng SAVEAREA_FROM_FP(r10, r1) @ r10<- new stack save area 3538329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng 369f601a917c8878204482c37aec7005054b6776fabuzbee mov r2, r0 @ arg2<- methodToCall 379f601a917c8878204482c37aec7005054b6776fabuzbee mov r0, r1 @ arg0<- newFP 389f601a917c8878204482c37aec7005054b6776fabuzbee add r1, rSELF, #offThread_retval @ arg1<- &retval 399f601a917c8878204482c37aec7005054b6776fabuzbee mov r3, rSELF @ arg3<- self 4018fba346582c08d81aa96d9508c0e935bad5f36fbuzbee#if defined(TEMPLATE_INLINE_PROFILING) 419f601a917c8878204482c37aec7005054b6776fabuzbee @ r2=methodToCall, r6=rSELF 425cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng stmfd sp!, {r2,r6} @ to be consumed after JNI return 435cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng stmfd sp!, {r0-r3} @ preserve r0-r3 445cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng mov r0, r2 455cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng mov r1, r6 469f601a917c8878204482c37aec7005054b6776fabuzbee @ r0=JNIMethod, r1=rSELF 478b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, .LdvmFastMethodTraceEnter 488b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 495cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng ldmfd sp!, {r0-r3} @ restore r0-r3 505cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng#endif 5138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng 5238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng blx r8 @ off to the native code 5338329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng 5418fba346582c08d81aa96d9508c0e935bad5f36fbuzbee#if defined(TEMPLATE_INLINE_PROFILING) 555cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng ldmfd sp!, {r0-r1} @ restore r2 and r6 569f601a917c8878204482c37aec7005054b6776fabuzbee @ r0=JNIMethod, r1=rSELF 578b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher ldr ip, .LdvmFastNativeMethodTraceExit 588b095215a4d5bde723819087f3455bdcc250a78fDavid Butcher blx ip 595cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng#endif 609f601a917c8878204482c37aec7005054b6776fabuzbee @ native return; r10=newSaveArea 6138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng @ equivalent to dvmPopJniLocals 6238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret 63d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top 649f601a917c8878204482c37aec7005054b6776fabuzbee ldr r1, [rSELF, #offThread_exception] @ check for exception 6530bc0d46ae730d78c42c39cfa56a59ba3025380bbuzbee str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp 6638329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng cmp r1, #0 @ null? 679f601a917c8878204482c37aec7005054b6776fabuzbee str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top 68909b418219f63c0d0b2bde8a0835dbf27d5061b8Bill Buzbee ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)] 6960c24f436d603c564d5351a6f81821f12635733cBen Cheng 7060c24f436d603c564d5351a6f81821f12635733cBen Cheng @ r0 = dalvikCallsitePC 7160c24f436d603c564d5351a6f81821f12635733cBen Cheng bne .LhandleException @ no, handle exception 7260c24f436d603c564d5351a6f81821f12635733cBen Cheng 739f601a917c8878204482c37aec7005054b6776fabuzbee str r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly 7460c24f436d603c564d5351a6f81821f12635733cBen Cheng cmp r2, #0 @ return chaining cell still exists? 7560c24f436d603c564d5351a6f81821f12635733cBen Cheng bxne r2 @ yes - go ahead 7660c24f436d603c564d5351a6f81821f12635733cBen Cheng 7760c24f436d603c564d5351a6f81821f12635733cBen Cheng @ continue executing the next instruction through the interpreter 7840094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S 7960c24f436d603c564d5351a6f81821f12635733cBen Cheng add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes) 80978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING) 817a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng mov r0, #kCallsiteInterpreted 827a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng#endif 8360c24f436d603c564d5351a6f81821f12635733cBen Cheng mov pc, r1 84