diff options
Diffstat (limited to 'compiler/optimizing')
| -rw-r--r-- | compiler/optimizing/intrinsics_arm.cc | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/compiler/optimizing/intrinsics_arm.cc b/compiler/optimizing/intrinsics_arm.cc index 806fd7a8f4..48711e6aa0 100644 --- a/compiler/optimizing/intrinsics_arm.cc +++ b/compiler/optimizing/intrinsics_arm.cc @@ -989,10 +989,7 @@ void IntrinsicCodeGeneratorARM::VisitStringEquals(HInvoke* invoke) { DCHECK_ALIGNED(value_offset, 4); static_assert(IsAligned<4>(kObjectAlignment), "String of odd length is not zero padded"); - // temp cannot overflow because we cannot allocate a String object with size 4GiB or greater. - __ add(temp, temp, ShifterOperand(temp)); __ LoadImmediate(temp1, value_offset); - __ add(temp, temp, ShifterOperand(value_offset)); // Loop to compare strings 2 characters at a time starting at the front of the string. // Ok to do this because strings with an odd length are zero-padded. @@ -1002,8 +999,8 @@ void IntrinsicCodeGeneratorARM::VisitStringEquals(HInvoke* invoke) { __ cmp(out, ShifterOperand(temp2)); __ b(&return_false, NE); __ add(temp1, temp1, ShifterOperand(sizeof(uint32_t))); - __ cmp(temp1, ShifterOperand(temp)); - __ b(&loop, LO); + __ subs(temp, temp, ShifterOperand(sizeof(uint32_t) / sizeof(uint16_t))); + __ b(&loop, GT); // Return true and exit the function. // If loop does not result in returning false, we return true. |