Home | History | Annotate | Download | only in mips
      1     /*
      2      * Increment profile counter for this trace, and decrement
      3      * sample counter.  If sample counter goes below zero, turn
      4      * off profiling.
      5      *
      6      * On entry
      7      * (ra-16) is address of pointer to counter.  Note: the counter
      8      *    actually exists 16 bytes before the return target for mips.
      9      *     - 4 bytes for prof count addr.
     10      *     - 4 bytes for chain cell offset (2bytes 32 bit aligned).
     11      *     - 4 bytes for call TEMPLATE_PERIODIC_PROFILING.
     12      *     - 4 bytes for call delay slot.
     13      */
     14      lw     a0, -16(ra)
     15      lw     a1, offThread_pProfileCountdown(rSELF)
     16      lw     a2, 0(a0)                   # get counter
     17      lw     a3, 0(a1)                   # get countdown timer
     18      addu   a2, 1
     19      sub    a3, 1                       # FIXME - bug in ARM code???
     20      bltz   a3, .L${opcode}_disable_profiling
     21      sw     a2, 0(a0)
     22      sw     a3, 0(a1)
     23      RETURN
     24 .L${opcode}_disable_profiling:
     25      la     a0, dvmJitTraceProfilingOff
     26      JALR(a0)
     27      # The ra register is preserved by the JALR macro.
     28      jr     ra
     29