diff options
| author | Anders O Nilsson <anders.o.nilsson@stericsson.com> | 2013-02-08 11:24:35 +0100 |
|---|---|---|
| committer | Steve Kondik <shade@chemlab.org> | 2013-07-24 12:59:41 -0700 |
| commit | 90a21c4532e02627ffec9768e11e57fbd698be06 (patch) | |
| tree | e45b37d964021c39c9af88257cff95a72bf965e1 /vm/compiler/codegen/arm/CodegenDriver.cpp | |
| parent | 8b1ed305720d05f028308c9ce9795cfc4310f567 (diff) | |
JIT: Allow use of cbz/cbnz for conditional branch gen.
Optimize conditional branch generation when comparing
with zero for ARM JIT. When possible use cbz/cbnz
instead of cmp+beq/cmp+bne.
This improves performance for usecases involving
code execution in Dalvik.
Change-Id: Iffd455d9cbb3ef0b1f87caafdae1b72ba3f0d2fc
Signed-off-by: Patrik Ryd <patrik.ryd@stericsson.com>
Diffstat (limited to 'vm/compiler/codegen/arm/CodegenDriver.cpp')
| -rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp index 57044a9a8..33ea0fd14 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.cpp +++ b/vm/compiler/codegen/arm/CodegenDriver.cpp @@ -2113,9 +2113,6 @@ static bool handleFmt21t(CompilationUnit *cUnit, MIR *mir, BasicBlock *bb, RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); rlSrc = loadValue(cUnit, rlSrc, kCoreReg); - opRegImm(cUnit, kOpCmp, rlSrc.lowReg, 0); - -//TUNING: break this out to allow use of Thumb2 CB[N]Z switch (dalvikOpcode) { case OP_IF_EQZ: cond = kArmCondEq; @@ -2140,7 +2137,8 @@ static bool handleFmt21t(CompilationUnit *cUnit, MIR *mir, BasicBlock *bb, ALOGE("Unexpected opcode (%d) for Fmt21t", dalvikOpcode); dvmCompilerAbort(cUnit); } - genConditionalBranch(cUnit, cond, &labelList[bb->taken->id]); + ArmLIR* branch = genCmpImmBranch(cUnit, cond, rlSrc.lowReg, 0); + branch->generic.target = (LIR*)&labelList[bb->taken->id]; /* This mostly likely will be optimized away in a later phase */ genUnconditionalBranch(cUnit, &labelList[bb->fallThrough->id]); return false; |
