Fix 64-bit CAS for x86.

Bug: 12117970
Change-Id: I9fbba2291124a2594161782c89dc62201cf01c08
diff --git a/compiler/dex/quick/x86/int_x86.cc b/compiler/dex/quick/x86/int_x86.cc
index 0133a0a..340c74a 100644
--- a/compiler/dex/quick/x86/int_x86.cc
+++ b/compiler/dex/quick/x86/int_x86.cc
@@ -295,16 +295,17 @@
   if (is_long) {
     FlushAllRegs();
     LockCallTemps();
+    LoadValueDirectWideFixed(rl_src_expected, rAX, rDX);
+    LoadValueDirectWideFixed(rl_src_new_value, rBX, rCX);
     NewLIR1(kX86Push32R, rDI);
     MarkTemp(rDI);
     LockTemp(rDI);
     NewLIR1(kX86Push32R, rSI);
     MarkTemp(rSI);
     LockTemp(rSI);
-    LoadValueDirectFixed(rl_src_obj, rDI);
-    LoadValueDirectFixed(rl_src_offset, rSI);
-    LoadValueDirectWideFixed(rl_src_expected, rAX, rDX);
-    LoadValueDirectWideFixed(rl_src_new_value, rBX, rCX);
+    const int push_offset = 4 /* push edi */ + 4 /* push esi */;
+    LoadWordDisp(TargetReg(kSp), SRegOffset(rl_src_obj.s_reg_low) + push_offset, rDI);
+    LoadWordDisp(TargetReg(kSp), SRegOffset(rl_src_offset.s_reg_low) + push_offset, rSI);
     NewLIR4(kX86LockCmpxchg8bA, rDI, rSI, 0, 0);
     FreeTemp(rSI);
     UnmarkTemp(rSI);