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