diff options
| author | 2011-10-16 14:33:08 -0700 | |
|---|---|---|
| committer | 2011-10-16 14:33:08 -0700 | |
| commit | 3181345d4492017c26b1774be8f0554ad3f04dbf (patch) | |
| tree | 6d94935fa4cedf4468c0dc78a299a60d0e7395f3 /src/compiler/codegen/arm/MethodCodegenDriver.cc | |
| parent | 63f86de9b9444072922872ff08f3653f2920238d (diff) | |
Fix off-by-one error in OP_FILLED_NEW_ARRAY_RANGE
Now 003-omnibus-opcode makes it to the UnresTest section, where
it dies with a segfault doing something verifier-related.
Change-Id: I8c2c746e16d951f297ecc61402907d70c68d09c1
Diffstat (limited to 'src/compiler/codegen/arm/MethodCodegenDriver.cc')
| -rw-r--r-- | src/compiler/codegen/arm/MethodCodegenDriver.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc index 4a657718fd..f57094fd07 100644 --- a/src/compiler/codegen/arm/MethodCodegenDriver.cc +++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc @@ -118,7 +118,7 @@ STATIC void genFilledNewArray(CompilationUnit* cUnit, MIR* mir, bool isRange) opRegRegImm(cUnit, kOpAdd, rDst, r0, Array::DataOffset().Int32Value()); // Set up the loop counter (known to be > 0) - loadConstant(cUnit, rIdx, dInsn->vA); + loadConstant(cUnit, rIdx, dInsn->vA - 1); // Generate the copy loop. Going backwards for convenience ArmLIR* target = newLIR0(cUnit, kArmPseudoTargetLabel); target->defMask = ENCODE_ALL; @@ -127,7 +127,7 @@ STATIC void genFilledNewArray(CompilationUnit* cUnit, MIR* mir, bool isRange) storeBaseIndexed(cUnit, rDst, rIdx, rVal, 2, kWord); // Use setflags encoding here newLIR3(cUnit, kThumb2SubsRRI12, rIdx, rIdx, 1); - ArmLIR* branch = opCondBranch(cUnit, kArmCondNe); + ArmLIR* branch = opCondBranch(cUnit, kArmCondGe); branch->generic.target = (LIR*)target; } else if (!isRange) { // TUNING: interleave |