diff options
Diffstat (limited to 'src/compiler')
| -rw-r--r-- | src/compiler/Dataflow.cc | 10 | ||||
| -rw-r--r-- | src/compiler/codegen/MethodCodegenDriver.cc | 6 | ||||
| -rw-r--r-- | src/compiler/codegen/arm/Thumb2/Gen.cc | 7 |
3 files changed, 13 insertions, 10 deletions
diff --git a/src/compiler/Dataflow.cc b/src/compiler/Dataflow.cc index 5f632c061d..bea5ef07d9 100644 --- a/src/compiler/Dataflow.cc +++ b/src/compiler/Dataflow.cc @@ -1869,19 +1869,19 @@ bool basicBlockOpt(CompilationUnit* cUnit, BasicBlock* bb) ccode = kCondEq; break; case Instruction::IF_NEZ: - // ccode = kCondNe; + ccode = kCondNe; break; case Instruction::IF_LTZ: - // ccode = kCondLt; + ccode = kCondLt; break; case Instruction::IF_GEZ: - // ccode = kCondGe; + ccode = kCondGe; break; case Instruction::IF_GTZ: - // ccode = kCondGt; + ccode = kCondGt; break; case Instruction::IF_LEZ: - // ccode = kCondLe; + ccode = kCondLe; break; default: break; diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc index 1dc11dac70..fb9bdc9227 100644 --- a/src/compiler/codegen/MethodCodegenDriver.cc +++ b/src/compiler/codegen/MethodCodegenDriver.cc @@ -737,9 +737,6 @@ bool compileDalvikInstruction(CompilationUnit* cUnit, MIR* mir, const char* extendedMIROpNames[kMirOpLast - kMirOpFirst] = { "kMirOpPhi", - "kMirOpNullNRangeUpCheck", - "kMirOpNullNRangeDownCheck", - "kMirOpLowerBound", "kMirOpCopy", "kMirFusedCmplFloat", "kMirFusedCmpgFloat", @@ -747,6 +744,9 @@ const char* extendedMIROpNames[kMirOpLast - kMirOpFirst] = { "kMirFusedCmpgDouble", "kMirFusedCmpLong", "kMirNop", + "kMirOpNullNRangeUpCheck", + "kMirOpNullNRangeDownCheck", + "kMirOpLowerBound", }; /* Extended MIR instructions like PHI */ diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc index ea02ca99ac..f48540329e 100644 --- a/src/compiler/codegen/arm/Thumb2/Gen.cc +++ b/src/compiler/codegen/arm/Thumb2/Gen.cc @@ -658,12 +658,12 @@ void genFusedLongCmpBranch(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir) { LIR* labelList = (LIR*)cUnit->blockLabelList; LIR* taken = &labelList[bb->taken->id]; + LIR* notTaken = &labelList[bb->fallThrough->id]; RegLocation rlSrc1 = oatGetSrcWide(cUnit, mir, 0, 1); RegLocation rlSrc2 = oatGetSrcWide(cUnit, mir, 2, 3); rlSrc1 = loadValueWide(cUnit, rlSrc1, kCoreReg); rlSrc2 = loadValueWide(cUnit, rlSrc2, kCoreReg); ConditionCode ccode = static_cast<ConditionCode>(mir->dalvikInsn.arg[0]); - LIR* notTaken = rawLIR(cUnit, mir->offset, kPseudoTargetLabel); opRegReg(cUnit, kOpCmp, rlSrc1.highReg, rlSrc2.highReg); switch(ccode) { case kCondEq: @@ -675,25 +675,28 @@ void genFusedLongCmpBranch(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir) case kCondLt: opCondBranch(cUnit, kCondLt, taken); opCondBranch(cUnit, kCondGt, notTaken); + ccode = kCondCc; break; case kCondLe: opCondBranch(cUnit, kCondLt, taken); opCondBranch(cUnit, kCondGt, notTaken); + ccode = kCondLs; break; case kCondGt: opCondBranch(cUnit, kCondGt, taken); opCondBranch(cUnit, kCondLt, notTaken); + ccode = kCondHi; break; case kCondGe: opCondBranch(cUnit, kCondGt, taken); opCondBranch(cUnit, kCondLt, notTaken); + ccode = kCondCs; break; default: LOG(FATAL) << "Unexpected ccode: " << (int)ccode; } opRegReg(cUnit, kOpCmp, rlSrc1.lowReg, rlSrc2.lowReg); opCondBranch(cUnit, ccode, taken); - oatAppendLIR(cUnit, notTaken); } /* |