Method prologue and epilogues, add missing x86 functionality.

Enables compiling and running a number of JNI internal managed code
methods on the host.

Change-Id: I56fceb813d0cb24637bc784ba57f2d1d16911d48
diff --git a/src/compiler/codegen/mips/Assemble.cc b/src/compiler/codegen/mips/Assemble.cc
index e064da9..07a9975 100644
--- a/src/compiler/codegen/mips/Assemble.cc
+++ b/src/compiler/codegen/mips/Assemble.cc
@@ -488,18 +488,18 @@
     if (!unconditional) {
         hopTarget = rawLIR(cUnit, dalvikOffset, kPseudoTargetLabel);
         LIR* hopBranch = rawLIR(cUnit, dalvikOffset, opcode, lir->operands[0],
-                                lir->operands[1], 0, 0, hopTarget);
+                                lir->operands[1], 0, 0, 0, hopTarget);
         oatInsertLIRBefore(lir, hopBranch);
     }
     LIR* currPC = rawLIR(cUnit, dalvikOffset, kMipsCurrPC);
     oatInsertLIRBefore(lir, currPC);
     LIR* anchor = rawLIR(cUnit, dalvikOffset, kPseudoTargetLabel);
     LIR* deltaHi = rawLIR(cUnit, dalvikOffset, kMipsDeltaHi, r_AT, 0,
-                          (uintptr_t)anchor, 0, lir->target);
+                          (uintptr_t)anchor, 0, 0, lir->target);
     oatInsertLIRBefore(lir, deltaHi);
     oatInsertLIRBefore(lir, anchor);
     LIR* deltaLo = rawLIR(cUnit, dalvikOffset, kMipsDeltaLo, r_AT, 0,
-                          (uintptr_t)anchor, 0, lir->target);
+                          (uintptr_t)anchor, 0, 0, lir->target);
     oatInsertLIRBefore(lir, deltaLo);
     LIR* addu = rawLIR(cUnit, dalvikOffset, kMipsAddu, r_AT, r_AT, r_RA);
     oatInsertLIRBefore(lir, addu);
@@ -557,12 +557,12 @@
                     LIR *newDeltaHi =
                           rawLIR(cUnit, lir->dalvikOffset, kMipsDeltaHi,
                                  lir->operands[0], 0, lir->operands[2],
-                                 lir->operands[3], lir->target);
+                                 lir->operands[3], 0, lir->target);
                     oatInsertLIRBefore((LIR*)lir, (LIR*)newDeltaHi);
                     LIR *newDeltaLo =
                           rawLIR(cUnit, lir->dalvikOffset, kMipsDeltaLo,
                                  lir->operands[0], 0, lir->operands[2],
-                                 lir->operands[3], lir->target);
+                                 lir->operands[3], 0, lir->target);
                     oatInsertLIRBefore((LIR*)lir, (LIR*)newDeltaLo);
                     lir->flags.isNop = true;
                     res = kRetryAll;
diff --git a/src/compiler/codegen/mips/Mips32/Factory.cc b/src/compiler/codegen/mips/Mips32/Factory.cc
index 2868710..0ee936e 100644
--- a/src/compiler/codegen/mips/Mips32/Factory.cc
+++ b/src/compiler/codegen/mips/Mips32/Factory.cc
@@ -619,12 +619,12 @@
     }
 
     if (rBase == rSP) {
-        if (load != NULL)
-            annotateDalvikRegAccess(load, (displacement + (pair ? LOWORD_OFFSET : 0)) >> 2,
-                                    true /* isLoad */);
-        if (load2 != NULL)
+        annotateDalvikRegAccess(load, (displacement + (pair ? LOWORD_OFFSET : 0)) >> 2,
+                                true /* isLoad */, pair /* is64bit */);
+        if (pair) {
             annotateDalvikRegAccess(load2, (displacement + HIWORD_OFFSET) >> 2,
-                                    true /* isLoad */);
+                                    true /* isLoad */, pair /* is64bit */);
+        }
     }
     return load;
 }
@@ -720,12 +720,12 @@
     }
 
     if (rBase == rSP) {
-        if (store != NULL)
-            annotateDalvikRegAccess(store, (displacement + (pair ? LOWORD_OFFSET : 0)) >> 2,
-                                    false /* isLoad */);
-        if (store2 != NULL)
+        annotateDalvikRegAccess(store, (displacement + (pair ? LOWORD_OFFSET : 0)) >> 2,
+                                false /* isLoad */, pair /* is64bit */);
+        if (pair) {
             annotateDalvikRegAccess(store2, (displacement + HIWORD_OFFSET) >> 2,
-                                    false /* isLoad */);
+                                    false /* isLoad */, pair /* is64bit */);
+        }
     }
 
     return res;
diff --git a/src/compiler/codegen/mips/MipsLIR.h b/src/compiler/codegen/mips/MipsLIR.h
index 1e7a803..8fdfe59 100644
--- a/src/compiler/codegen/mips/MipsLIR.h
+++ b/src/compiler/codegen/mips/MipsLIR.h
@@ -496,6 +496,7 @@
 #define IS_BINARY_OP    (1 << kIsBinaryOp)
 #define IS_TERTIARY_OP  (1 << kIsTertiaryOp)
 #define IS_QUAD_OP      (1 << kIsQuadOp)
+#define IS_QUIN_OP      0
 #define IS_IT           (1 << kIsIT)
 #define SETS_CCODES     (1 << kSetsCCodes)
 #define USES_CCODES     (1 << kUsesCCodes)