Interpreter restructuring

This is a restructuring of the Dalvik ARM and x86 interpreters:

  o Combine the old portstd and portdbg interpreters into a single
    portable interpreter.
  o Add debug/profiling support to the fast (mterp) interpreters.
  o Delete old mechansim of switching between interpreters.  Now, once
    you choose an interpreter at startup, you stick with it.
  o Allow JIT to co-exist with profiling & debugging (necessary for
    first-class support of debugging with the JIT active).
  o Adds single-step capability to the fast assembly interpreters without
    slowing them down (and, in fact, measurably improves their performance).
  o Remove old "polling for safe point" mechanism.  Breakouts now achieved
    via modifying base of interpreter handler table.
  o Simplify interpeter control mechanism.
  o Allow thread-granularity control for profiling & debugging

The primary motivation behind this change was to improve the responsiveness
of debugging and profiling and to make it easier to add new debugging and
profiling capabilities in the future.  Instead of always bailing out to the
slow debug portable interpreter, we can now stay in the fast interpreter.

A nice side effect of the change is that the fast interpreters
got a healthy speed boost because we were able to replace the
polling safepoint check that involved a dozen or so instructions
with a single table-base reload.  When combined with the two earlier CLs
related to this restructuring, we show a 5.6% performance improvement
using libdvm_interp.so on the Checkers benchmark relative to Honeycomb.

Change-Id: I8d37e866b3618def4e582fc73f1cf69ffe428f3c
diff --git a/vm/compiler/Compiler.c b/vm/compiler/Compiler.c
index 817b7e6..a485ca5 100644
--- a/vm/compiler/Compiler.c
+++ b/vm/compiler/Compiler.c
@@ -146,7 +146,7 @@
 
     dvmLockMutex(&gDvmJit.compilerLock);
     while (workQueueLength() != 0 && !gDvmJit.haltCompilerThread &&
-           self->suspendCount == 0) {
+           self->interpBreak.ctl.suspendCount == 0) {
         /*
          * Use timed wait here - more than one mutator threads may be blocked
          * but the compiler thread will only signal once when the queue is
@@ -420,7 +420,7 @@
      * NOTE: the profile table must only be allocated once, globally.
      * Profiling is turned on and off by nulling out gDvm.pJitProfTable
      * and then restoring its original value.  However, this action
-     * is not syncronized for speed so threads may continue to hold
+     * is not synchronized for speed so threads may continue to hold
      * and update the profile table after profiling has been turned
      * off by null'ng the global pointer.  Be aware.
      */
@@ -458,6 +458,7 @@
     gDvmJit.pProfTable = dvmDebuggerOrProfilerActive() ? NULL : pJitProfTable;
     gDvmJit.pProfTableCopy = pJitProfTable;
     gDvmJit.pJitTraceProfCounters = pJitTraceProfCounters;
+    dvmJitUpdateState();
     dvmUnlockMutex(&gDvmJit.tableLock);
 
     /* Signal running threads to refresh their cached pJitTable pointers */
@@ -738,6 +739,7 @@
     /* Disable new translation requests */
     gDvmJit.pProfTable = NULL;
     gDvmJit.pProfTableCopy = NULL;
+    dvmJitUpdateState();
 
     if (gDvm.verboseShutdown ||
             gDvmJit.profileMode == kTraceProfilingContinuous) {
@@ -796,7 +798,7 @@
      * may be executed before the compiler thread has finished
      * initialization.
      */
-    if ((gDvm.interpBreak & kSubModeMethodTrace) &&
+    if ((gDvm.activeProfilers != 0) &&
         !gDvmJit.methodTraceSupport) {
         bool resetRequired;
         /*
@@ -828,4 +830,6 @@
     dvmUnlockMutex(&gDvmJit.tableLock);
     if (needUnchain)
         dvmJitUnchainAll();
+    // Make sure all threads have current values
+    dvmJitUpdateState();
 }
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index 2937cf2..1272f9b 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -1422,15 +1422,16 @@
 #endif
 
 /*
- * Fetch *self->suspendCount. If the suspend count is non-zero,
+ * Fetch *self->info.breakFlags. If the breakFlags are non-zero,
  * punt to the interpreter.
  */
 static void genSuspendPoll(CompilationUnit *cUnit, MIR *mir)
 {
     int rTemp = dvmCompilerAllocTemp(cUnit);
     ArmLIR *ld;
-    ld = loadWordDisp(cUnit, r6SELF, offsetof(Thread, suspendCount),
-                      rTemp);
+    ld = loadBaseDisp(cUnit, NULL, r6SELF,
+                      offsetof(Thread, interpBreak.ctl.breakFlags),
+                      rTemp, kUnsignedByte, INVALID_SREG);
     setMemRefType(ld, true /* isLoad */, kMustNotAlias);
     genRegImmCheck(cUnit, kArmCondNe, rTemp, 0, mir->offset, NULL);
 }
diff --git a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
index 076f5f1..c1792ed 100644
--- a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
@@ -83,6 +83,9 @@
     /* No method JIT for Thumb backend */
     gDvmJit.disableOpt |= (1 << kMethodJit);
 
+    // Make sure all threads have current values
+    dvmJitUpdateState();
+
     return true;
 }
 
diff --git a/vm/compiler/codegen/arm/armv5te/ArchVariant.c b/vm/compiler/codegen/arm/armv5te/ArchVariant.c
index 73d27f9..817b68a 100644
--- a/vm/compiler/codegen/arm/armv5te/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv5te/ArchVariant.c
@@ -83,6 +83,9 @@
     /* No method JIT for Thumb backend */
     gDvmJit.disableOpt |= (1 << kMethodJit);
 
+    // Make sure all threads have current values
+    dvmJitUpdateState();
+
     return true;
 }
 
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
index bcd6a46..ff80662 100644
--- a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
@@ -78,6 +78,9 @@
     /* FIXME - comment out the following to enable method-based JIT */
     gDvmJit.disableOpt |= (1 << kMethodJit);
 
+    // Make sure all threads have current values
+    dvmJitUpdateState();
+
     return true;
 }
 
diff --git a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
index bcd6a46..ff80662 100644
--- a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
@@ -78,6 +78,9 @@
     /* FIXME - comment out the following to enable method-based JIT */
     gDvmJit.disableOpt |= (1 << kMethodJit);
 
+    // Make sure all threads have current values
+    dvmJitUpdateState();
+
     return true;
 }
 
diff --git a/vm/compiler/codegen/x86/ia32/ArchVariant.c b/vm/compiler/codegen/x86/ia32/ArchVariant.c
index 4ccd56f..2abac88 100644
--- a/vm/compiler/codegen/x86/ia32/ArchVariant.c
+++ b/vm/compiler/codegen/x86/ia32/ArchVariant.c
@@ -76,6 +76,9 @@
      */
     assert((offsetof(Thread, jitToInterpEntries) +
             sizeof(struct JitToInterpEntries)) <= 128);
+
+    // Make sure all threads have current values
+    dvmJitUpdateState();
     return true;
 }
 
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
index 503d190..e76b766 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
@@ -9,7 +9,7 @@
     @ methodToCall is guaranteed to be non-native
 $chaintgt:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -27,7 +27,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
index 8681532..38ade41 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
@@ -1,7 +1,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -16,7 +16,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
index 12b5e61..c88e1f2 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
@@ -7,7 +7,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -27,7 +27,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
diff --git a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
index 344a0da..1ed3fb1 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
@@ -13,11 +13,7 @@
     mov     r3, #0                       @ Record that we're not returning
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
-    @ refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
diff --git a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S
index cc57e2b..56027fd 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S
@@ -14,10 +14,7 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r1, [rSELF, #offThread_exception]
-    str     r3, [rSELF, #offThread_pJitProfTable]
     cmp     r1, #0
     beq     1f
     ldr     r2, .LhandleException
diff --git a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
index c2926a3..e87f335 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
@@ -10,12 +10,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -39,7 +39,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -51,6 +51,5 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
diff --git a/vm/compiler/template/armv5te/footer.S b/vm/compiler/template/armv5te/footer.S
index 4164d4e..5195d0b 100644
--- a/vm/compiler/template/armv5te/footer.S
+++ b/vm/compiler/template/armv5te/footer.S
@@ -15,11 +15,10 @@
     str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    ldr     lr, [rSELF, #offThread_pInterpBreak]
+    ldrb    lr, [rSELF, #offThread_subMode]
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
     mov     r2, r0                      @ r2<- methodToCall
-    ldr     lr, [lr]                    @ lr<- set of active profilers
     mov     r0, r1                      @ r0<- newFP
     add     r1, rSELF, #offThread_retval  @ r1<- &retval
     mov     r3, rSELF                   @ arg3<- self
@@ -45,19 +44,15 @@
     mov     lr, pc
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
-    @ Refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
     @ native return; r10=newSaveArea
     @ equivalent to dvmPopJniLocals
     ldr     r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
     ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
     ldr     r1, [rSELF, #offThread_exception] @ check for exception
-    ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
     str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
     str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
-    str     r3, [rSELF, #offThread_pJitProfTable]  @ cache current JitProfTable
     ldr     r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
 
     @ r0 = dalvikCallsitePC
@@ -121,8 +116,8 @@
     .word   dvmFastMethodTraceEnter
 .LdvmFastNativeMethodTraceExit:
     .word   dvmFastNativeMethodTraceExit
-.LdvmFastJavaMethodTraceExit:
-    .word   dvmFastJavaMethodTraceExit
+.LdvmFastMethodTraceExit:
+    .word   dvmFastMethodTraceExit
 .L__aeabi_cdcmple:
     .word   __aeabi_cdcmple
 .L__aeabi_cfcmple:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
index 2e941e5..44accab 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
@@ -171,12 +171,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -200,7 +200,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -212,7 +212,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -230,7 +229,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -250,7 +249,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -297,7 +296,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -315,7 +314,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -409,7 +408,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -424,7 +423,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1416,11 +1415,7 @@
     mov     r3, #0                       @ Record that we're not returning
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
-    @ refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1448,10 +1443,7 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r1, [rSELF, #offThread_exception]
-    str     r3, [rSELF, #offThread_pJitProfTable]
     cmp     r1, #0
     beq     1f
     ldr     r2, .LhandleException
@@ -1515,12 +1507,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1544,7 +1536,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -1556,7 +1548,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -1578,7 +1569,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1598,7 +1589,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -1649,7 +1640,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1667,7 +1658,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -1769,7 +1760,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1784,7 +1775,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1871,11 +1862,10 @@
     str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    ldr     lr, [rSELF, #offThread_pInterpBreak]
+    ldrb    lr, [rSELF, #offThread_subMode]
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
     mov     r2, r0                      @ r2<- methodToCall
-    ldr     lr, [lr]                    @ lr<- set of active profilers
     mov     r0, r1                      @ r0<- newFP
     add     r1, rSELF, #offThread_retval  @ r1<- &retval
     mov     r3, rSELF                   @ arg3<- self
@@ -1901,19 +1891,15 @@
     mov     lr, pc
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
-    @ Refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
     @ native return; r10=newSaveArea
     @ equivalent to dvmPopJniLocals
     ldr     r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
     ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
     ldr     r1, [rSELF, #offThread_exception] @ check for exception
-    ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
     str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
     str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
-    str     r3, [rSELF, #offThread_pJitProfTable]  @ cache current JitProfTable
     ldr     r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
 
     @ r0 = dalvikCallsitePC
@@ -1977,8 +1963,8 @@
     .word   dvmFastMethodTraceEnter
 .LdvmFastNativeMethodTraceExit:
     .word   dvmFastNativeMethodTraceExit
-.LdvmFastJavaMethodTraceExit:
-    .word   dvmFastJavaMethodTraceExit
+.LdvmFastMethodTraceExit:
+    .word   dvmFastMethodTraceExit
 .L__aeabi_cdcmple:
     .word   __aeabi_cdcmple
 .L__aeabi_cfcmple:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
index aebad92..3b5c857 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
@@ -171,12 +171,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -200,7 +200,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -212,7 +212,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -230,7 +229,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -250,7 +249,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -297,7 +296,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -315,7 +314,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -409,7 +408,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -424,7 +423,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1147,11 +1146,7 @@
     mov     r3, #0                       @ Record that we're not returning
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
-    @ refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1179,10 +1174,7 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r1, [rSELF, #offThread_exception]
-    str     r3, [rSELF, #offThread_pJitProfTable]
     cmp     r1, #0
     beq     1f
     ldr     r2, .LhandleException
@@ -1246,12 +1238,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1275,7 +1267,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -1287,7 +1279,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -1309,7 +1300,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1329,7 +1320,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -1380,7 +1371,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1398,7 +1389,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -1500,7 +1491,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1515,7 +1506,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1602,11 +1593,10 @@
     str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    ldr     lr, [rSELF, #offThread_pInterpBreak]
+    ldrb    lr, [rSELF, #offThread_subMode]
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
     mov     r2, r0                      @ r2<- methodToCall
-    ldr     lr, [lr]                    @ lr<- set of active profilers
     mov     r0, r1                      @ r0<- newFP
     add     r1, rSELF, #offThread_retval  @ r1<- &retval
     mov     r3, rSELF                   @ arg3<- self
@@ -1632,19 +1622,15 @@
     mov     lr, pc
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
-    @ Refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
     @ native return; r10=newSaveArea
     @ equivalent to dvmPopJniLocals
     ldr     r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
     ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
     ldr     r1, [rSELF, #offThread_exception] @ check for exception
-    ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
     str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
     str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
-    str     r3, [rSELF, #offThread_pJitProfTable]  @ cache current JitProfTable
     ldr     r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
 
     @ r0 = dalvikCallsitePC
@@ -1708,8 +1694,8 @@
     .word   dvmFastMethodTraceEnter
 .LdvmFastNativeMethodTraceExit:
     .word   dvmFastNativeMethodTraceExit
-.LdvmFastJavaMethodTraceExit:
-    .word   dvmFastJavaMethodTraceExit
+.LdvmFastMethodTraceExit:
+    .word   dvmFastMethodTraceExit
 .L__aeabi_cdcmple:
     .word   __aeabi_cdcmple
 .L__aeabi_cfcmple:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
index fb1e048..3905ec8 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
@@ -171,12 +171,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -200,7 +200,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -212,7 +212,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -230,7 +229,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -250,7 +249,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -297,7 +296,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -315,7 +314,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -409,7 +408,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -424,7 +423,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1416,11 +1415,7 @@
     mov     r3, #0                       @ Record that we're not returning
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
-    @ refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1448,10 +1443,7 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r1, [rSELF, #offThread_exception]
-    str     r3, [rSELF, #offThread_pJitProfTable]
     cmp     r1, #0
     beq     1f
     ldr     r2, .LhandleException
@@ -1515,12 +1507,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1544,7 +1536,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -1556,7 +1548,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -1578,7 +1569,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1598,7 +1589,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -1649,7 +1640,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1667,7 +1658,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -1769,7 +1760,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1784,7 +1775,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1871,11 +1862,10 @@
     str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    ldr     lr, [rSELF, #offThread_pInterpBreak]
+    ldrb    lr, [rSELF, #offThread_subMode]
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
     mov     r2, r0                      @ r2<- methodToCall
-    ldr     lr, [lr]                    @ lr<- set of active profilers
     mov     r0, r1                      @ r0<- newFP
     add     r1, rSELF, #offThread_retval  @ r1<- &retval
     mov     r3, rSELF                   @ arg3<- self
@@ -1901,19 +1891,15 @@
     mov     lr, pc
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
-    @ Refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
     @ native return; r10=newSaveArea
     @ equivalent to dvmPopJniLocals
     ldr     r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
     ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
     ldr     r1, [rSELF, #offThread_exception] @ check for exception
-    ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
     str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
     str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
-    str     r3, [rSELF, #offThread_pJitProfTable]  @ cache current JitProfTable
     ldr     r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
 
     @ r0 = dalvikCallsitePC
@@ -1977,8 +1963,8 @@
     .word   dvmFastMethodTraceEnter
 .LdvmFastNativeMethodTraceExit:
     .word   dvmFastNativeMethodTraceExit
-.LdvmFastJavaMethodTraceExit:
-    .word   dvmFastJavaMethodTraceExit
+.LdvmFastMethodTraceExit:
+    .word   dvmFastMethodTraceExit
 .L__aeabi_cdcmple:
     .word   __aeabi_cdcmple
 .L__aeabi_cfcmple:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
index 7ea4647..b09bc30 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
@@ -171,12 +171,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -200,7 +200,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -212,7 +212,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -230,7 +229,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -250,7 +249,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -297,7 +296,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -315,7 +314,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -409,7 +408,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -424,7 +423,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1416,11 +1415,7 @@
     mov     r3, #0                       @ Record that we're not returning
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
-    @ refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1448,10 +1443,7 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
-    ldr     r3, [r3]
     ldr     r1, [rSELF, #offThread_exception]
-    str     r3, [rSELF, #offThread_pJitProfTable]
     cmp     r1, #0
     beq     1f
     ldr     r2, .LhandleException
@@ -1515,12 +1507,12 @@
     mov     r0, r6
     @ r0=rSELF
     mov     lr, pc
-    ldr     pc, .LdvmFastJavaMethodTraceExit
+    ldr     pc, .LdvmFastMethodTraceExit
     ldmfd   sp!, {r0-r2,lr}             @ restore live registers
 #endif
     SAVEAREA_FROM_FP(r0, rFP)           @ r0<- saveArea (old)
     ldr     r10, [r0, #offStackSaveArea_prevFrame] @ r10<- saveArea->prevFrame
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1544,7 +1536,7 @@
     str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
     str     r0, [rSELF, #offThread_methodClassDex]
-    cmp     r8, #0                      @ check the suspendCount
+    cmp     r8, #0                      @ check the break flags
     movne   r9, #0                      @ clear the chaining cell address
     str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
@@ -1556,7 +1548,6 @@
 1:
     stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
-    mov     r1, #0                      @ changeInterp = false
     mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
@@ -1578,7 +1569,7 @@
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags] @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1598,7 +1589,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    lr                          @ bail to the interpreter
     tst     r10, #ACC_NATIVE
 #if !defined(WITH_SELF_VERIFICATION)
@@ -1649,7 +1640,7 @@
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1667,7 +1658,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
@@ -1769,7 +1760,7 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
     ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
+    ldrb    r8, [rSELF, #offThread_breakFlags]        @ r8<- breakFlags
     add     r3, r1, #1  @ Thumb addr is odd
     SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
     sub     r1, r1, r7, lsl #2          @ r1<- newFp (old savearea - regsSize)
@@ -1784,7 +1775,7 @@
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
-    cmp     r8, #0                      @ suspendCount != 0
+    cmp     r8, #0                      @ breakFlags != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
 #if !defined(WITH_SELF_VERIFICATION)
     bxne    lr                          @ bail to the interpreter
@@ -1871,11 +1862,10 @@
     str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    ldr     lr, [rSELF, #offThread_pInterpBreak]
+    ldrb    lr, [rSELF, #offThread_subMode]
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
     mov     r2, r0                      @ r2<- methodToCall
-    ldr     lr, [lr]                    @ lr<- set of active profilers
     mov     r0, r1                      @ r0<- newFP
     add     r1, rSELF, #offThread_retval  @ r1<- &retval
     mov     r3, rSELF                   @ arg3<- self
@@ -1901,19 +1891,15 @@
     mov     lr, pc
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
-    @ Refresh Jit's on/off status
-    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
     @ native return; r10=newSaveArea
     @ equivalent to dvmPopJniLocals
     ldr     r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
     ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
     ldr     r1, [rSELF, #offThread_exception] @ check for exception
-    ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
     str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
     str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
-    str     r3, [rSELF, #offThread_pJitProfTable]  @ cache current JitProfTable
     ldr     r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
 
     @ r0 = dalvikCallsitePC
@@ -1977,8 +1963,8 @@
     .word   dvmFastMethodTraceEnter
 .LdvmFastNativeMethodTraceExit:
     .word   dvmFastNativeMethodTraceExit
-.LdvmFastJavaMethodTraceExit:
-    .word   dvmFastJavaMethodTraceExit
+.LdvmFastMethodTraceExit:
+    .word   dvmFastMethodTraceExit
 .L__aeabi_cdcmple:
     .word   __aeabi_cdcmple
 .L__aeabi_cfcmple: