diff --git a/src/compiler/codegen/Ralloc.h b/src/compiler/codegen/Ralloc.h
index e87da88..e343ec5 100644
--- a/src/compiler/codegen/Ralloc.h
+++ b/src/compiler/codegen/Ralloc.h
@@ -235,4 +235,5 @@
 extern void oatDumpCoreRegPool(CompilationUnit* cUint);
 extern void oatDumpFPRegPool(CompilationUnit* cUint);
 extern bool oatCheckCorePoolSanity(CompilationUnit* cUnit);
+extern RegisterInfo* oatGetRegInfo(CompilationUnit* cUnit, int reg);
 #endif // ART_SRC_COMPILER_RALLOC_H_
diff --git a/src/compiler/codegen/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index 9d3717a..7fd062d 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -97,32 +97,10 @@
     dumpRegPool(cUnit->regPool->FPRegs, cUnit->regPool->numFPRegs);
 }
 
-/* Get info for a reg. */
-STATIC RegisterInfo* getRegInfo(CompilationUnit* cUnit, int reg)
-{
-    int numRegs = cUnit->regPool->numCoreRegs;
-    RegisterInfo* p = cUnit->regPool->coreRegs;
-    int i;
-    for (i=0; i< numRegs; i++) {
-        if (p[i].reg == reg) {
-            return &p[i];
-        }
-    }
-    p = cUnit->regPool->FPRegs;
-    numRegs = cUnit->regPool->numFPRegs;
-    for (i=0; i< numRegs; i++) {
-        if (p[i].reg == reg) {
-            return &p[i];
-        }
-    }
-    LOG(FATAL) << "Tried to get info on a non-existant reg :r" << reg;
-    return NULL; // Quiet gcc
-}
-
 void oatFlushRegWide(CompilationUnit* cUnit, int reg1, int reg2)
 {
-    RegisterInfo* info1 = getRegInfo(cUnit, reg1);
-    RegisterInfo* info2 = getRegInfo(cUnit, reg2);
+    RegisterInfo* info1 = oatGetRegInfo(cUnit, reg1);
+    RegisterInfo* info2 = oatGetRegInfo(cUnit, reg2);
     DCHECK(info1 && info2 && info1->pair && info2->pair &&
            (info1->partner == info2->reg) &&
            (info2->partner == info1->reg));
@@ -146,7 +124,7 @@
 
 void oatFlushReg(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* info = getRegInfo(cUnit, reg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, reg);
     if (info->live && info->dirty) {
         info->dirty = false;
         int vReg = oatS2VReg(cUnit, info->sReg);
@@ -156,40 +134,20 @@
     }
 }
 
-/* return true if found reg to clobber */
-STATIC bool clobberRegBody(CompilationUnit* cUnit, RegisterInfo* p,
-                           int numRegs, int reg)
-{
-    int i;
-    for (i=0; i< numRegs; i++) {
-        if (p[i].reg == reg) {
-            if (p[i].isTemp) {
-                if (p[i].live && p[i].dirty) {
-                    LOG(FATAL) << "Live & dirty temp in clobber";
-                }
-                p[i].live = false;
-                p[i].sReg = INVALID_SREG;
-            }
-            p[i].defStart = NULL;
-            p[i].defEnd = NULL;
-            if (p[i].pair) {
-                p[i].pair = false;
-                /* partners should be in same pool */
-                clobberRegBody(cUnit, p, numRegs, p[i].partner);
-            }
-            return true;
-        }
-    }
-    return false;
-}
-
 /* Mark a temp register as dead.  Does not affect allocation state. */
 void oatClobber(CompilationUnit* cUnit, int reg)
 {
-    if (!clobberRegBody(cUnit, cUnit->regPool->coreRegs,
-                        cUnit->regPool->numCoreRegs, reg)) {
-        clobberRegBody(cUnit, cUnit->regPool->FPRegs,
-                       cUnit->regPool->numFPRegs, reg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, reg);
+    if (p->isTemp) {
+        DCHECK(!(p->live && p->dirty))  << "Live & dirty temp in clobber";
+        p->live = false;
+        p->sReg = INVALID_SREG;
+        p->defStart = NULL;
+        p->defEnd = NULL;
+        if (p->pair) {
+            p->pair = false;
+            oatClobber(cUnit, p->partner);
+        }
     }
 }
 
@@ -302,7 +260,7 @@
             return res;
         }
         // Is the low reg of the pair free?
-        RegisterInfo* p = getRegInfo(cUnit, highReg-1);
+        RegisterInfo* p = oatGetRegInfo(cUnit, highReg-1);
         if (p->inUse || p->isTemp) {
             // Already allocated or not preserved - fail.
             return res;
@@ -563,19 +521,19 @@
 
 extern RegisterInfo* oatIsTemp(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* p = getRegInfo(cUnit, reg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, reg);
     return (p->isTemp) ? p : NULL;
 }
 
 extern RegisterInfo* oatIsPromoted(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* p = getRegInfo(cUnit, reg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, reg);
     return (p->isTemp) ? NULL : p;
 }
 
 extern bool oatIsDirty(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* p = getRegInfo(cUnit, reg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, reg);
     return p->dirty;
 }
 
@@ -612,7 +570,7 @@
 
 extern void oatResetDef(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* p = getRegInfo(cUnit, reg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, reg);
     p->defStart = NULL;
     p->defEnd = NULL;
 }
@@ -643,7 +601,7 @@
     DCHECK(!rl.wide);
     DCHECK(start && start->next);
     DCHECK(finish);
-    RegisterInfo* p = getRegInfo(cUnit, rl.lowReg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, rl.lowReg);
     p->defStart = start->next;
     p->defEnd = finish;
 }
@@ -659,7 +617,7 @@
     DCHECK(rl.wide);
     DCHECK(start && start->next);
     DCHECK(finish);
-    RegisterInfo* p = getRegInfo(cUnit, rl.lowReg);
+    RegisterInfo* p = oatGetRegInfo(cUnit, rl.lowReg);
     oatResetDef(cUnit, rl.highReg);  // Only track low of pair
     p->defStart = start->next;
     p->defEnd = finish;
@@ -670,8 +628,8 @@
 {
     DCHECK(rl.wide);
     if (rl.location == kLocPhysReg) {
-        RegisterInfo* infoLo = getRegInfo(cUnit, rl.lowReg);
-        RegisterInfo* infoHi = getRegInfo(cUnit, rl.highReg);
+        RegisterInfo* infoLo = oatGetRegInfo(cUnit, rl.lowReg);
+        RegisterInfo* infoHi = oatGetRegInfo(cUnit, rl.highReg);
         if (infoLo->isTemp) {
             infoLo->pair = false;
             infoLo->defStart = NULL;
@@ -798,7 +756,7 @@
 
 extern void oatMarkLive(CompilationUnit* cUnit, int reg, int sReg)
 {
-    RegisterInfo* info = getRegInfo(cUnit, reg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, reg);
     if ((info->reg == reg) && (info->sReg == sReg) && info->live) {
         return;  /* already live */
     } else if (sReg != INVALID_SREG) {
@@ -816,20 +774,20 @@
 
 extern void oatMarkTemp(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* info = getRegInfo(cUnit, reg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, reg);
     info->isTemp = true;
 }
 
 extern void oatUnmarkTemp(CompilationUnit* cUnit, int reg)
 {
-    RegisterInfo* info = getRegInfo(cUnit, reg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, reg);
     info->isTemp = false;
 }
 
 extern void oatMarkPair(CompilationUnit* cUnit, int lowReg, int highReg)
 {
-    RegisterInfo* infoLo = getRegInfo(cUnit, lowReg);
-    RegisterInfo* infoHi = getRegInfo(cUnit, highReg);
+    RegisterInfo* infoLo = oatGetRegInfo(cUnit, lowReg);
+    RegisterInfo* infoHi = oatGetRegInfo(cUnit, highReg);
     infoLo->pair = infoHi->pair = true;
     infoLo->partner = highReg;
     infoHi->partner = lowReg;
@@ -837,10 +795,10 @@
 
 extern void oatMarkClean(CompilationUnit* cUnit, RegLocation loc)
 {
-    RegisterInfo* info = getRegInfo(cUnit, loc.lowReg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, loc.lowReg);
     info->dirty = false;
     if (loc.wide) {
-        info = getRegInfo(cUnit, loc.highReg);
+        info = oatGetRegInfo(cUnit, loc.highReg);
         info->dirty = false;
     }
 }
@@ -851,24 +809,24 @@
         // If already home, can't be dirty
         return;
     }
-    RegisterInfo* info = getRegInfo(cUnit, loc.lowReg);
+    RegisterInfo* info = oatGetRegInfo(cUnit, loc.lowReg);
     info->dirty = true;
     if (loc.wide) {
-        info = getRegInfo(cUnit, loc.highReg);
+        info = oatGetRegInfo(cUnit, loc.highReg);
         info->dirty = true;
     }
 }
 
 extern void oatMarkInUse(CompilationUnit* cUnit, int reg)
 {
-      RegisterInfo* info = getRegInfo(cUnit, reg);
+      RegisterInfo* info = oatGetRegInfo(cUnit, reg);
       info->inUse = true;
 }
 
 STATIC void copyRegInfo(CompilationUnit* cUnit, int newReg, int oldReg)
 {
-    RegisterInfo* newInfo = getRegInfo(cUnit, newReg);
-    RegisterInfo* oldInfo = getRegInfo(cUnit, oldReg);
+    RegisterInfo* newInfo = oatGetRegInfo(cUnit, newReg);
+    RegisterInfo* oldInfo = oatGetRegInfo(cUnit, oldReg);
     // Target temp status must not change
     bool isTemp = newInfo->isTemp;
     *newInfo = *oldInfo;
@@ -915,7 +873,7 @@
            static int myReg = cUnit->regPool->coreRegs[i].reg;
            static int mySreg = cUnit->regPool->coreRegs[i].sReg;
            static int partnerReg = cUnit->regPool->coreRegs[i].partner;
-           static RegisterInfo* partner = getRegInfo(cUnit, partnerReg);
+           static RegisterInfo* partner = oatGetRegInfo(cUnit, partnerReg);
            DCHECK(partner != NULL);
            DCHECK(partner->pair);
            DCHECK_EQ(myReg, partner->partner);
diff --git a/src/compiler/codegen/arm/ArmRallocUtil.cc b/src/compiler/codegen/arm/ArmRallocUtil.cc
index 94852e3..ed8a5b2 100644
--- a/src/compiler/codegen/arm/ArmRallocUtil.cc
+++ b/src/compiler/codegen/arm/ArmRallocUtil.cc
@@ -322,3 +322,9 @@
     oatMarkInUse(cUnit, r1);
     return res;
 }
+
+extern RegisterInfo* oatGetRegInfo(CompilationUnit* cUnit, int reg)
+{
+    return FPREG(reg) ? &cUnit->regPool->FPRegs[reg & FP_REG_MASK]
+                      : &cUnit->regPool->coreRegs[reg];
+}
diff --git a/src/compiler/codegen/arm/Thumb2/Factory.cc b/src/compiler/codegen/arm/Thumb2/Factory.cc
index 45c7377..318be5a 100644
--- a/src/compiler/codegen/arm/Thumb2/Factory.cc
+++ b/src/compiler/codegen/arm/Thumb2/Factory.cc
@@ -22,7 +22,7 @@
  *
  */
 
-static int coreRegs[] = {r0, r1, r2, r3, rSUSPEND, r5, r6, r7, rSELF, r8, r10,
+static int coreRegs[] = {r0, r1, r2, r3, rSUSPEND, r5, r6, r7, r8, rSELF, r10,
                          r11, r12, rSP, rLR, rPC};
 static int reservedRegs[] = {rSUSPEND, rSELF, rSP, rLR, rPC};
 static int fpRegs[] = {fr0, fr1, fr2, fr3, fr4, fr5, fr6, fr7,
