Fix Vmap table size
Consistently use 16 bits to store Dalvik vreg number.
Change-Id: I6d21c0ed7011e5defaa45571951ff7608d0ce80e
diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h
index 14af69d..8dcf56b 100644
--- a/src/compiler/CompilerIR.h
+++ b/src/compiler/CompilerIR.h
@@ -47,6 +47,7 @@
} RegLocation;
#define INVALID_SREG (-1)
+#define INVALID_VREG (0xFFFFU)
#define INVALID_REG (0x3F)
#define INVALID_OFFSET (-1)
@@ -201,8 +202,8 @@
int assemblerRetries;
std::vector<short> codeBuffer;
std::vector<uint32_t> mappingTable;
- std::vector<uint32_t> coreVmapTable;
- std::vector<short> fpVmapTable;
+ std::vector<uint16_t> coreVmapTable;
+ std::vector<uint16_t> fpVmapTable;
bool printMe;
bool hasClassLiterals; // Contains class ptrs used as literals
bool hasLoop; // Contains a loop
diff --git a/src/compiler/Frontend.cc b/src/compiler/Frontend.cc
index ebbd72f..be3a605 100644
--- a/src/compiler/Frontend.cc
+++ b/src/compiler/Frontend.cc
@@ -907,7 +907,7 @@
reinterpret_cast<const int32_t*>(&cUnit.mappingTable[0]),
mapping_table->GetLength() * sizeof(cUnit.mappingTable[0]));
// Add a marker to take place of lr
- cUnit.coreVmapTable.push_back(-1);
+ cUnit.coreVmapTable.push_back(INVALID_VREG);
// Combine vmap tables - core regs, then fp regs
for (uint32_t i = 0; i < cUnit.fpVmapTable.size(); i++) {
cUnit.coreVmapTable.push_back(cUnit.fpVmapTable[i]);
diff --git a/src/compiler/codegen/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index 9690287..9d3717a 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -241,7 +241,7 @@
* Mark a callee-save fp register as promoted. Note that
* vpush/vpop uses contiguous register lists so we must
* include any holes in the mask. Associate holes with
- * Dalvik register INVALID_REG (-1).
+ * Dalvik register INVALID_VREG (0xFFFFU).
*/
STATIC void markPreservedSingle(CompilationUnit* cUnit, int sReg, int reg)
{
@@ -250,7 +250,7 @@
// Ensure fpVmapTable is large enough
int tableSize = cUnit->fpVmapTable.size();
for (int i = tableSize; i < (reg + 1); i++) {
- cUnit->fpVmapTable.push_back(INVALID_REG);
+ cUnit->fpVmapTable.push_back(INVALID_VREG);
}
// Add the current mapping
cUnit->fpVmapTable[reg] = sReg;