Home | History | Annotate | Download | only in armv5te
      1     /*
      2      * To support deadlock prediction, this version of MONITOR_ENTER
      3      * will always call the heavyweight dvmLockObject, check for an
      4      * exception and then bail out to the interpreter.
      5      *
      6      * On entry:
      7      *    r0 - self pointer
      8      *    r1 - the object (which has already been null-checked by the caller
      9      *    r4 - the Dalvik PC of the following instruction.
     10      *
     11      */
     12     ldr     r2, .LdvmLockObject
     13     mov     r3, #0                       @ Record that we're not returning
     14     str     r3, [r0, #offThread_inJitCodeCache]
     15     blx     r2             @ dvmLockObject(self, obj)
     16     @ refresh Jit's on/off status & test for exception
     17     ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
     18     ldr     r1, [rGLUE, #offGlue_self]
     19     ldr     r0, [r0]
     20     ldr     r1, [r1, #offThread_exception]
     21     str     r0, [rGLUE, #offGlue_pJitProfTable]
     22     cmp     r1, #0
     23     beq     1f
     24     ldr     r2, .LhandleException
     25     sub     r0, r4, #2     @ roll dPC back to this monitor instruction
     26     bx      r2
     27 1:
     28     @ Bail to interpreter - no chain [note - r4 still contains rPC]
     29 #if defined(JIT_STATS)
     30     mov     r0, #kHeavyweightMonitor
     31 #endif
     32     ldr     pc, .LdvmJitToInterpNoChain
     33