| Index: runtime/vm/intermediate_language_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_ia32.cc (revision 11354)
|
| +++ runtime/vm/intermediate_language_ia32.cc (working copy)
|
| @@ -901,12 +901,12 @@
|
| __ j(ABOVE_EQUAL, deopt);
|
| // Note that index is Smi, i.e, times 2.
|
| ASSERT(kSmiTagShift == 1);
|
| - if (this->value()->BindsToConstant()) {
|
| - // Compile time constants are Smi or allocated in the old space.
|
| - __ movl(FieldAddress(receiver, index, TIMES_2, sizeof(RawArray)),
|
| + if (this->value()->NeedsStoreBuffer()) {
|
| + __ StoreIntoObject(receiver,
|
| + FieldAddress(receiver, index, TIMES_2, sizeof(RawArray)),
|
| value);
|
| } else {
|
| - __ StoreIntoObject(receiver,
|
| + __ StoreIntoObjectNoBarrier(receiver,
|
| FieldAddress(receiver, index, TIMES_2, sizeof(RawArray)),
|
| value);
|
| }
|
| @@ -919,12 +919,12 @@
|
| __ movl(temp, FieldAddress(receiver, GrowableObjectArray::data_offset()));
|
| // Note that index is Smi, i.e, times 2.
|
| ASSERT(kSmiTagShift == 1);
|
| - if (this->value()->BindsToConstant()) {
|
| - // Compile time constants are Smi or allocated in the old space.
|
| - __ movl(FieldAddress(temp, index, TIMES_2, sizeof(RawArray)),
|
| + if (this->value()->NeedsStoreBuffer()) {
|
| + __ StoreIntoObject(temp,
|
| + FieldAddress(temp, index, TIMES_2, sizeof(RawArray)),
|
| value);
|
| } else {
|
| - __ StoreIntoObject(temp,
|
| + __ StoreIntoObjectNoBarrier(temp,
|
| FieldAddress(temp, index, TIMES_2, sizeof(RawArray)),
|
| value);
|
| }
|
| @@ -998,12 +998,12 @@
|
| ASSERT(ic_data() != NULL);
|
| compiler->EmitClassChecksNoSmi(*ic_data(), instance_reg, temp_reg, deopt);
|
| }
|
| - if (this->value()->BindsToConstant()) {
|
| - // Compile time constants are Smi or allocated in the old space.
|
| - __ movl(FieldAddress(instance_reg, field().Offset()), value_reg);
|
| - } else {
|
| + if (this->value()->NeedsStoreBuffer()) {
|
| __ StoreIntoObject(instance_reg,
|
| FieldAddress(instance_reg, field().Offset()), value_reg);
|
| + } else {
|
| + __ StoreIntoObjectNoBarrier(instance_reg,
|
| + FieldAddress(instance_reg, field().Offset()), value_reg);
|
| }
|
| }
|
|
|
| @@ -1037,11 +1037,11 @@
|
| ASSERT(locs()->out().reg() == value);
|
|
|
| __ LoadObject(temp, field());
|
| - if (this->value()->BindsToConstant()) {
|
| - // Compile time constants are Smi or allocated in the old space.
|
| - __ movl(FieldAddress(temp, Field::value_offset()), value);
|
| + if (this->value()->NeedsStoreBuffer()) {
|
| + __ StoreIntoObject(temp, FieldAddress(temp, Field::value_offset()), value);
|
| } else {
|
| - __ StoreIntoObject(temp, FieldAddress(temp, Field::value_offset()), value);
|
| + __ StoreIntoObjectNoBarrier(
|
| + temp, FieldAddress(temp, Field::value_offset()), value);
|
| }
|
| }
|
|
|
|
|