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/arm/ArmLIR.h b/src/compiler/codegen/arm/ArmLIR.h
index 2f332f5..e3370df 100644
--- a/src/compiler/codegen/arm/ArmLIR.h
+++ b/src/compiler/codegen/arm/ArmLIR.h
@@ -689,6 +689,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)
diff --git a/src/compiler/codegen/arm/Assemble.cc b/src/compiler/codegen/arm/Assemble.cc
index e012c4e..8901bf3 100644
--- a/src/compiler/codegen/arm/Assemble.cc
+++ b/src/compiler/codegen/arm/Assemble.cc
@@ -1052,7 +1052,7 @@
 
                     // Add new Adr to generate the address
                     LIR* newAdr = rawLIR(cUnit, lir->dalvikOffset, kThumb2Adr,
-                                         baseReg, 0, 0, 0, lir->target);
+                                         baseReg, 0, 0, 0, 0, lir->target);
                     oatInsertLIRBefore((LIR*)lir, (LIR*)newAdr);
 
                     // Convert to normal load
@@ -1086,7 +1086,7 @@
                     LIR* newInst =
                         rawLIR(cUnit, lir->dalvikOffset, kThumbBCond, 0,
                                (lir->opcode == kThumb2Cbz) ? kArmCondEq : kArmCondNe,
-                               0, 0, lir->target);
+                               0, 0, 0, lir->target);
                     oatInsertLIRAfter((LIR *)lir, (LIR *)newInst);
                     /* Convert the cb[n]z to a cmp rx, #0 ] */
                     lir->opcode = kThumbCmpRI8;
@@ -1206,12 +1206,12 @@
                     LIR *newMov16L =
                         rawLIR(cUnit, lir->dalvikOffset, kThumb2MovImm16LST,
                                lir->operands[0], 0, (intptr_t)lir, (intptr_t)tabRec,
-                               lir->target);
+                               0, lir->target);
                     oatInsertLIRBefore((LIR*)lir, (LIR*)newMov16L);
                     LIR *newMov16H =
                         rawLIR(cUnit, lir->dalvikOffset, kThumb2MovImm16HST,
                                lir->operands[0], 0, (intptr_t)lir, (intptr_t)tabRec,
-                               lir->target);
+                               0, lir->target);
                     oatInsertLIRBefore((LIR*)lir, (LIR*)newMov16H);
                     lir->opcode = kThumb2AddRRR;
                     lir->operands[1] = rPC;
diff --git a/src/compiler/codegen/arm/Thumb2/Factory.cc b/src/compiler/codegen/arm/Thumb2/Factory.cc
index ad6e40d..fdf0ca2 100644
--- a/src/compiler/codegen/arm/Thumb2/Factory.cc
+++ b/src/compiler/codegen/arm/Thumb2/Factory.cc
@@ -69,7 +69,7 @@
         dataTarget = addWordData(cUnit, &cUnit->literalList, value);
     }
     LIR* loadPcRel = rawLIR(cUnit, cUnit->currentDalvikOffset, kThumb2Vldrs,
-                            rDest, r15pc, 0, 0, dataTarget);
+                            rDest, r15pc, 0, 0, 0, dataTarget);
     setMemRefType(loadPcRel, true, kLiteral);
     loadPcRel->aliasInfo = (intptr_t)dataTarget;
     oatAppendLIR(cUnit, (LIR* ) loadPcRel);
@@ -172,7 +172,7 @@
         dataTarget = addWordData(cUnit, &cUnit->literalList, value);
     }
     LIR* loadPcRel = rawLIR(cUnit, cUnit->currentDalvikOffset,
-                            kThumb2LdrPcRel12, rDest, 0, 0, 0, dataTarget);
+                            kThumb2LdrPcRel12, rDest, 0, 0, 0, 0, dataTarget);
     setMemRefType(loadPcRel, true, kLiteral);
     loadPcRel->aliasInfo = (intptr_t)dataTarget;
     res = loadPcRel;
@@ -627,7 +627,7 @@
             }
             LIR* loadPcRel = rawLIR(cUnit, cUnit->currentDalvikOffset,
                                     kThumb2Vldrd, S2D(rDestLo, rDestHi),
-                                    r15pc, 0, 0, dataTarget);
+                                    r15pc, 0, 0, 0, dataTarget);
             setMemRefType(loadPcRel, true, kLiteral);
             loadPcRel->aliasInfo = (intptr_t)dataTarget;
             oatAppendLIR(cUnit, (LIR* ) loadPcRel);
@@ -784,10 +784,11 @@
     bool thumb2Form = (displacement < 4092 && displacement >= 0);
     bool allLowRegs = (LOWREG(rBase) && LOWREG(rDest));
     int encodedDisp = displacement;
-
+    bool is64bit = false;
     switch (size) {
         case kDouble:
         case kLong:
+            is64bit = true;
             if (FPREG(rDest)) {
                 if (SINGLEREG(rDest)) {
                     DCHECK(FPREG(rDestHi));
@@ -883,7 +884,7 @@
 
     // TODO: in future may need to differentiate Dalvik accesses w/ spills
     if (rBase == rSP) {
-        annotateDalvikRegAccess(load, displacement >> 2, true /* isLoad */);
+        annotateDalvikRegAccess(load, displacement >> 2, true /* isLoad */, is64bit);
     }
     return load;
 }
@@ -912,10 +913,11 @@
     bool thumb2Form = (displacement < 4092 && displacement >= 0);
     bool allLowRegs = (LOWREG(rBase) && LOWREG(rSrc));
     int encodedDisp = displacement;
-
+    bool is64bit = false;
     switch (size) {
         case kLong:
         case kDouble:
+            is64bit = true;
             if (!FPREG(rSrc)) {
                 res = storeBaseDispBody(cUnit, rBase, displacement, rSrc,
                                         -1, kWord);
@@ -990,7 +992,7 @@
 
     // TODO: In future, may need to differentiate Dalvik & spill accesses
     if (rBase == rSP) {
-        annotateDalvikRegAccess(store, displacement >> 2, false /* isLoad */);
+        annotateDalvikRegAccess(store, displacement >> 2, false /* isLoad */, is64bit);
     }
     return res;
 }