Interpreter restructuring: eliminate InterpState

The key datastructure for the interpreter is InterpState.
This change eliminates it, merging its data with the Thread structure.

Here's why:

In principio creavit Fadden Thread et InterpState.  And it was good.

Thread holds thread-private state, while InterpState captures data
associated with a Dalvik interpreter activation.  Because JNI calls
can result in nested interpreter invocations, we can have more than one
InterpState for each actual thread.  InterpState was relatively small,
and it all worked well.  It was used enough that in the Arm version
a register (rGLUE) was dedicated to it.

Then, along came the JIT guys, who saw InterpState as a convenient place
to dump all sorts of useful data that they wanted quick access to through
that dedicated register.  InterpState grew and grew.  In terms of
space, this wasn't a big problem - but it did mean that the initialization
cost of each interpreter activation grew as well.  For applications
that do a lot of callbacks from native code into Dalvik, this is
measurable.  It's also mostly useless cost because much of the JIT-related
InterpState initialization was setting up useful constants - things that
don't need to be saved and restored all the time.

The biggest problem, though, deals with thread control.  When something
interesting is happening that needs all threads to be stopped (such as
GC and debugger attach), we have access to all of the Thread structures,
but we don't have access to all of the InterpState structures (which
may be buried/nested on the native stack).  As a result, polling for
thread suspension is done via a one-indirection pointer chase.  InterpState
itself can't hold the stop bits because we can't always find it, so
instead it holds a pointer to the global or thread-specific stop control.

Yuck.

With this change, we eliminate InterpState and merge all needed data
into Thread.  Further, we replace the decidated rGLUE register with a
pointer to the Thread structure (rSELF).  The small subset of state
data that needs to be saved and restored across nested interpreter
activations is collected into a record that is saved to the interpreter
frame, and restored on exit.  Further, these small records are linked
together to allow tracebacks to show nested activations.  Old InterpState
variables that simply contain useful constants are initialized once at
thread creation time.

This CL is large enough by itself that the new ability to streamline
suspend checks is not done here - that will happen in a future CL.  Here
we just focus on consolidation.

Change-Id: Ide6b2fb85716fea454ac113f5611263a96687356
diff --git a/vm/compiler/Compiler.h b/vm/compiler/Compiler.h
index 7533e26..c566aa6 100644
--- a/vm/compiler/Compiler.h
+++ b/vm/compiler/Compiler.h
@@ -25,7 +25,6 @@
  * #define SIGNATURE_BREAKPOINT
  */
 
-#define MAX_JIT_RUN_LEN                 64
 #define COMPILER_WORK_QUEUE_SIZE        100
 #define COMPILER_IC_PATCH_QUEUE_SIZE    64
 
@@ -119,82 +118,6 @@
     PredictedChainingCell cellContent;  /* content of the new cell */
 } ICPatchWorkOrder;
 
-/* States of the dbg interpreter when serving a JIT-related request */
-typedef enum JitState {
-    /* Entering states in the debug interpreter */
-    kJitNot = 0,               // Non-JIT related reasons */
-    kJitTSelectRequest = 1,    // Request a trace (subject to filtering)
-    kJitTSelectRequestHot = 2, // Request a hot trace (bypass the filter)
-    kJitSelfVerification = 3,  // Self Verification Mode
-
-    /* Operational states in the debug interpreter */
-    kJitTSelect = 4,           // Actively selecting a trace
-    kJitTSelectEnd = 5,        // Done with the trace - wrap it up
-    kJitSingleStep = 6,        // Single step interpretation
-    kJitSingleStepEnd = 7,     // Done with single step, ready return to mterp
-    kJitDone = 8,              // Ready to leave the debug interpreter
-} JitState;
-
-#if defined(WITH_SELF_VERIFICATION)
-typedef enum SelfVerificationState {
-    kSVSIdle = 0,           // Idle
-    kSVSStart = 1,          // Shadow space set up, running compiled code
-    kSVSPunt = 2,           // Exiting compiled code by punting
-    kSVSSingleStep = 3,     // Exiting compiled code by single stepping
-    kSVSNoProfile = 4,      // Exiting compiled code and don't collect profiles
-    kSVSTraceSelect = 5,    // Exiting compiled code and compile the next pc
-    kSVSNormal = 6,         // Exiting compiled code normally
-    kSVSNoChain = 7,        // Exiting compiled code by no chain
-    kSVSBackwardBranch = 8, // Exiting compiled code with backward branch trace
-    kSVSDebugInterp = 9,    // Normal state restored, running debug interpreter
-} SelfVerificationState;
-#endif
-
-typedef enum JitHint {
-   kJitHintNone = 0,
-   kJitHintTaken = 1,         // Last inst in run was taken branch
-   kJitHintNotTaken = 2,      // Last inst in run was not taken branch
-   kJitHintNoBias = 3,        // Last inst in run was unbiased branch
-} jitHint;
-
-/*
- * Element of a Jit trace description. If the isCode bit is set, it describes
- * a contiguous sequence of Dalvik byte codes.
- */
-typedef struct {
-    unsigned isCode:1;       // If set denotes code fragments
-    unsigned numInsts:8;     // Number of Byte codes in run
-    unsigned runEnd:1;       // Run ends with last byte code
-    jitHint  hint:6;         // Hint to apply to final code of run
-    u2    startOffset;       // Starting offset for trace run
-} JitCodeDesc;
-
-/*
- * A complete list of trace runs passed to the compiler looks like the
- * following:
- *   frag1
- *   frag2
- *   frag3
- *   meta1
- *   meta2
- *   frag4
- *
- * frags 1-4 have the "isCode" field set, and metas 1-2 are plain pointers or
- * pointers to auxiliary data structures as long as the LSB is null.
- * The meaning of the meta content is loosely defined. It is usually the code
- * fragment right before the first meta field (frag3 in this case) to
- * understand and parse them. Frag4 could be a dummy one with 0 "numInsts" but
- * the "runEnd" field set.
- *
- * For example, if a trace run contains a method inlining target, the class
- * type of "this" and the currently resolved method pointer are two instances
- * of meta information stored there.
- */
-typedef union {
-    JitCodeDesc frag;
-    void*       meta;
-} JitTraceRun;
-
 /*
  * Trace description as will appear in the translation cache.  Note
  * flexible array at end, as these will be of variable size.  To
diff --git a/vm/compiler/codegen/CodegenFactory.c b/vm/compiler/codegen/CodegenFactory.c
index aad6512..61e29d7 100644
--- a/vm/compiler/codegen/CodegenFactory.c
+++ b/vm/compiler/codegen/CodegenFactory.c
@@ -57,7 +57,7 @@
     if (rlSrc.location == kLocPhysReg) {
         genRegCopy(cUnit, reg1, rlSrc.lowReg);
     } else  if (rlSrc.location == kLocRetval) {
-        loadWordDisp(cUnit, rGLUE, offsetof(InterpState, retval), reg1);
+        loadWordDisp(cUnit, rSELF, offsetof(Thread, retval), reg1);
     } else {
         assert(rlSrc.location == kLocDalvikFrame);
         loadWordDisp(cUnit, rFP, dvmCompilerS2VReg(cUnit, rlSrc.sRegLow) << 2,
@@ -90,7 +90,7 @@
     if (rlSrc.location == kLocPhysReg) {
         genRegCopyWide(cUnit, regLo, regHi, rlSrc.lowReg, rlSrc.highReg);
     } else if (rlSrc.location == kLocRetval) {
-        loadBaseDispWide(cUnit, NULL, rGLUE, offsetof(InterpState, retval),
+        loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, retval),
                          regLo, regHi, INVALID_SREG);
     } else {
         assert(rlSrc.location == kLocDalvikFrame);
@@ -124,7 +124,7 @@
         rlSrc.location = kLocPhysReg;
         dvmCompilerMarkLive(cUnit, rlSrc.lowReg, rlSrc.sRegLow);
     } else if (rlSrc.location == kLocRetval) {
-        loadWordDisp(cUnit, rGLUE, offsetof(InterpState, retval), rlSrc.lowReg);
+        loadWordDisp(cUnit, rSELF, offsetof(Thread, retval), rlSrc.lowReg);
         rlSrc.location = kLocPhysReg;
         dvmCompilerClobber(cUnit, rlSrc.lowReg);
     }
@@ -164,7 +164,7 @@
 
 
     if (rlDest.location == kLocRetval) {
-        storeBaseDisp(cUnit, rGLUE, offsetof(InterpState, retval),
+        storeBaseDisp(cUnit, rSELF, offsetof(Thread, retval),
                       rlDest.lowReg, kWord);
         dvmCompilerClobber(cUnit, rlDest.lowReg);
     } else {
@@ -192,7 +192,7 @@
         dvmCompilerMarkLive(cUnit, rlSrc.highReg,
                             dvmCompilerSRegHi(rlSrc.sRegLow));
     } else if (rlSrc.location == kLocRetval) {
-        loadBaseDispWide(cUnit, NULL, rGLUE, offsetof(InterpState, retval),
+        loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, retval),
                          rlSrc.lowReg, rlSrc.highReg, INVALID_SREG);
         rlSrc.location = kLocPhysReg;
         dvmCompilerClobber(cUnit, rlSrc.lowReg);
@@ -242,7 +242,7 @@
 
 
     if (rlDest.location == kLocRetval) {
-        storeBaseDispWide(cUnit, rGLUE, offsetof(InterpState, retval),
+        storeBaseDispWide(cUnit, rSELF, offsetof(Thread, retval),
                           rlDest.lowReg, rlDest.highReg);
         dvmCompilerClobber(cUnit, rlDest.lowReg);
         dvmCompilerClobber(cUnit, rlDest.highReg);
diff --git a/vm/compiler/codegen/arm/ArmLIR.h b/vm/compiler/codegen/arm/ArmLIR.h
index 5adc1ed..1f8b5d0 100644
--- a/vm/compiler/codegen/arm/ArmLIR.h
+++ b/vm/compiler/codegen/arm/ArmLIR.h
@@ -24,7 +24,7 @@
  * r0, r1, r2, r3 are always scratch
  * r4 (rPC) is scratch for Jit, but most be restored when resuming interp
  * r5 (rFP) is reserved [holds Dalvik frame pointer]
- * r6 (rGLUE) is reserved [holds current &interpState]
+ * r6 (rSELF) is reserved [holds current &Thread]
  * r7 (rINST) is scratch for Jit
  * r8 (rIBASE) is scratch for Jit, but must be restored when resuming interp
  * r9 is reserved
@@ -210,7 +210,7 @@
     r3 = 3,
     r4PC = 4,
     rFP = 5,
-    rGLUE = 6,
+    rSELF = 6,
     r7 = 7,
     r8 = 8,
     r9 = 9,
diff --git a/vm/compiler/codegen/arm/ArmRallocUtil.c b/vm/compiler/codegen/arm/ArmRallocUtil.c
index bc643c1..d6e73a0 100644
--- a/vm/compiler/codegen/arm/ArmRallocUtil.c
+++ b/vm/compiler/codegen/arm/ArmRallocUtil.c
@@ -29,7 +29,7 @@
  * Register usage for 16-bit Thumb systems:
  *     r0-r3: Temp/argument
  *     lr(r14):      Temp for translations, return address for handlers
- *     rGLUE(r6):    Pointer to InterpState
+ *     rSELF(r6):    Pointer to Thread
  *     rFP(r5):      Dalvik frame pointer
  *     r4, r7:       Temp for translations
  *     r8, r9, r10:   Temp preserved across C calls
@@ -38,7 +38,7 @@
  * Register usage for 32-bit Thumb systems:
  *     r0-r3: Temp/argument
  *     lr(r14):      Temp for translations, return address for handlers
- *     rGLUE(r6):    Pointer to InterpState
+ *     rSELF(r6):    Pointer to Thread
  *     rFP(r5):      Dalvik frame pointer
  *     r4, r7:       Temp for translations
  *     r8, r9, r10   Temp preserved across C calls
diff --git a/vm/compiler/codegen/arm/Assemble.c b/vm/compiler/codegen/arm/Assemble.c
index 34793ee..79f5ec7 100644
--- a/vm/compiler/codegen/arm/Assemble.c
+++ b/vm/compiler/codegen/arm/Assemble.c
@@ -1606,7 +1606,7 @@
  *      next safe point.
  */
 const Method *dvmJitToPatchPredictedChain(const Method *method,
-                                          InterpState *interpState,
+                                          Thread *self,
                                           PredictedChainingCell *cell,
                                           const ClassObject *clazz)
 {
@@ -1646,7 +1646,7 @@
     PredictedChainingCell newCell;
 
     if (cell->clazz == NULL) {
-        newRechainCount = interpState->icRechainCount;
+        newRechainCount = self->icRechainCount;
     }
 
     int baseAddr = (int) cell + 4;   // PC is cur_addr + 4
@@ -1667,7 +1667,7 @@
     inlineCachePatchEnqueue(cell, &newCell);
 #endif
 done:
-    interpState->icRechainCount = newRechainCount;
+    self->icRechainCount = newRechainCount;
     return method;
 }
 
diff --git a/vm/compiler/codegen/arm/CalloutHelper.h b/vm/compiler/codegen/arm/CalloutHelper.h
index 414f8c5..931cf0f 100644
--- a/vm/compiler/codegen/arm/CalloutHelper.h
+++ b/vm/compiler/codegen/arm/CalloutHelper.h
@@ -82,7 +82,7 @@
 
 /* Originally declared in compiler/codegen/arm/Assemble.c */
 const Method *dvmJitToPatchPredictedChain(const Method *method,
-                                          InterpState *interpState,
+                                          Thread *self,
                                           PredictedChainingCell *cell,
                                           const ClassObject *clazz);
 
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index 2ed17d6..02e6f87 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -32,7 +32,7 @@
     int regCardBase = dvmCompilerAllocTemp(cUnit);
     int regCardNo = dvmCompilerAllocTemp(cUnit);
     ArmLIR *branchOver = genCmpImmBranch(cUnit, kArmCondEq, valReg, 0);
-    loadWordDisp(cUnit, rGLUE, offsetof(InterpState, cardTable),
+    loadWordDisp(cUnit, rSELF, offsetof(Thread, cardTable),
                  regCardBase);
     opRegRegImm(cUnit, kOpLsr, regCardNo, tgtAddrReg, GC_CARD_SHIFT);
     storeBaseIndexed(cUnit, regCardBase, regCardNo, regCardBase, 0,
@@ -973,7 +973,7 @@
         /* Branch to the PC reconstruction code */
         branch->generic.target = (LIR *) pcrLabel;
     }
-    /* TODO: Move result to InterpState for non-void returns */
+    /* TODO: Move result to Thread for non-void returns */
 }
 
 static void genProcessArgsNoRange(CompilationUnit *cUnit, MIR *mir,
@@ -1248,7 +1248,7 @@
 
     LOAD_FUNC_ADDR(cUnit, r7, (int) dvmJitToPatchPredictedChain);
 
-    genRegCopy(cUnit, r1, rGLUE);
+    genRegCopy(cUnit, r1, rSELF);
 
     /*
      * r0 = calleeMethod
@@ -1287,7 +1287,7 @@
     /* r0 = dalvik pc */
     dvmCompilerFlushAllRegs(cUnit);
     loadConstant(cUnit, r0, (int) (cUnit->method->insns + offset));
-    loadWordDisp(cUnit, rGLUE, offsetof(InterpState,
+    loadWordDisp(cUnit, rSELF, offsetof(Thread,
                  jitToInterpEntries.dvmJitToInterpPunt), r1);
     opReg(cUnit, kOpBlx, r1);
 }
@@ -1313,9 +1313,9 @@
        genPuntToInterp(cUnit, mir->offset);
        return;
     }
-    int entryAddr = offsetof(InterpState,
+    int entryAddr = offsetof(Thread,
                              jitToInterpEntries.dvmJitToInterpSingleStep);
-    loadWordDisp(cUnit, rGLUE, entryAddr, r2);
+    loadWordDisp(cUnit, rSELF, entryAddr, r2);
     /* r0 = dalvik pc */
     loadConstant(cUnit, r0, (int) (cUnit->method->insns + mir->offset));
     /* r1 = dalvik pc of following instruction */
@@ -1342,7 +1342,7 @@
     dvmCompilerFlushAllRegs(cUnit);   /* Send everything to home location */
     RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0);
     loadValueDirectFixed(cUnit, rlSrc, r1);
-    loadWordDisp(cUnit, rGLUE, offsetof(InterpState, self), r0);
+    genRegCopy(cUnit, r0, rSELF);
     genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL);
     if (isEnter) {
         /* Get dPC of next insn */
@@ -1368,18 +1368,16 @@
 #endif
 
 /*
- * Fetch *InterpState->pSelfSuspendCount. If the suspend count is non-zero,
+ * Fetch *self->suspendCount. If the suspend count is non-zero,
  * punt to the interpreter.
  */
 static void genSuspendPoll(CompilationUnit *cUnit, MIR *mir)
 {
     int rTemp = dvmCompilerAllocTemp(cUnit);
     ArmLIR *ld;
-    ld = loadWordDisp(cUnit, rGLUE, offsetof(InterpState, pSelfSuspendCount),
+    ld = loadWordDisp(cUnit, rSELF, offsetof(Thread, suspendCount),
                       rTemp);
     setMemRefType(ld, true /* isLoad */, kMustNotAlias);
-    ld = loadWordDisp(cUnit, rTemp, 0, rTemp);
-    setMemRefType(ld, true /* isLoad */, kMustNotAlias);
     genRegImmCheck(cUnit, kArmCondNe, rTemp, 0, mir->offset, NULL);
 }
 
@@ -1834,16 +1832,13 @@
     RegLocation rlResult;
     switch (dalvikOpcode) {
         case OP_MOVE_EXCEPTION: {
-            int offset = offsetof(InterpState, self);
             int exOffset = offsetof(Thread, exception);
-            int selfReg = dvmCompilerAllocTemp(cUnit);
             int resetReg = dvmCompilerAllocTemp(cUnit);
             RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0);
             rlResult = dvmCompilerEvalLoc(cUnit, rlDest, kCoreReg, true);
-            loadWordDisp(cUnit, rGLUE, offset, selfReg);
+            loadWordDisp(cUnit, rSELF, exOffset, rlResult.lowReg);
             loadConstant(cUnit, resetReg, 0);
-            loadWordDisp(cUnit, selfReg, exOffset, rlResult.lowReg);
-            storeWordDisp(cUnit, selfReg, exOffset, resetReg);
+            storeWordDisp(cUnit, rSELF, exOffset, resetReg);
             storeValue(cUnit, rlDest, rlResult);
            break;
         }
@@ -3235,7 +3230,7 @@
 
             LOAD_FUNC_ADDR(cUnit, r7, (int) dvmJitToPatchPredictedChain);
 
-            genRegCopy(cUnit, r1, rGLUE);
+            genRegCopy(cUnit, r1, rSELF);
             genRegCopy(cUnit, r2, r9);
             genRegCopy(cUnit, r3, r10);
 
@@ -3584,8 +3579,8 @@
     dvmCompilerClobberCallRegs(cUnit);
     dvmCompilerClobber(cUnit, r4PC);
     dvmCompilerClobber(cUnit, r7);
-    int offset = offsetof(InterpState, retval);
-    opRegRegImm(cUnit, kOpAdd, r4PC, rGLUE, offset);
+    int offset = offsetof(Thread, retval);
+    opRegRegImm(cUnit, kOpAdd, r4PC, rSELF, offset);
     opImm(cUnit, kOpPush, (1<<r4PC) | (1<<r7));
     LOAD_FUNC_ADDR(cUnit, r4PC, fn);
     genExportPC(cUnit, mir);
@@ -3713,8 +3708,8 @@
      * instructions fit the predefined cell size.
      */
     insertChainingSwitch(cUnit);
-    newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
-            offsetof(InterpState,
+    newLIR3(cUnit, kThumbLdrRRI5, r0, rSELF,
+            offsetof(Thread,
                      jitToInterpEntries.dvmJitToInterpNormal) >> 2);
     newLIR1(cUnit, kThumbBlxR, r0);
     addWordData(cUnit, (int) (cUnit->method->insns + offset), true);
@@ -3732,8 +3727,8 @@
      * instructions fit the predefined cell size.
      */
     insertChainingSwitch(cUnit);
-    newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
-            offsetof(InterpState,
+    newLIR3(cUnit, kThumbLdrRRI5, r0, rSELF,
+            offsetof(Thread,
                      jitToInterpEntries.dvmJitToInterpTraceSelect) >> 2);
     newLIR1(cUnit, kThumbBlxR, r0);
     addWordData(cUnit, (int) (cUnit->method->insns + offset), true);
@@ -3749,12 +3744,12 @@
      */
     insertChainingSwitch(cUnit);
 #if defined(WITH_SELF_VERIFICATION)
-    newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
-        offsetof(InterpState,
+    newLIR3(cUnit, kThumbLdrRRI5, r0, rSELF,
+        offsetof(Thread,
                  jitToInterpEntries.dvmJitToInterpBackwardBranch) >> 2);
 #else
-    newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
-        offsetof(InterpState, jitToInterpEntries.dvmJitToInterpNormal) >> 2);
+    newLIR3(cUnit, kThumbLdrRRI5, r0, rSELF,
+        offsetof(Thread, jitToInterpEntries.dvmJitToInterpNormal) >> 2);
 #endif
     newLIR1(cUnit, kThumbBlxR, r0);
     addWordData(cUnit, (int) (cUnit->method->insns + offset), true);
@@ -3769,8 +3764,8 @@
      * instructions fit the predefined cell size.
      */
     insertChainingSwitch(cUnit);
-    newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
-            offsetof(InterpState,
+    newLIR3(cUnit, kThumbLdrRRI5, r0, rSELF,
+            offsetof(Thread,
                      jitToInterpEntries.dvmJitToInterpTraceSelect) >> 2);
     newLIR1(cUnit, kThumbBlxR, r0);
     addWordData(cUnit, (int) (callee->insns), true);
@@ -4231,7 +4226,7 @@
                 case kExceptionHandling:
                     labelList[i].opcode = kArmPseudoEHBlockLabel;
                     if (cUnit->pcReconstructionList.numUsed) {
-                        loadWordDisp(cUnit, rGLUE, offsetof(InterpState,
+                        loadWordDisp(cUnit, rSELF, offsetof(Thread,
                                      jitToInterpEntries.dvmJitToInterpPunt),
                                      r1);
                         opReg(cUnit, kOpBlx, r1);
@@ -4525,7 +4520,7 @@
      */
     if (cUnit->switchOverflowPad) {
         loadConstant(cUnit, r0, (int) cUnit->switchOverflowPad);
-        loadWordDisp(cUnit, rGLUE, offsetof(InterpState,
+        loadWordDisp(cUnit, rSELF, offsetof(Thread,
                      jitToInterpEntries.dvmJitToInterpNoChain), r2);
         opRegReg(cUnit, kOpAdd, r1, r1);
         opRegRegReg(cUnit, kOpAdd, r4PC, r0, r1);
diff --git a/vm/compiler/codegen/arm/Thumb/Gen.c b/vm/compiler/codegen/arm/Thumb/Gen.c
index c5d06de..7205530 100644
--- a/vm/compiler/codegen/arm/Thumb/Gen.c
+++ b/vm/compiler/codegen/arm/Thumb/Gen.c
@@ -214,14 +214,14 @@
 
 static bool genInlinedAbsFloat(CompilationUnit *cUnit, MIR *mir)
 {
-    int offset = offsetof(InterpState, retval);
+    int offset = offsetof(Thread, retval);
     RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0);
     int reg0 = loadValue(cUnit, rlSrc, kCoreReg).lowReg;
     int signMask = dvmCompilerAllocTemp(cUnit);
     loadConstant(cUnit, signMask, 0x7fffffff);
     newLIR2(cUnit, kThumbAndRR, reg0, signMask);
     dvmCompilerFreeTemp(cUnit, signMask);
-    storeWordDisp(cUnit, rGLUE, offset, reg0);
+    storeWordDisp(cUnit, rSELF, offset, reg0);
     //TUNING: rewrite this to not clobber
     dvmCompilerClobber(cUnit, reg0);
     return false;
@@ -229,17 +229,17 @@
 
 static bool genInlinedAbsDouble(CompilationUnit *cUnit, MIR *mir)
 {
-    int offset = offsetof(InterpState, retval);
+    int offset = offsetof(Thread, retval);
     RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1);
     RegLocation regSrc = loadValueWide(cUnit, rlSrc, kCoreReg);
     int reglo = regSrc.lowReg;
     int reghi = regSrc.highReg;
     int signMask = dvmCompilerAllocTemp(cUnit);
     loadConstant(cUnit, signMask, 0x7fffffff);
-    storeWordDisp(cUnit, rGLUE, offset, reglo);
+    storeWordDisp(cUnit, rSELF, offset, reglo);
     newLIR2(cUnit, kThumbAndRR, reghi, signMask);
     dvmCompilerFreeTemp(cUnit, signMask);
-    storeWordDisp(cUnit, rGLUE, offset + 4, reghi);
+    storeWordDisp(cUnit, rSELF, offset + 4, reghi);
     //TUNING: rewrite this to not clobber
     dvmCompilerClobber(cUnit, reghi);
     return false;
@@ -248,7 +248,7 @@
 /* No select in thumb, so we need to branch.  Thumb2 will do better */
 static bool genInlinedMinMaxInt(CompilationUnit *cUnit, MIR *mir, bool isMin)
 {
-    int offset = offsetof(InterpState, retval);
+    int offset = offsetof(Thread, retval);
     RegLocation rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 0);
     RegLocation rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 1);
     int reg0 = loadValue(cUnit, rlSrc1, kCoreReg).lowReg;
@@ -259,7 +259,7 @@
     newLIR2(cUnit, kThumbMovRR, reg0, reg1);
     ArmLIR *target = newLIR0(cUnit, kArmPseudoTargetLabel);
     target->defMask = ENCODE_ALL;
-    newLIR3(cUnit, kThumbStrRRI5, reg0, rGLUE, offset >> 2);
+    newLIR3(cUnit, kThumbStrRRI5, reg0, rSELF, offset >> 2);
     branch1->generic.target = (LIR *)target;
     //TUNING: rewrite this to not clobber
     dvmCompilerClobber(cUnit,reg0);
diff --git a/vm/compiler/codegen/arm/Thumb2/Gen.c b/vm/compiler/codegen/arm/Thumb2/Gen.c
index a0195bc..864b0b1 100644
--- a/vm/compiler/codegen/arm/Thumb2/Gen.c
+++ b/vm/compiler/codegen/arm/Thumb2/Gen.c
@@ -246,9 +246,8 @@
     loadValueDirectFixed(cUnit, rlSrc, r1);  // Get obj
     dvmCompilerLockAllTemps(cUnit);  // Prepare for explicit register usage
     dvmCompilerFreeTemp(cUnit, r4PC);  // Free up r4 for general use
-    loadWordDisp(cUnit, rGLUE, offsetof(InterpState, self), r0); // Get self
     genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL);
-    loadWordDisp(cUnit, r0, offsetof(Thread, threadId), r3); // Get threadId
+    loadWordDisp(cUnit, rSELF, offsetof(Thread, threadId), r3); // Get threadId
     newLIR3(cUnit, kThumb2Ldrex, r2, r1,
             offsetof(Object, lock) >> 2); // Get object->lock
     opRegImm(cUnit, kOpLsl, r3, LW_LOCK_OWNER_SHIFT); // Align owner
@@ -276,6 +275,7 @@
             sizeof(StackSaveArea) -
             offsetof(StackSaveArea, xtra.currentPc));
     /* Call template, and don't return */
+    genRegCopy(cUnit, r0, rSELF);
     genDispatchToHandler(cUnit, TEMPLATE_MONITOR_ENTER);
     // Resume here
     target = newLIR0(cUnit, kArmPseudoTargetLabel);
@@ -301,10 +301,9 @@
     loadValueDirectFixed(cUnit, rlSrc, r1);  // Get obj
     dvmCompilerLockAllTemps(cUnit);  // Prepare for explicit register usage
     dvmCompilerFreeTemp(cUnit, r4PC);  // Free up r4 for general use
-    loadWordDisp(cUnit, rGLUE, offsetof(InterpState, self), r0); // Get self
     genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL);
     loadWordDisp(cUnit, r1, offsetof(Object, lock), r2); // Get object->lock
-    loadWordDisp(cUnit, r0, offsetof(Thread, threadId), r3); // Get threadId
+    loadWordDisp(cUnit, rSELF, offsetof(Thread, threadId), r3); // Get threadId
     // Is lock unheld on lock or held by us (==threadId) on unlock?
     opRegRegImm(cUnit, kOpAnd, r7, r2,
                 (LW_HASH_STATE_MASK << LW_HASH_STATE_SHIFT));
@@ -325,6 +324,7 @@
     loadConstant(cUnit, r3, (int) (cUnit->method->insns + mir->offset));
 
     LOAD_FUNC_ADDR(cUnit, r7, (int)dvmUnlockObject);
+    genRegCopy(cUnit, r0, rSELF);
     // Export PC (part 2)
     newLIR3(cUnit, kThumb2StrRRI8Predec, r3, rFP,
             sizeof(StackSaveArea) -
diff --git a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
index c857fa5..076f5f1 100644
--- a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c
@@ -74,9 +74,9 @@
      * EA is calculated by doing "Rn + imm5 << 2". Make sure that the last
      * offset from the struct is less than 128.
      */
-    if ((offsetof(InterpState, jitToInterpEntries) +
+    if ((offsetof(Thread, jitToInterpEntries) +
          sizeof(struct JitToInterpEntries)) >= 128) {
-        LOGE("InterpState.jitToInterpEntries size overflow");
+        LOGE("Thread.jitToInterpEntries size overflow");
         dvmAbort();
     }
 
diff --git a/vm/compiler/codegen/arm/armv5te/ArchVariant.c b/vm/compiler/codegen/arm/armv5te/ArchVariant.c
index 0f16839..73d27f9 100644
--- a/vm/compiler/codegen/arm/armv5te/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv5te/ArchVariant.c
@@ -74,9 +74,9 @@
      * EA is calculated by doing "Rn + imm5 << 2". Make sure that the last
      * offset from the struct is less than 128.
      */
-    if ((offsetof(InterpState, jitToInterpEntries) +
+    if ((offsetof(Thread, jitToInterpEntries) +
          sizeof(struct JitToInterpEntries)) >= 128) {
-        LOGE("InterpState.jitToInterpEntries size overflow");
+        LOGE("Thread.jitToInterpEntries size overflow");
         dvmAbort();
     }
 
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
index 3df1095..bcd6a46 100644
--- a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c
@@ -69,9 +69,9 @@
      * EA is calculated by doing "Rn + imm5 << 2". Make sure that the last
      * offset from the struct is less than 128.
      */
-    if ((offsetof(InterpState, jitToInterpEntries) +
+    if ((offsetof(Thread, jitToInterpEntries) +
          sizeof(struct JitToInterpEntries)) >= 128) {
-        LOGE("InterpState.jitToInterpEntries size overflow");
+        LOGE("Thread.jitToInterpEntries size overflow");
         dvmAbort();
     }
 
diff --git a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
index 3df1095..bcd6a46 100644
--- a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
+++ b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c
@@ -69,9 +69,9 @@
      * EA is calculated by doing "Rn + imm5 << 2". Make sure that the last
      * offset from the struct is less than 128.
      */
-    if ((offsetof(InterpState, jitToInterpEntries) +
+    if ((offsetof(Thread, jitToInterpEntries) +
          sizeof(struct JitToInterpEntries)) >= 128) {
-        LOGE("InterpState.jitToInterpEntries size overflow");
+        LOGE("Thread.jitToInterpEntries size overflow");
         dvmAbort();
     }
 
diff --git a/vm/compiler/codegen/x86/Assemble.c b/vm/compiler/codegen/x86/Assemble.c
index dbb9b02..d583001 100644
--- a/vm/compiler/codegen/x86/Assemble.c
+++ b/vm/compiler/codegen/x86/Assemble.c
@@ -99,7 +99,7 @@
  *      next safe point.
  */
 const Method *dvmJitToPatchPredictedChain(const Method *method,
-                                          InterpState *interpState,
+                                          Thread *self,
                                           PredictedChainingCell *cell,
                                           const ClassObject *clazz)
 {
diff --git a/vm/compiler/codegen/x86/CodegenDriver.c b/vm/compiler/codegen/x86/CodegenDriver.c
index e440e37..a5ef56a 100644
--- a/vm/compiler/codegen/x86/CodegenDriver.c
+++ b/vm/compiler/codegen/x86/CodegenDriver.c
@@ -46,7 +46,7 @@
     loadConstant(cUnit, rPC, (int)(cUnit->method->insns + offset));
     loadWordDisp(cUnit, rEBP, 0, rECX);  // Get glue
     loadWordDisp(cUnit, rECX,
-                 offsetof(InterpState, jitToInterpEntries.dvmJitToInterpPunt),
+                 offsetof(Thread, jitToInterpEntries.dvmJitToInterpPunt),
                  rEAX);
     opReg(cUnit, kOpUncondBr, rEAX);
 }
@@ -68,7 +68,7 @@
        genPuntToInterp(cUnit, mir->offset);
        return;
     }
-    int entryAddr = offsetof(InterpState,
+    int entryAddr = offsetof(Thread,
                              jitToInterpEntries.dvmJitToInterpSingleStep);
     loadWordDisp(cUnit, rEBP, 0, rECX);  // Get glue
     loadWordDisp(cUnit, rECX, entryAddr, rEAX); // rEAX<- entry address
diff --git a/vm/compiler/codegen/x86/ia32/ArchVariant.c b/vm/compiler/codegen/x86/ia32/ArchVariant.c
index 931189f..4ccd56f 100644
--- a/vm/compiler/codegen/x86/ia32/ArchVariant.c
+++ b/vm/compiler/codegen/x86/ia32/ArchVariant.c
@@ -74,7 +74,7 @@
      * EA is calculated by doing "Rn + imm5 << 2", make sure that the last
      * offset from the struct is less than 128.
      */
-    assert((offsetof(InterpState, jitToInterpEntries) +
+    assert((offsetof(Thread, jitToInterpEntries) +
             sizeof(struct JitToInterpEntries)) <= 128);
     return true;
 }
diff --git a/vm/compiler/template/armv5te-vfp/TEMPLATE_RESTORE_STATE.S b/vm/compiler/template/armv5te-vfp/TEMPLATE_RESTORE_STATE.S
index ec80139..196d082 100644
--- a/vm/compiler/template/armv5te-vfp/TEMPLATE_RESTORE_STATE.S
+++ b/vm/compiler/template/armv5te-vfp/TEMPLATE_RESTORE_STATE.S
@@ -1,9 +1,9 @@
     /*
      * This handler restores state following a selfVerification memory access.
      * On entry:
-     *    r0 - offset from rGLUE to the 1st element of the coreRegs save array.
+     *    r0 - offset from rSELF to the 1st element of the coreRegs save array.
      */
-    add     r0, r0, rGLUE               @ pointer to heapArgSpace.coreRegs[0]
+    add     r0, r0, rSELF               @ pointer to heapArgSpace.coreRegs[0]
     add     r0, #64                     @ pointer to heapArgSpace.fpRegs[0]
     vldmia  r0, {d0-d15}
     sub     r0, #64                     @ pointer to heapArgSpace.coreRegs[0]
diff --git a/vm/compiler/template/armv5te-vfp/TEMPLATE_SAVE_STATE.S b/vm/compiler/template/armv5te-vfp/TEMPLATE_SAVE_STATE.S
index 1bd02c8..11f62b7 100644
--- a/vm/compiler/template/armv5te-vfp/TEMPLATE_SAVE_STATE.S
+++ b/vm/compiler/template/armv5te-vfp/TEMPLATE_SAVE_STATE.S
@@ -3,7 +3,7 @@
      * On entry:
      *    Top of stack + 4: r7 value to save
      *    Top of stack + 0: r0 value to save
-     *    r0 - offset from rGLUE to the beginning of the heapArgSpace record
+     *    r0 - offset from rSELF to the beginning of the heapArgSpace record
      *    r7 - the value of regMap
      *
      * The handler must save regMap, r0-r12 and then return with r0-r12
@@ -11,7 +11,7 @@
      * the values on the stack - not the ones in those registers on entry.
      * Finally, the two registers previously pushed must be popped.
      */
-    add     r0, r0, rGLUE               @ pointer to heapArgSpace
+    add     r0, r0, rSELF               @ pointer to heapArgSpace
     stmia   r0!, {r7}                   @ save regMap
     ldr     r7, [r13, #0]               @ recover r0 value
     stmia   r0!, {r7}                   @ save r0
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INTERPRET.S b/vm/compiler/template/armv5te/TEMPLATE_INTERPRET.S
index 0163ce0..9f24887 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INTERPRET.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INTERPRET.S
@@ -9,7 +9,7 @@
      *        r1 - the Dalvik PC to begin interpretation.
      *    else
      *        [lr, #3] contains Dalvik PC to begin interpretation
-     *    rGLUE - pointer to interpState
+     *    rSELF - pointer to thread
      *    rFP - Dalvik frame pointer
      */
     cmp     lr, #0
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
index b6a8540..503d190 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
@@ -8,15 +8,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 $chaintgt:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -32,17 +31,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
index c3390ed..8681532 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
@@ -1,12 +1,11 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -16,7 +15,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -27,25 +25,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -55,24 +53,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
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 72fe910..12b5e61 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
@@ -6,14 +6,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -39,17 +38,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_PREDICTED_CHAIN.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_PREDICTED_CHAIN.S
index 6bce7bf..9dd4ff8 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_PREDICTED_CHAIN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_PREDICTED_CHAIN.S
@@ -26,7 +26,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -48,7 +48,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
diff --git a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
index 8e7f728..344a0da 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER.S
@@ -14,10 +14,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r0, [r0]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
+    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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 5cf26e7..cc57e2b 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_MONITOR_ENTER_DEBUG.S
@@ -14,11 +14,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r1, [rGLUE, #offGlue_self]
-    ldr     r0, [r0]
-    ldr     r1, [r1, #offThread_exception]
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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_PERIODIC_PROFILING.S b/vm/compiler/template/armv5te/TEMPLATE_PERIODIC_PROFILING.S
index 7f71096..c0f7d6e 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_PERIODIC_PROFILING.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_PERIODIC_PROFILING.S
@@ -9,7 +9,7 @@
      *    we are arriving from thumb mode, lr will have its low bit set.
      */
      ldr    r0, [lr,#-11]
-     ldr    r1, [rGLUE, #offGlue_pProfileCountdown]
+     ldr    r1, [rSELF, #offThread_pProfileCountdown]
      ldr    r2, [r0]                    @ get counter
      ldr    r3, [r1]                    @ get countdown timer
      add    r2, #1
diff --git a/vm/compiler/template/armv5te/TEMPLATE_RESTORE_STATE.S b/vm/compiler/template/armv5te/TEMPLATE_RESTORE_STATE.S
index e3719db..25b4ffa 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_RESTORE_STATE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_RESTORE_STATE.S
@@ -1,8 +1,8 @@
     /*
      * This handler restores state following a selfVerification memory access.
      * On entry:
-     *    r0 - offset from rGLUE to the 1st element of the coreRegs save array.
+     *    r0 - offset from rSELF to the 1st element of the coreRegs save array.
      */
-    add     r0, r0, rGLUE               @ pointer to heapArgSpace.coreRegs[0]
+    add     r0, r0, rSELF               @ pointer to heapArgSpace.coreRegs[0]
     ldmia   r0, {r0-r12}
     bx      lr
diff --git a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
index d0bbbfc..c2926a3 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
@@ -8,14 +8,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -24,7 +24,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -34,16 +33,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -51,8 +49,8 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
diff --git a/vm/compiler/template/armv5te/TEMPLATE_SAVE_STATE.S b/vm/compiler/template/armv5te/TEMPLATE_SAVE_STATE.S
index df2d1e6..1c3aa4d 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_SAVE_STATE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_SAVE_STATE.S
@@ -3,7 +3,7 @@
      * On entry:
      *    Top of stack + 4: r7 value to save
      *    Top of stack + 0: r0 value to save
-     *    r0 - offset from rGLUE to the beginning of the heapArgSpace record
+     *    r0 - offset from rSELF to the beginning of the heapArgSpace record
      *    r7 - the value of regMap
      *
      * The handler must save regMap, r0-r12 and then return with r0-r12
@@ -11,7 +11,7 @@
      * the values on the stack - not the ones in those registers on entry.
      * Finally, the two registers previously pushed must be popped.
      */
-    add     r0, r0, rGLUE               @ pointer to heapArgSpace
+    add     r0, r0, rSELF               @ pointer to heapArgSpace
     stmia   r0!, {r7}                   @ save regMap
     ldr     r7, [r13, #0]               @ recover r0 value
     stmia   r0!, {r7}                   @ save r0
diff --git a/vm/compiler/template/armv5te/footer.S b/vm/compiler/template/armv5te/footer.S
index 0a4e92d..4164d4e 100644
--- a/vm/compiler/template/armv5te/footer.S
+++ b/vm/compiler/template/armv5te/footer.S
@@ -9,24 +9,23 @@
 .LinvokeNative:
     @ Prep for the native call
     @ r1 = newFP, r0 = methodToCall
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     mov     r2, #0
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
-    ldr     lr, [rGLUE, #offGlue_pInterpBreak]
+    ldr     lr, [rSELF, #offThread_pInterpBreak]
     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, rGLUE, #offGlue_retval  @ r1<- &retval
+    add     r1, rSELF, #offThread_retval  @ r1<- &retval
+    mov     r3, rSELF                   @ arg3<- self
     ands    lr, #kSubModeMethodTrace
     beq     121f                        @ hop if not profiling
-    @ r2: methodToCall, r6: rGLUE
+    @ r2: methodToCall, r6: rSELF
     stmfd   sp!, {r2,r6}
     stmfd   sp!, {r0-r3}
     mov     r0, r2
@@ -47,24 +46,24 @@
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
     @ Refresh Jit's on/off status
-    ldr     r3, [rGLUE, #offGlue_ppJitProfTable]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
     ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    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
-    str     r3, [rGLUE, #offGlue_pJitProfTable]  @ cache current JitProfTable
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the new mode
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -86,9 +85,8 @@
 .LdeadFood:
     .word   0xdeadf00d
 #endif
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     mov     r2, #0
-    str     r2, [r3, #offThread_inJitCodeCache] @ in interpreter land
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land
     ldr     r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func
     ldr     rIBASE, .LdvmAsmInstructionStart    @ same as above
     mov     rPC, r0                 @ reload the faulting Dalvik address
diff --git a/vm/compiler/template/armv5te/header.S b/vm/compiler/template/armv5te/header.S
index e6b3362..6dcf5b9 100644
--- a/vm/compiler/template/armv5te/header.S
+++ b/vm/compiler/template/armv5te/header.S
@@ -55,7 +55,7 @@
 
   reg nick      purpose
   r5  rFP       interpreted frame pointer, used for accessing locals and args
-  r6  rGLUE     MterpGlue pointer
+  r6  rSELF     thread pointer
 
 The following registers have fixed assignments in mterp but are scratch
 registers in compiled code
@@ -73,7 +73,7 @@
 /* single-purpose registers, given names for clarity */
 #define rPC     r4
 #define rFP     r5
-#define rGLUE   r6
+#define rSELF   r6
 #define rINST   r7
 #define rIBASE  r8
 
diff --git a/vm/compiler/template/ia32/TEMPLATE_INTERPRET.S b/vm/compiler/template/ia32/TEMPLATE_INTERPRET.S
index 68b2d0d..5c7bf7c 100644
--- a/vm/compiler/template/ia32/TEMPLATE_INTERPRET.S
+++ b/vm/compiler/template/ia32/TEMPLATE_INTERPRET.S
@@ -15,12 +15,20 @@
      * On entry:
      *    (TOS)<- return pointer or pointer to dPC
      */
-     movl   rGLUE,%ecx
+
+/*
+ * FIXME - this won't work as-is.  The cache boundaries are not
+ * set up until later.  Perhaps rething this whole thing.  Do we
+ * really need an interpret teplate?
+ */
+
+
+     movl   rSELF,%ecx
      movl   $$.LinterpPunt,%edx
      pop    %eax
-     cmpl   %eax,offGlue_jitCacheEnd(%ecx)
+     /*cmpl   %eax,offThread_jitCacheEnd(%ecx)*/
      ja     1f
-     cmpl   %eax,offGlue_jitCacheStart(%ecx)
+     /*cmpl   %eax,offThread_jitCacheStart(%ecx)*/
      jb     1f
      movl   %eax,rPC
 1:
diff --git a/vm/compiler/template/ia32/header.S b/vm/compiler/template/ia32/header.S
index a67ba6e..ea2cc0f 100644
--- a/vm/compiler/template/ia32/header.S
+++ b/vm/compiler/template/ia32/header.S
@@ -17,7 +17,7 @@
 #if defined(WITH_JIT)
 
 /* Subset of defines from mterp/x86/header.S */
-#define rGLUE (%ebp)
+#define rSELF (%ebp)
 #define rPC   %esi
 #define rFP   %edi
 #define rINST %ebx
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
index 7615b95..2e941e5 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
@@ -62,7 +62,7 @@
 
   reg nick      purpose
   r5  rFP       interpreted frame pointer, used for accessing locals and args
-  r6  rGLUE     MterpGlue pointer
+  r6  rSELF     thread pointer
 
 The following registers have fixed assignments in mterp but are scratch
 registers in compiled code
@@ -80,7 +80,7 @@
 /* single-purpose registers, given names for clarity */
 #define rPC     r4
 #define rFP     r5
-#define rGLUE   r6
+#define rSELF   r6
 #define rINST   r7
 #define rIBASE  r8
 
@@ -169,14 +169,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -185,7 +185,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -195,16 +194,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -212,10 +210,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 /* ------------------------------ */
@@ -231,14 +229,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -264,17 +261,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -300,15 +296,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -324,17 +319,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -374,7 +368,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -396,7 +390,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -414,13 +408,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -430,7 +423,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -441,25 +433,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -469,24 +461,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1384,7 +1376,7 @@
      *        r1 - the Dalvik PC to begin interpretation.
      *    else
      *        [lr, #3] contains Dalvik PC to begin interpretation
-     *    rGLUE - pointer to interpState
+     *    rSELF - pointer to thread
      *    rFP - Dalvik frame pointer
      */
     cmp     lr, #0
@@ -1425,10 +1417,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r0, [r0]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
+    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1456,11 +1448,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r1, [rGLUE, #offGlue_self]
-    ldr     r0, [r0]
-    ldr     r1, [r1, #offThread_exception]
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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
@@ -1489,7 +1480,7 @@
      *    we are arriving from thumb mode, lr will have its low bit set.
      */
      ldr    r0, [lr,#-11]
-     ldr    r1, [rGLUE, #offGlue_pProfileCountdown]
+     ldr    r1, [rSELF, #offThread_pProfileCountdown]
      ldr    r2, [r0]                    @ get counter
      ldr    r3, [r1]                    @ get countdown timer
      add    r2, #1
@@ -1522,14 +1513,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1538,7 +1529,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -1548,16 +1538,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -1565,10 +1554,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 #undef TEMPLATE_INLINE_PROFILING
@@ -1588,14 +1577,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1621,17 +1609,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -1661,15 +1648,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1685,17 +1671,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -1739,7 +1724,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -1761,7 +1746,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -1783,13 +1768,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1799,7 +1783,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -1810,25 +1793,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -1838,24 +1821,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1882,24 +1865,23 @@
 .LinvokeNative:
     @ Prep for the native call
     @ r1 = newFP, r0 = methodToCall
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     mov     r2, #0
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
-    ldr     lr, [rGLUE, #offGlue_pInterpBreak]
+    ldr     lr, [rSELF, #offThread_pInterpBreak]
     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, rGLUE, #offGlue_retval  @ r1<- &retval
+    add     r1, rSELF, #offThread_retval  @ r1<- &retval
+    mov     r3, rSELF                   @ arg3<- self
     ands    lr, #kSubModeMethodTrace
     beq     121f                        @ hop if not profiling
-    @ r2: methodToCall, r6: rGLUE
+    @ r2: methodToCall, r6: rSELF
     stmfd   sp!, {r2,r6}
     stmfd   sp!, {r0-r3}
     mov     r0, r2
@@ -1920,24 +1902,24 @@
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
     @ Refresh Jit's on/off status
-    ldr     r3, [rGLUE, #offGlue_ppJitProfTable]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
     ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    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
-    str     r3, [rGLUE, #offGlue_pJitProfTable]  @ cache current JitProfTable
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the new mode
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1959,9 +1941,8 @@
 .LdeadFood:
     .word   0xdeadf00d
 #endif
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     mov     r2, #0
-    str     r2, [r3, #offThread_inJitCodeCache] @ in interpreter land
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land
     ldr     r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func
     ldr     rIBASE, .LdvmAsmInstructionStart    @ same as above
     mov     rPC, r0                 @ reload the faulting Dalvik address
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
index 2d69a3d..aebad92 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
@@ -62,7 +62,7 @@
 
   reg nick      purpose
   r5  rFP       interpreted frame pointer, used for accessing locals and args
-  r6  rGLUE     MterpGlue pointer
+  r6  rSELF     thread pointer
 
 The following registers have fixed assignments in mterp but are scratch
 registers in compiled code
@@ -80,7 +80,7 @@
 /* single-purpose registers, given names for clarity */
 #define rPC     r4
 #define rFP     r5
-#define rGLUE   r6
+#define rSELF   r6
 #define rINST   r7
 #define rIBASE  r8
 
@@ -169,14 +169,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -185,7 +185,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -195,16 +194,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -212,10 +210,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 /* ------------------------------ */
@@ -231,14 +229,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -264,17 +261,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -300,15 +296,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -324,17 +319,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -374,7 +368,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -396,7 +390,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -414,13 +408,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -430,7 +423,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -441,25 +433,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -469,24 +461,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1115,7 +1107,7 @@
      *        r1 - the Dalvik PC to begin interpretation.
      *    else
      *        [lr, #3] contains Dalvik PC to begin interpretation
-     *    rGLUE - pointer to interpState
+     *    rSELF - pointer to thread
      *    rFP - Dalvik frame pointer
      */
     cmp     lr, #0
@@ -1156,10 +1148,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r0, [r0]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
+    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1187,11 +1179,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r1, [rGLUE, #offGlue_self]
-    ldr     r0, [r0]
-    ldr     r1, [r1, #offThread_exception]
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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
@@ -1220,7 +1211,7 @@
      *    we are arriving from thumb mode, lr will have its low bit set.
      */
      ldr    r0, [lr,#-11]
-     ldr    r1, [rGLUE, #offGlue_pProfileCountdown]
+     ldr    r1, [rSELF, #offThread_pProfileCountdown]
      ldr    r2, [r0]                    @ get counter
      ldr    r3, [r1]                    @ get countdown timer
      add    r2, #1
@@ -1253,14 +1244,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1269,7 +1260,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -1279,16 +1269,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -1296,10 +1285,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 #undef TEMPLATE_INLINE_PROFILING
@@ -1319,14 +1308,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1352,17 +1340,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -1392,15 +1379,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1416,17 +1402,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -1470,7 +1455,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -1492,7 +1477,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -1514,13 +1499,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1530,7 +1514,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -1541,25 +1524,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -1569,24 +1552,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1613,24 +1596,23 @@
 .LinvokeNative:
     @ Prep for the native call
     @ r1 = newFP, r0 = methodToCall
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     mov     r2, #0
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
-    ldr     lr, [rGLUE, #offGlue_pInterpBreak]
+    ldr     lr, [rSELF, #offThread_pInterpBreak]
     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, rGLUE, #offGlue_retval  @ r1<- &retval
+    add     r1, rSELF, #offThread_retval  @ r1<- &retval
+    mov     r3, rSELF                   @ arg3<- self
     ands    lr, #kSubModeMethodTrace
     beq     121f                        @ hop if not profiling
-    @ r2: methodToCall, r6: rGLUE
+    @ r2: methodToCall, r6: rSELF
     stmfd   sp!, {r2,r6}
     stmfd   sp!, {r0-r3}
     mov     r0, r2
@@ -1651,24 +1633,24 @@
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
     @ Refresh Jit's on/off status
-    ldr     r3, [rGLUE, #offGlue_ppJitProfTable]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
     ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    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
-    str     r3, [rGLUE, #offGlue_pJitProfTable]  @ cache current JitProfTable
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the new mode
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1690,9 +1672,8 @@
 .LdeadFood:
     .word   0xdeadf00d
 #endif
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     mov     r2, #0
-    str     r2, [r3, #offThread_inJitCodeCache] @ in interpreter land
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land
     ldr     r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func
     ldr     rIBASE, .LdvmAsmInstructionStart    @ same as above
     mov     rPC, r0                 @ reload the faulting Dalvik address
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
index 5f8e808..fb1e048 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
@@ -62,7 +62,7 @@
 
   reg nick      purpose
   r5  rFP       interpreted frame pointer, used for accessing locals and args
-  r6  rGLUE     MterpGlue pointer
+  r6  rSELF     thread pointer
 
 The following registers have fixed assignments in mterp but are scratch
 registers in compiled code
@@ -80,7 +80,7 @@
 /* single-purpose registers, given names for clarity */
 #define rPC     r4
 #define rFP     r5
-#define rGLUE   r6
+#define rSELF   r6
 #define rINST   r7
 #define rIBASE  r8
 
@@ -169,14 +169,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -185,7 +185,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -195,16 +194,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -212,10 +210,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 /* ------------------------------ */
@@ -231,14 +229,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -264,17 +261,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -300,15 +296,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -324,17 +319,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -374,7 +368,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -396,7 +390,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -414,13 +408,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -430,7 +423,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -441,25 +433,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -469,24 +461,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1384,7 +1376,7 @@
      *        r1 - the Dalvik PC to begin interpretation.
      *    else
      *        [lr, #3] contains Dalvik PC to begin interpretation
-     *    rGLUE - pointer to interpState
+     *    rSELF - pointer to thread
      *    rFP - Dalvik frame pointer
      */
     cmp     lr, #0
@@ -1425,10 +1417,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r0, [r0]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
+    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1456,11 +1448,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r1, [rGLUE, #offGlue_self]
-    ldr     r0, [r0]
-    ldr     r1, [r1, #offThread_exception]
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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
@@ -1489,7 +1480,7 @@
      *    we are arriving from thumb mode, lr will have its low bit set.
      */
      ldr    r0, [lr,#-11]
-     ldr    r1, [rGLUE, #offGlue_pProfileCountdown]
+     ldr    r1, [rSELF, #offThread_pProfileCountdown]
      ldr    r2, [r0]                    @ get counter
      ldr    r3, [r1]                    @ get countdown timer
      add    r2, #1
@@ -1522,14 +1513,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1538,7 +1529,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -1548,16 +1538,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -1565,10 +1554,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 #undef TEMPLATE_INLINE_PROFILING
@@ -1588,14 +1577,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1621,17 +1609,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -1661,15 +1648,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1685,17 +1671,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -1739,7 +1724,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -1761,7 +1746,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -1783,13 +1768,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1799,7 +1783,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -1810,25 +1793,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -1838,24 +1821,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1882,24 +1865,23 @@
 .LinvokeNative:
     @ Prep for the native call
     @ r1 = newFP, r0 = methodToCall
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     mov     r2, #0
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
-    ldr     lr, [rGLUE, #offGlue_pInterpBreak]
+    ldr     lr, [rSELF, #offThread_pInterpBreak]
     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, rGLUE, #offGlue_retval  @ r1<- &retval
+    add     r1, rSELF, #offThread_retval  @ r1<- &retval
+    mov     r3, rSELF                   @ arg3<- self
     ands    lr, #kSubModeMethodTrace
     beq     121f                        @ hop if not profiling
-    @ r2: methodToCall, r6: rGLUE
+    @ r2: methodToCall, r6: rSELF
     stmfd   sp!, {r2,r6}
     stmfd   sp!, {r0-r3}
     mov     r0, r2
@@ -1920,24 +1902,24 @@
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
     @ Refresh Jit's on/off status
-    ldr     r3, [rGLUE, #offGlue_ppJitProfTable]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
     ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    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
-    str     r3, [rGLUE, #offGlue_pJitProfTable]  @ cache current JitProfTable
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the new mode
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1959,9 +1941,8 @@
 .LdeadFood:
     .word   0xdeadf00d
 #endif
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     mov     r2, #0
-    str     r2, [r3, #offThread_inJitCodeCache] @ in interpreter land
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land
     ldr     r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func
     ldr     rIBASE, .LdvmAsmInstructionStart    @ same as above
     mov     rPC, r0                 @ reload the faulting Dalvik address
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
index 0b24631..7ea4647 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
@@ -62,7 +62,7 @@
 
   reg nick      purpose
   r5  rFP       interpreted frame pointer, used for accessing locals and args
-  r6  rGLUE     MterpGlue pointer
+  r6  rSELF     thread pointer
 
 The following registers have fixed assignments in mterp but are scratch
 registers in compiled code
@@ -80,7 +80,7 @@
 /* single-purpose registers, given names for clarity */
 #define rPC     r4
 #define rFP     r5
-#define rGLUE   r6
+#define rSELF   r6
 #define rINST   r7
 #define rIBASE  r8
 
@@ -169,14 +169,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -185,7 +185,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -195,16 +194,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -212,10 +210,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 /* ------------------------------ */
@@ -231,14 +229,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -264,17 +261,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -300,15 +296,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChain:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -324,17 +319,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -374,7 +368,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -396,7 +390,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -414,13 +408,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -430,7 +423,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -441,25 +433,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -469,24 +461,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1384,7 +1376,7 @@
      *        r1 - the Dalvik PC to begin interpretation.
      *    else
      *        [lr, #3] contains Dalvik PC to begin interpretation
-     *    rGLUE - pointer to interpState
+     *    rSELF - pointer to thread
      *    rFP - Dalvik frame pointer
      */
     cmp     lr, #0
@@ -1425,10 +1417,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2                           @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r0, [r0]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
+    ldr     r3, [r3]
     ldr     r2, .LdvmJitToInterpNoChain
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    str     r3, [rSELF, #offThread_pJitProfTable]
     @ Bail to interpreter - no chain [note - r4 still contains rPC]
 #if defined(WITH_JIT_TUNING)
     mov     r0, #kHeavyweightMonitor
@@ -1456,11 +1448,10 @@
     str     r3, [r0, #offThread_inJitCodeCache]
     blx     r2             @ dvmLockObject(self, obj)
     @ refresh Jit's on/off status & test for exception
-    ldr     r0, [rGLUE, #offGlue_ppJitProfTable]
-    ldr     r1, [rGLUE, #offGlue_self]
-    ldr     r0, [r0]
-    ldr     r1, [r1, #offThread_exception]
-    str     r0, [rGLUE, #offGlue_pJitProfTable]
+    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
@@ -1489,7 +1480,7 @@
      *    we are arriving from thumb mode, lr will have its low bit set.
      */
      ldr    r0, [lr,#-11]
-     ldr    r1, [rGLUE, #offGlue_pProfileCountdown]
+     ldr    r1, [rSELF, #offThread_pProfileCountdown]
      ldr    r2, [r0]                    @ get counter
      ldr    r3, [r1]                    @ get countdown timer
      add    r2, #1
@@ -1522,14 +1513,14 @@
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve live registers
     mov     r0, r6
-    @ r0=rGlue
+    @ r0=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastJavaMethodTraceExit
     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, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     ldr     rPC, [r0, #offStackSaveArea_savedPc] @ rPC<- saveArea->savedPc
 #if !defined(WITH_SELF_VERIFICATION)
     ldr     r9,  [r0, #offStackSaveArea_returnAddr] @ r9<- chaining cell ret
@@ -1538,7 +1529,6 @@
 #endif
     ldr     r2, [r10, #(offStackSaveArea_method - sizeofStackSaveArea)]
                                         @ r2<- method we're returning to
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     cmp     r2, #0                      @ break frame?
 #if !defined(WITH_SELF_VERIFICATION)
     beq     1f                          @ bail to interpreter
@@ -1548,16 +1538,15 @@
     ldr     r1, .LdvmJitToInterpNoChainNoProfile @ defined in footer.S
     mov     rFP, r10                    @ publish new FP
     ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
-    ldr     r8, [r8]                    @ r8<- suspendCount
 
-    str     r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method
+    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
     ldr     r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
-    str     rFP, [r3, #offThread_curFrame] @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
     add     rPC, rPC, #6                @ publish new rPC (advance 6 bytes)
-    str     r0, [rGLUE, #offGlue_methodClassDex]
+    str     r0, [rSELF, #offThread_methodClassDex]
     cmp     r8, #0                      @ check the suspendCount
     movne   r9, #0                      @ clear the chaining cell address
-    str     r9, [r3, #offThread_inJitCodeCache] @ in code cache or not
+    str     r9, [rSELF, #offThread_inJitCodeCache] @ in code cache or not
     cmp     r9, #0                      @ chaining cell exists?
     blxne   r9                          @ jump to the chaining cell
 #if defined(WITH_JIT_TUNING)
@@ -1565,10 +1554,10 @@
 #endif
     mov     pc, r1                      @ callsite is interpreted
 1:
-    stmia   rGLUE, {rPC, rFP}           @ SAVE_PC_FP_TO_GLUE()
+    stmia   rSELF, {rPC, rFP}           @ SAVE_PC_FP_TO_SELF()
     ldr     r2, .LdvmMterpStdBail       @ defined in footer.S
     mov     r1, #0                      @ changeInterp = false
-    mov     r0, rGLUE                   @ Expecting rGLUE in r0
+    mov     r0, rSELF                   @ Expecting rSELF in r0
     blx     r2                          @ exit the interpreter
 
 #undef TEMPLATE_INLINE_PROFILING
@@ -1588,14 +1577,13 @@
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     ldrh    r7, [r0, #offMethod_registersSize]  @ r7<- methodToCall->regsSize
     ldrh    r2, [r0, #offMethod_outsSize]  @ r2<- methodToCall->outsSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount] @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1621,17 +1609,16 @@
 
     ldr     r10, .LdvmJitToInterpTraceSelectNoChain
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r3}                    @ preserve r0-r3
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                    @ restore r0-r3
@@ -1661,15 +1648,14 @@
     @ rPC = dalvikCallsite, r7 = methodToCall->registersSize
     @ methodToCall is guaranteed to be non-native
 .LinvokeChainProf:
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
     add     r12, lr, #2                 @ setup the punt-to-interp address
     sub     r10, r10, r2, lsl #2        @ r10<- bottom (newsave - outsSize)
-    ldr     r8, [r8]                    @ r8<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    r12                         @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1685,17 +1671,16 @@
     bxne    r12                         @ bail to the interpreter
 
     ldr     r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
-    ldr     r2, [rGLUE, #offGlue_self]      @ r2<- glue->self
 
-    @ Update "glue" values for the new method
-    str     r0, [rGLUE, #offGlue_method]    @ glue->method = methodToCall
-    str     r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ...
+    @ Update "thread" values for the new method
+    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
+    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
     mov     rFP, r1                         @ fp = newFp
-    str     rFP, [r2, #offThread_curFrame]  @ self->curFrame = newFp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = newFp
 #if defined(TEMPLATE_INLINE_PROFILING)
     stmfd   sp!, {r0-r2,lr}             @ preserve clobbered live registers
     mov     r1, r6
-    @ r0=methodToCall, r1=rGlue
+    @ r0=methodToCall, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r2,lr}             @ restore registers
@@ -1739,7 +1724,7 @@
     ldr     r3, [r0, #offObject_clazz]  @ r3 <- this->class
     ldr     r8, [r2, #4]    @ r8 <- predictedChainCell->clazz
     ldr     r0, [r2, #8]    @ r0 <- predictedChainCell->method
-    ldr     r9, [rGLUE, #offGlue_icRechainCount]   @ r1 <- shared rechainCount
+    ldr     r9, [rSELF, #offThread_icRechainCount] @ r1 <- shared rechainCount
     cmp     r3, r8          @ predicted class == actual class?
 #if defined(WITH_JIT_TUNING)
     ldr     r7, .LdvmICHitCount
@@ -1761,7 +1746,7 @@
     cmp     r8, #0          @ initialized class or not
     moveq   r1, #0
     subne   r1, r9, #1      @ count--
-    strne   r1, [rGLUE, #offGlue_icRechainCount]   @ write back to InterpState
+    strne   r1, [rSELF, #offThread_icRechainCount]  @ write back to thread
     add     lr, lr, #4      @ return to fully-resolve landing pad
     /*
      * r1 <- count
@@ -1783,13 +1768,12 @@
 /* File: armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S */
     @ r0 = methodToCall, r1 = returnCell, rPC = dalvikCallsite
     @ r7 = methodToCall->registersSize
-    ldr     r9, [rGLUE, #offGlue_interpStackEnd]    @ r9<- interpStackEnd
-    ldr     r8, [rGLUE, #offGlue_pSelfSuspendCount] @ r8<- &suspendCount
+    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
+    ldr     r8, [rSELF, #offThread_suspendCount]      @ r8<- suspendCount
     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)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- stack save area
-    ldr     r8, [r8]                    @ r3<- suspendCount (int)
     cmp     r10, r9                     @ bottom < interpStackEnd?
     bxlo    lr                          @ return to raise stack overflow excep.
     @ r1 = newFP, r0 = methodToCall, r3 = returnCell, rPC = dalvikCallsite
@@ -1799,7 +1783,6 @@
     @ set up newSaveArea
     str     rFP, [r1, #(offStackSaveArea_prevFrame - sizeofStackSaveArea)]
     str     r3, [r1, #(offStackSaveArea_returnAddr - sizeofStackSaveArea)]
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     str     r0, [r1, #(offStackSaveArea_method - sizeofStackSaveArea)]
     cmp     r8, #0                      @ suspendCount != 0
     ldr     r8, [r0, #offMethod_nativeFunc] @ r8<- method->nativeFunc
@@ -1810,25 +1793,25 @@
 #endif
 
     @ go ahead and transfer control to the native code
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
     mov     r2, #0
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in the jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
     SAVEAREA_FROM_FP(r10, r1)           @ r10<- new stack save area
 
-    mov     r2, r0                      @ r2<- methodToCall
-    mov     r0, r1                      @ r0<- newFP
-    add     r1, rGLUE, #offGlue_retval  @ r1<- &retval
+    mov     r2, r0                        @ arg2<- methodToCall
+    mov     r0, r1                        @ arg0<- newFP
+    add     r1, rSELF, #offThread_retval  @ arg1<- &retval
+    mov     r3, rSELF                     @ arg3<- self
 #if defined(TEMPLATE_INLINE_PROFILING)
-    @ r2=methodToCall, r6=rGLUE
+    @ r2=methodToCall, r6=rSELF
     stmfd   sp!, {r2,r6}                @ to be consumed after JNI return
     stmfd   sp!, {r0-r3}                @ preserve r0-r3
     mov     r0, r2
     mov     r1, r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastMethodTraceEnter
     ldmfd   sp!, {r0-r3}                @ restore r0-r3
@@ -1838,24 +1821,24 @@
 
 #if defined(TEMPLATE_INLINE_PROFILING)
     ldmfd   sp!, {r0-r1}                @ restore r2 and r6
-    @ r0=JNIMethod, r1=rGlue
+    @ r0=JNIMethod, r1=rSELF
     mov     lr, pc
     ldr     pc, .LdvmFastNativeMethodTraceExit
 #endif
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
     ldr     r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the mode properly
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the mode properly
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1882,24 +1865,23 @@
 .LinvokeNative:
     @ Prep for the native call
     @ r1 = newFP, r0 = methodToCall
-    ldr     r3, [rGLUE, #offGlue_self]      @ r3<- glue->self
     mov     r2, #0
-    ldr     r9, [r3, #offThread_jniLocal_topCookie] @ r9<- thread->localRef->...
-    str     r2, [r3, #offThread_inJitCodeCache] @ not in jit code cache
-    str     r1, [r3, #offThread_curFrame]   @ self->curFrame = newFp
+    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
+    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
     str     r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
                                         @ newFp->localRefCookie=top
-    mov     r9, r3                      @ r9<- glue->self (preserve)
-    ldr     lr, [rGLUE, #offGlue_pInterpBreak]
+    ldr     lr, [rSELF, #offThread_pInterpBreak]
     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, rGLUE, #offGlue_retval  @ r1<- &retval
+    add     r1, rSELF, #offThread_retval  @ r1<- &retval
+    mov     r3, rSELF                   @ arg3<- self
     ands    lr, #kSubModeMethodTrace
     beq     121f                        @ hop if not profiling
-    @ r2: methodToCall, r6: rGLUE
+    @ r2: methodToCall, r6: rSELF
     stmfd   sp!, {r2,r6}
     stmfd   sp!, {r0-r3}
     mov     r0, r2
@@ -1920,24 +1902,24 @@
     ldr     pc, [r2, #offMethod_nativeFunc]
 212:
     @ Refresh Jit's on/off status
-    ldr     r3, [rGLUE, #offGlue_ppJitProfTable]
+    ldr     r3, [rSELF, #offThread_ppJitProfTable]
 
-    @ native return; r9=self, r10=newSaveArea
+    @ 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, [r9, #offThread_exception] @ check for exception
+    ldr     r1, [rSELF, #offThread_exception] @ check for exception
     ldr     r3, [r3]    @ r1 <- pointer to Jit profile table
-    str     rFP, [r9, #offThread_curFrame]  @ self->curFrame = fp
+    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
     cmp     r1, #0                      @ null?
-    str     r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
+    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
-    str     r3, [rGLUE, #offGlue_pJitProfTable]  @ cache current JitProfTable
 
     @ r0 = dalvikCallsitePC
     bne     .LhandleException           @ no, handle exception
 
-    str     r2, [r9, #offThread_inJitCodeCache] @ set the new mode
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ set the new mode
     cmp     r2, #0                      @ return chaining cell still exists?
     bxne    r2                          @ yes - go ahead
 
@@ -1959,9 +1941,8 @@
 .LdeadFood:
     .word   0xdeadf00d
 #endif
-    ldr     r3, [rGLUE, #offGlue_self]  @ r3<- glue->self
     mov     r2, #0
-    str     r2, [r3, #offThread_inJitCodeCache] @ in interpreter land
+    str     r2, [rSELF, #offThread_inJitCodeCache] @ in interpreter land
     ldr     r1, .LdvmMterpCommonExceptionThrown @ PIC way of getting &func
     ldr     rIBASE, .LdvmAsmInstructionStart    @ same as above
     mov     rPC, r0                 @ reload the faulting Dalvik address
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-ia32.S b/vm/compiler/template/out/CompilerTemplateAsm-ia32.S
index ae548e4..4e86d09 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-ia32.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-ia32.S
@@ -24,7 +24,7 @@
 #if defined(WITH_JIT)
 
 /* Subset of defines from mterp/x86/header.S */
-#define rGLUE (%ebp)
+#define rSELF (%ebp)
 #define rPC   %esi
 #define rFP   %edi
 #define rINST %ebx
@@ -73,12 +73,20 @@
      * On entry:
      *    (TOS)<- return pointer or pointer to dPC
      */
-     movl   rGLUE,%ecx
+
+/*
+ * FIXME - this won't work as-is.  The cache boundaries are not
+ * set up until later.  Perhaps rething this whole thing.  Do we
+ * really need an interpret teplate?
+ */
+
+
+     movl   rSELF,%ecx
      movl   $.LinterpPunt,%edx
      pop    %eax
-     cmpl   %eax,offGlue_jitCacheEnd(%ecx)
+     /*cmpl   %eax,offThread_jitCacheEnd(%ecx)*/
      ja     1f
-     cmpl   %eax,offGlue_jitCacheStart(%ecx)
+     /*cmpl   %eax,offThread_jitCacheStart(%ecx)*/
      jb     1f
      movl   %eax,rPC
 1: