diff --git a/src/compiler/codegen/Ralloc.h b/src/compiler/codegen/Ralloc.h
index ec72039..b73ae30 100644
--- a/src/compiler/codegen/Ralloc.h
+++ b/src/compiler/codegen/Ralloc.h
@@ -168,7 +168,7 @@
 extern RegisterInfo *oatIsLive(CompilationUnit* cUnit, int reg);
 
 /* To be used when explicitly managing register use */
-extern void oatLockAllTemps(CompilationUnit* cUnit);
+extern void oatLockCallTemps(CompilationUnit* cUnit);
 
 extern void oatFlushAllRegs(CompilationUnit* cUnit);
 
diff --git a/src/compiler/codegen/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index 492c79a..6a9777e 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -713,13 +713,13 @@
 }
 
 /* To be used when explicitly managing register use */
-extern void oatLockAllTemps(CompilationUnit* cUnit)
+extern void oatLockCallTemps(CompilationUnit* cUnit)
 {
-    int i;
-    for (i=0; i< cUnit->regPool->numCoreRegs; i++) {
-        if (cUnit->regPool->coreRegs[i].isTemp)
-            oatLockTemp(cUnit, cUnit->regPool->coreRegs[i].reg);
-    }
+    //TODO: Arm specific - move to target dependent code
+    oatLockTemp(cUnit, r0);
+    oatLockTemp(cUnit, r1);
+    oatLockTemp(cUnit, r2);
+    oatLockTemp(cUnit, r3);
 }
 
 // Make sure nothing is live and dirty
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index ea02721..c4b30b2 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -693,7 +693,7 @@
     if (dInsn->vA == 0)
         return callState;
 
-    oatLockAllTemps(cUnit);
+    oatLockCallTemps(cUnit);
     callState = nextCallInsn(cUnit, mir, dInsn, callState);
 
     /*
@@ -816,7 +816,7 @@
 
     // Finally, deal with the register arguments
     // We'll be using fixed registers here
-    oatLockAllTemps(cUnit);
+    oatLockCallTemps(cUnit);
     callState = nextCallInsn(cUnit, mir, dInsn, callState);
     return callState;
 }
diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc
index 16adae7..699a561 100644
--- a/src/compiler/codegen/arm/Thumb2/Gen.cc
+++ b/src/compiler/codegen/arm/Thumb2/Gen.cc
@@ -760,7 +760,7 @@
     oatFlushAllRegs(cUnit);
     assert(art::Monitor::kLwShapeThin == 0);
     loadValueDirectFixed(cUnit, rlSrc, r1);  // Get obj
-    oatLockAllTemps(cUnit);  // Prepare for explicit register usage
+    oatLockCallTemps(cUnit);  // Prepare for explicit register usage
     genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL);
     loadWordDisp(cUnit, rSELF, Thread::IdOffset().Int32Value(), r3);
     newLIR3(cUnit, kThumb2Ldrex, r2, r1,
@@ -811,7 +811,7 @@
     assert(art::Monitor::kLwShapeThin == 0);
     oatFlushAllRegs(cUnit);
     loadValueDirectFixed(cUnit, rlSrc, r1);  // Get obj
-    oatLockAllTemps(cUnit);  // Prepare for explicit register usage
+    oatLockCallTemps(cUnit);  // Prepare for explicit register usage
     genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL);
     loadWordDisp(cUnit, r1, OFFSETOF_MEMBER(Object, monitor_), r2); // Get lock
     loadWordDisp(cUnit, rSELF, Thread::IdOffset().Int32Value(), r3);
