Index: runtime/vm/intermediate_language_arm.cc |
=================================================================== |
--- runtime/vm/intermediate_language_arm.cc (revision 32754) |
+++ runtime/vm/intermediate_language_arm.cc (working copy) |
@@ -2197,20 +2197,18 @@ |
__ LoadObject(R2, type_arguments()); |
__ ldr(R2, FieldAddress(R2, TypeArguments::instantiations_offset())); |
- __ ldr(R3, FieldAddress(R2, Array::length_offset())); |
__ AddImmediate(R2, Array::data_offset() - kHeapObjectTag); |
- __ add(R3, R2, ShifterOperand(R3, LSL, 1)); // R3 is Smi. |
+ // The instantiations cache is initialized with Object::zero_array() and is |
+ // therefore guaranteed to contain kNoInstantiator. No length check needed. |
Label loop, found, slow_case; |
__ Bind(&loop); |
- __ cmp(R2, ShifterOperand(R3)); |
- __ b(&slow_case, CS); // Unsigned higher or equal. |
__ ldr(R1, Address(R2, 0 * kWordSize)); // Cached instantiator. |
__ cmp(R1, ShifterOperand(R0)); |
__ b(&found, EQ); |
- __ CompareImmediate(R1, Smi::RawValue(StubCode::kNoInstantiator)); |
- __ b(&slow_case, EQ); |
__ AddImmediate(R2, 2 * kWordSize); |
- __ b(&loop); |
+ __ CompareImmediate(R1, Smi::RawValue(StubCode::kNoInstantiator)); |
+ __ b(&loop, NE); |
+ __ b(&slow_case); |
__ Bind(&found); |
__ ldr(R0, Address(R2, 1 * kWordSize)); // Cached instantiated args. |
__ b(&type_arguments_instantiated); |