| Index: runtime/vm/intrinsifier_arm.cc
|
| ===================================================================
|
| --- runtime/vm/intrinsifier_arm.cc (revision 42190)
|
| +++ runtime/vm/intrinsifier_arm.cc (working copy)
|
| @@ -132,7 +132,8 @@
|
|
|
| // Set the length field in the growable array object to 0.
|
| __ LoadImmediate(R1, 0);
|
| - __ str(R1, FieldAddress(R0, GrowableObjectArray::length_offset()));
|
| + __ StoreIntoSmiField(FieldAddress(R0, GrowableObjectArray::length_offset()),
|
| + R1);
|
| __ Ret(); // Returns the newly allocated object in R0.
|
|
|
| __ Bind(&fall_through);
|
| @@ -193,12 +194,15 @@
|
| // be greater than the length of the data container.
|
| // On stack: growable array (+1), length (+0).
|
| void Intrinsifier::GrowableArraySetLength(Assembler* assembler) {
|
| + Label fall_through;
|
| __ ldr(R0, Address(SP, 1 * kWordSize)); // Growable array.
|
| __ ldr(R1, Address(SP, 0 * kWordSize)); // Length value.
|
| - __ tst(R1, Operand(kSmiTagMask)); // Check for Smi.
|
| - __ str(R1, FieldAddress(R0, GrowableObjectArray::length_offset()), EQ);
|
| - __ bx(LR, EQ);
|
| - // Fall through on non-Smi.
|
| + __ tst(R1, Operand(kSmiTagMask));
|
| + __ b(&fall_through, NE); // Non-smi length.
|
| + __ StoreIntoSmiField(FieldAddress(R0, GrowableObjectArray::length_offset()),
|
| + R1);
|
| + __ Ret();
|
| + __ Bind(&fall_through);
|
| }
|
|
|
|
|
| @@ -247,7 +251,8 @@
|
| const int32_t value_one = reinterpret_cast<int32_t>(Smi::New(1));
|
| // len = len + 1;
|
| __ add(R3, R1, Operand(value_one));
|
| - __ str(R3, FieldAddress(R0, GrowableObjectArray::length_offset()));
|
| + __ StoreIntoSmiField(FieldAddress(R0, GrowableObjectArray::length_offset()),
|
| + R3);
|
| __ ldr(R0, Address(SP, 0 * kWordSize)); // Value.
|
| ASSERT(kSmiTagShift == 1);
|
| __ add(R1, R2, Operand(R1, LSL, 1));
|
| @@ -1739,7 +1744,7 @@
|
| __ Bind(&done);
|
| __ mov(R0, Operand(1), EQ);
|
| __ SmiTag(R0);
|
| - __ str(R0, FieldAddress(R1, String::hash_offset()));
|
| + __ StoreIntoSmiField(FieldAddress(R1, String::hash_offset()), R0);
|
| __ Ret();
|
| }
|
|
|
| @@ -1812,7 +1817,7 @@
|
| R6);
|
| // Clear hash.
|
| __ LoadImmediate(TMP, 0);
|
| - __ str(TMP, FieldAddress(R0, String::hash_offset()));
|
| + __ StoreIntoSmiField(FieldAddress(R0, String::hash_offset()), TMP);
|
|
|
| __ IncrementAllocationStatsWithSize(R4, R2, cid, space);
|
| __ b(ok);
|
|
|