Fix 64-bit 3-operand multiplication in x86 mterp.

rPC was being unspilled a bit late.

Change-Id: Idf73b9eeeb972f3fb1861224397d0592c6d3bb2f
diff --git a/vm/mterp/out/InterpAsm-x86.S b/vm/mterp/out/InterpAsm-x86.S
index 3f3bef4..d2e9f09 100644
--- a/vm/mterp/out/InterpAsm-x86.S
+++ b/vm/mterp/out/InterpAsm-x86.S
@@ -4137,13 +4137,13 @@
      * this code.   We spill rINSTw (ebx),
      * giving us eax, ebc, ecx and edx as computational
      * temps.  On top of that, we'll spill edi (rFP)
-     * for use as the vB pointer and esi for use
+     * for use as the vB pointer and esi (rPC) for use
      * as the vC pointer.  Yuck.
      */
     /* mul-long vAA, vBB, vCC */
     movzbl    2(rPC),%eax              # eax<- B
     movzbl    3(rPC),%ecx              # ecx<- C
-    SPILL_TMP2(%esi)
+    SPILL_TMP2(%esi)                   # save Dalvik PC
     SPILL(rFP)
     SPILL(rINST)
     leal      (rFP,%eax,4),%esi        # esi<- &v[B]
@@ -8151,9 +8151,9 @@
 /* continuation for OP_MUL_LONG */
 
 .LOP_MUL_LONG_continue:
-    leal      (%ecx,%edx),%edx    # full result now in %edx:%eax
-    FETCH_INST_OPCODE 2 %ecx
-    UNSPILL_TMP2(%esi)
+    leal      (%ecx,%edx),%edx     # full result now in %edx:%eax
+    UNSPILL_TMP2(%esi)             # Restore Dalvik PC
+    FETCH_INST_OPCODE 2 %ecx       # Fetch next instruction
     movl      %edx,4(rFP,rINST,4)  # v[B+1]<- %edx
     movl      %eax,(rFP,rINST,4)   # v[B]<- %eax
     ADVANCE_PC 2
diff --git a/vm/mterp/x86/OP_MUL_LONG.S b/vm/mterp/x86/OP_MUL_LONG.S
index 3d8341a..4213299 100644
--- a/vm/mterp/x86/OP_MUL_LONG.S
+++ b/vm/mterp/x86/OP_MUL_LONG.S
@@ -6,13 +6,13 @@
      * this code.   We spill rINSTw (ebx),
      * giving us eax, ebc, ecx and edx as computational
      * temps.  On top of that, we'll spill edi (rFP)
-     * for use as the vB pointer and esi for use
+     * for use as the vB pointer and esi (rPC) for use
      * as the vC pointer.  Yuck.
      */
     /* mul-long vAA, vBB, vCC */
     movzbl    2(rPC),%eax              # eax<- B
     movzbl    3(rPC),%ecx              # ecx<- C
-    SPILL_TMP2(%esi)
+    SPILL_TMP2(%esi)                   # save Dalvik PC
     SPILL(rFP)
     SPILL(rINST)
     leal      (rFP,%eax,4),%esi        # esi<- &v[B]
@@ -30,9 +30,9 @@
 %break
 
 .L${opcode}_continue:
-    leal      (%ecx,%edx),%edx    # full result now in %edx:%eax
-    FETCH_INST_OPCODE 2 %ecx
-    UNSPILL_TMP2(%esi)
+    leal      (%ecx,%edx),%edx     # full result now in %edx:%eax
+    UNSPILL_TMP2(%esi)             # Restore Dalvik PC
+    FETCH_INST_OPCODE 2 %ecx       # Fetch next instruction
     movl      %edx,4(rFP,rINST,4)  # v[B+1]<- %edx
     movl      %eax,(rFP,rINST,4)   # v[B]<- %eax
     ADVANCE_PC 2