Fix CAS intrinsic to clear exclusive if values don't match.

The LDREX has a matching STREX if the values match, but it needed
a CLREX for the case where they didn't.

Bug: 10530407
Change-Id: I46b474cca326a251536e7f214c80486694431386
(cherry picked from commit 78765e84a3654357a03f84b76985556cf7d9731a)
diff --git a/compiler/dex/quick/arm/int_arm.cc b/compiler/dex/quick/arm/int_arm.cc
index f2ff58e..103dec6 100644
--- a/compiler/dex/quick/arm/int_arm.cc
+++ b/compiler/dex/quick/arm/int_arm.cc
@@ -549,10 +549,11 @@
   OpRegReg(kOpCmp, r_old_value, rl_expected.low_reg);
   FreeTemp(r_old_value);  // Now unneeded.
   RegLocation rl_result = EvalLoc(rl_dest, kCoreReg, true);
-  OpIT(kCondEq, "TE");
+  OpIT(kCondEq, "TEE");
   NewLIR4(kThumb2Strex, rl_result.low_reg, rl_new_value.low_reg, r_ptr, 0);
   FreeTemp(r_ptr);  // Now unneeded.
   OpRegImm(kOpXor, rl_result.low_reg, 1);
+  NewLIR0(kThumb2Clrex);
   OpRegReg(kOpXor, rl_result.low_reg, rl_result.low_reg);
 
   StoreValue(rl_dest, rl_result);