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); |
} |
} |