| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index b79fc33c7f0406e6295c11b88191366d30c8428a..906ee3e97b8efb5d53f5d487e27ea00cab968908 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -4003,12 +4003,34 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
|
| }
|
| } else if (representation.IsDouble()) {
|
| ASSERT(access.IsInobject());
|
| + ASSERT(!instr->hydrogen()->has_transition());
|
| ASSERT(!instr->hydrogen()->NeedsWriteBarrier());
|
| XMMRegister value = ToDoubleRegister(instr->value());
|
| __ movsd(FieldOperand(object, offset), value);
|
| return;
|
| }
|
|
|
| + if (instr->hydrogen()->has_transition()) {
|
| + Handle<Map> transition = instr->hydrogen()->transition_map();
|
| + AddDeprecationDependency(transition);
|
| + if (!instr->hydrogen()->NeedsWriteBarrierForMap()) {
|
| + __ mov(FieldOperand(object, HeapObject::kMapOffset), transition);
|
| + } else {
|
| + Register temp = ToRegister(instr->temp());
|
| + Register temp_map = ToRegister(instr->temp_map());
|
| + __ mov(temp_map, transition);
|
| + __ mov(FieldOperand(object, HeapObject::kMapOffset), temp_map);
|
| + // Update the write barrier for the map field.
|
| + __ RecordWriteField(object,
|
| + HeapObject::kMapOffset,
|
| + temp_map,
|
| + temp,
|
| + kSaveFPRegs,
|
| + OMIT_REMEMBERED_SET,
|
| + OMIT_SMI_CHECK);
|
| + }
|
| + }
|
| +
|
| // Do the store.
|
| Register write_register = object;
|
| if (!access.IsInobject()) {
|
|
|