| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index f06f2420c348cc79d7de0707488c338ddabcb2eb..57190d75d8c5032e0dbce9008a5de2cd63f3da2d 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -3995,21 +3995,12 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
|
| 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 {
|
| + __ mov(FieldOperand(object, HeapObject::kMapOffset), transition);
|
| + if (instr->hydrogen()->NeedsWriteBarrierForMap()) {
|
| 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);
|
| + __ RecordWriteForMap(object, transition, temp_map, temp, kSaveFPRegs);
|
| }
|
| }
|
|
|
| @@ -4050,7 +4041,8 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
|
| temp,
|
| kSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| - instr->hydrogen()->SmiCheckForWriteBarrier());
|
| + instr->hydrogen()->SmiCheckForWriteBarrier(),
|
| + instr->hydrogen()->PointersToHereCheckForValue());
|
| }
|
| }
|
|
|
| @@ -4219,7 +4211,8 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
|
| value,
|
| kSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| - check_needed);
|
| + check_needed,
|
| + instr->hydrogen()->PointersToHereCheckForValue());
|
| }
|
| }
|
|
|
|
|