Home | History | Annotate | Download | only in mips
      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      *    a0 - self pointer
      8      *    a1 - the object (which has already been null-checked by the caller
      9      *    rPC - the Dalvik PC of the following instruction.
     10      *
     11      */
     12     la     a2, .LdvmLockObject
     13     lw     t9, (a2)
     14     sw     zero, offThread_inJitCodeCache(a0)   # record that we're not returning
     15     JALR(t9)                                    # dvmLockObject(self, obj)
     16     lw     gp, STACK_OFFSET_GP(sp)
     17 
     18     # test for exception
     19     lw     a1, offThread_exception(rSELF)
     20     beqz   a1, 1f
     21     sub    a0, rPC, 2                           # roll dPC back to this monitor instruction
     22     j      .LhandleException
     23 1:
     24     # Bail to interpreter - no chain [note - rPC still contains dPC]
     25 #if defined(WITH_JIT_TUNING)
     26     li     a0, kHeavyweightMonitor
     27 #endif
     28     la     a2, .LdvmJitToInterpNoChain
     29     lw     a2, (a2)
     30     jr     a2
     31