summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/arm/MethodCodegenDriver.cc
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2011-10-16 14:33:08 -0700
committer buzbee <buzbee@google.com> 2011-10-16 14:33:08 -0700
commit3181345d4492017c26b1774be8f0554ad3f04dbf (patch)
tree6d94935fa4cedf4468c0dc78a299a60d0e7395f3 /src/compiler/codegen/arm/MethodCodegenDriver.cc
parent63f86de9b9444072922872ff08f3653f2920238d (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.cc4
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