From 3ddc0d1108a00e14b60c60edcdeff3b81f9e35f9 Mon Sep 17 00:00:00 2001 From: buzbee Date: Wed, 5 Oct 2011 10:36:21 -0700 Subject: Fix Vmap table size Consistently use 16 bits to store Dalvik vreg number. Change-Id: I6d21c0ed7011e5defaa45571951ff7608d0ce80e --- src/compiler/CompilerIR.h | 5 +++-- src/compiler/Frontend.cc | 2 +- src/compiler/codegen/RallocUtil.cc | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h index 14af69d3d6..8dcf56bdd4 100644 --- a/src/compiler/CompilerIR.h +++ b/src/compiler/CompilerIR.h @@ -47,6 +47,7 @@ typedef struct RegLocation { } RegLocation; #define INVALID_SREG (-1) +#define INVALID_VREG (0xFFFFU) #define INVALID_REG (0x3F) #define INVALID_OFFSET (-1) @@ -201,8 +202,8 @@ typedef struct CompilationUnit { int assemblerRetries; std::vector codeBuffer; std::vector mappingTable; - std::vector coreVmapTable; - std::vector fpVmapTable; + std::vector coreVmapTable; + std::vector 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 ebbd72f79c..be3a6052e0 100644 --- a/src/compiler/Frontend.cc +++ b/src/compiler/Frontend.cc @@ -907,7 +907,7 @@ bool oatCompileMethod(const Compiler& compiler, Method* method, art::Instruction reinterpret_cast(&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 969028779c..9d3717a279 100644 --- a/src/compiler/codegen/RallocUtil.cc +++ b/src/compiler/codegen/RallocUtil.cc @@ -241,7 +241,7 @@ extern int oatAllocPreservedCoreReg(CompilationUnit* cUnit, int sReg) * 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 @@ STATIC void markPreservedSingle(CompilationUnit* cUnit, int sReg, int reg) // 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; -- cgit v1.2.3-59-g8ed1b