diff options
| author | Anders O Nilsson <anders.o.nilsson@stericsson.com> | 2012-10-10 15:26:32 +0200 |
|---|---|---|
| committer | Patrik Ryd <patrik.ryd@stericsson.com> | 2013-06-14 15:25:48 +0200 |
| commit | 20111d635e9210bdd105219eceb263607ec4d5c5 (patch) | |
| tree | ee87e45903cae6cbc95e5657736450606690f279 /vm/compiler/codegen/arm/CodegenDriver.cpp | |
| parent | 6529809bd4448a76622a08cf63829cab73d91b9a (diff) | |
JIT: Use rsb and shift in easy multiply.
For easy multiplication using reverse subtract (when
lit is 2^n-1) use the barrel shifter for rsb.
This improves arithmetic performance for code executing
in Dalvik. E.g String.hashCode.
Change-Id: Ifb086dcec344b30fd3e392ac21d508b43e820cdc
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 | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp index f8570c435..44a48f7d0 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.cpp +++ b/vm/compiler/codegen/arm/CodegenDriver.cpp @@ -2257,10 +2257,7 @@ static bool handleEasyMultiply(CompilationUnit *cUnit, } else { // Reverse subtract: (src << (shift + 1)) - src. assert(powerOfTwoMinusOne); - // TODO: rsb dst, src, src lsl#lowestSetBit(lit + 1) - int tReg = dvmCompilerAllocTemp(cUnit); - opRegRegImm(cUnit, kOpLsl, tReg, rlSrc.lowReg, lowestSetBit(lit + 1)); - opRegRegReg(cUnit, kOpSub, rlResult.lowReg, tReg, rlSrc.lowReg); + genMultiplyByShiftAndReverseSubtract(cUnit, rlSrc, rlResult, lowestSetBit(lit + 1)); } storeValue(cUnit, rlDest, rlResult); return true; |
