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;
}