diff options
Diffstat (limited to 'src/compiler/codegen')
| -rw-r--r-- | src/compiler/codegen/arm/MethodCodegenDriver.cc | 2 | ||||
| -rw-r--r-- | src/compiler/codegen/arm/Thumb2/Gen.cc | 24 |
2 files changed, 12 insertions, 14 deletions
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc index 77b58ff344..6f476f930f 100644 --- a/src/compiler/codegen/arm/MethodCodegenDriver.cc +++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc @@ -2049,6 +2049,8 @@ STATIC bool methodBlockCodeGen(CompilationUnit* cUnit, BasicBlock* bb) boundaryLIR = newLIR1(cUnit, kArmPseudoDalvikByteCodeBoundary, (int) oatGetDalvikDisassembly( &mir->dalvikInsn, "")); + cUnit->boundaryMap.insert(std::make_pair(mir->offset, + (LIR*)boundaryLIR)); /* Remember the first LIR for this block */ if (headLIR == NULL) { headLIR = boundaryLIR; diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc index 9c4ef1ebf5..1c2f85082b 100644 --- a/src/compiler/codegen/arm/Thumb2/Gen.cc +++ b/src/compiler/codegen/arm/Thumb2/Gen.cc @@ -129,21 +129,17 @@ STATIC ArmLIR* genIT(CompilationUnit* cUnit, ArmConditionCode code, */ STATIC ArmLIR* insertCaseLabel(CompilationUnit* cUnit, int vaddr, int keyVal) { - ArmLIR* lir; - for (lir = (ArmLIR*)cUnit->firstLIRInsn; lir; lir = NEXT_LIR(lir)) { - if ((lir->opcode == kArmPseudoDalvikByteCodeBoundary) && - (lir->generic.dalvikOffset == vaddr)) { - ArmLIR* newLabel = (ArmLIR*)oatNew(sizeof(ArmLIR), true); - newLabel->generic.dalvikOffset = vaddr; - newLabel->opcode = kArmPseudoCaseLabel; - newLabel->operands[0] = keyVal; - oatInsertLIRAfter((LIR*)lir, (LIR*)newLabel); - return newLabel; - } + std::map<unsigned int, LIR*>::iterator it; + it = cUnit->boundaryMap.find(vaddr); + if (it == cUnit->boundaryMap.end()) { + LOG(FATAL) << "Error: didn't find vaddr 0x" << std::hex << vaddr; } - oatCodegenDump(cUnit); - LOG(FATAL) << "Error: didn't find vaddr 0x" << std::hex << vaddr; - return NULL; // Quiet gcc + ArmLIR* newLabel = (ArmLIR*)oatNew(sizeof(ArmLIR), true); + newLabel->generic.dalvikOffset = vaddr; + newLabel->opcode = kArmPseudoCaseLabel; + newLabel->operands[0] = keyVal; + oatInsertLIRAfter(it->second, (LIR*)newLabel); + return newLabel; } STATIC void markPackedCaseLabels(CompilationUnit* cUnit, SwitchTable *tabRec) |