Merge "Monitor enter/exit cleanup" into dalvik-dev
diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc
index 20124f9..49728b4 100644
--- a/src/compiler/codegen/arm/Thumb2/Gen.cc
+++ b/src/compiler/codegen/arm/Thumb2/Gen.cc
@@ -260,11 +260,6 @@
  */
 void genMonitorEnter(CompilationUnit* cUnit, MIR* mir, RegLocation rlSrc)
 {
-    LIR* target;
-    LIR* hopTarget;
-    LIR* branch;
-    LIR* hopBranch;
-
     oatFlushAllRegs(cUnit);
     DCHECK_EQ(LW_SHAPE_THIN, 0);
     loadValueDirectFixed(cUnit, rlSrc, r0);  // Get obj
@@ -278,23 +273,17 @@
     // Is lock unheld on lock or held by us (==threadId) on unlock?
     newLIR4(cUnit, kThumb2Bfi, r2, r1, 0, LW_LOCK_OWNER_SHIFT - 1);
     newLIR3(cUnit, kThumb2Bfc, r1, LW_HASH_STATE_SHIFT, LW_LOCK_OWNER_SHIFT - 1);
-    hopBranch = newLIR2(cUnit, kThumb2Cbnz, r1, 0);
+    opRegImm(cUnit, kOpCmp, r1, 0);
+    opIT(cUnit, kArmCondEq, "");
     newLIR4(cUnit, kThumb2Strex, r1, r2, r0,
             Object::MonitorOffset().Int32Value() >> 2);
-    oatGenMemBarrier(cUnit, kSY);
-    branch = newLIR2(cUnit, kThumb2Cbz, r1, 0);
-
-    hopTarget = newLIR0(cUnit, kPseudoTargetLabel);
-    hopBranch->target = (LIR*)hopTarget;
-
+    opRegImm(cUnit, kOpCmp, r1, 0);
+    opIT(cUnit, kArmCondNe, "T");
     // Go expensive route - artLockObjectFromCode(self, obj);
     loadWordDisp(cUnit, rSELF, OFFSETOF_MEMBER(Thread, pLockObjectFromCode),
                  rLR);
     callRuntimeHelper(cUnit, rLR);
-
-    // Resume here
-    target = newLIR0(cUnit, kPseudoTargetLabel);
-    branch->target = (LIR*)target;
+    oatGenMemBarrier(cUnit, kSY);
 }
 
 /*
@@ -305,11 +294,6 @@
  */
 void genMonitorExit(CompilationUnit* cUnit, MIR* mir, RegLocation rlSrc)
 {
-    LIR* target;
-    LIR* branch;
-    LIR* hopTarget;
-    LIR* hopBranch;
-
     DCHECK_EQ(LW_SHAPE_THIN, 0);
     oatFlushAllRegs(cUnit);
     loadValueDirectFixed(cUnit, rlSrc, r0);  // Get obj
@@ -323,22 +307,13 @@
     opRegImm(cUnit, kOpLsl, r2, LW_LOCK_OWNER_SHIFT);
     newLIR3(cUnit, kThumb2Bfc, r1, LW_HASH_STATE_SHIFT, LW_LOCK_OWNER_SHIFT - 1);
     opRegReg(cUnit, kOpSub, r1, r2);
-    hopBranch = opCondBranch(cUnit, kCondNe, NULL);
-    oatGenMemBarrier(cUnit, kSY);
+    opIT(cUnit, kArmCondEq, "EE");
     storeWordDisp(cUnit, r0, Object::MonitorOffset().Int32Value(), r3);
-    branch = opBranchUnconditional(cUnit, kOpUncondBr);
-
-    hopTarget = newLIR0(cUnit, kPseudoTargetLabel);
-    hopBranch->target = (LIR*)hopTarget;
-
     // Go expensive route - UnlockObjectFromCode(obj);
     loadWordDisp(cUnit, rSELF, OFFSETOF_MEMBER(Thread, pUnlockObjectFromCode),
                  rLR);
     callRuntimeHelper(cUnit, rLR);
-
-    // Resume here
-    target = newLIR0(cUnit, kPseudoTargetLabel);
-    branch->target = (LIR*)target;
+    oatGenMemBarrier(cUnit, kSY);
 }
 
 /*