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