| Index: src/arm/full-codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/full-codegen-arm.cc (revision 8184)
|
| +++ src/arm/full-codegen-arm.cc (working copy)
|
| @@ -203,7 +203,8 @@
|
| __ str(r0, target);
|
|
|
| // Update the write barrier.
|
| - __ RecordWriteContextSlot(cp, target.offset(), r0, r3, kDontSaveFPRegs);
|
| + __ RecordWriteContextSlot(
|
| + cp, target.offset(), r0, r3, kLRHasBeenSaved, kDontSaveFPRegs);
|
| }
|
| }
|
| }
|
| @@ -648,8 +649,12 @@
|
|
|
| // Emit the write barrier code if the location is in the heap.
|
| if (dst->type() == Slot::CONTEXT) {
|
| - __ RecordWriteContextSlot(
|
| - scratch1, location.offset(), src, scratch2, kDontSaveFPRegs);
|
| + __ RecordWriteContextSlot(scratch1,
|
| + location.offset(),
|
| + src,
|
| + scratch2,
|
| + kLRHasBeenSaved,
|
| + kDontSaveFPRegs);
|
| }
|
| }
|
|
|
| @@ -729,6 +734,7 @@
|
| target.offset(),
|
| result_register(),
|
| r2,
|
| + kLRHasBeenSaved,
|
| kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| OMIT_SMI_CHECK);
|
| @@ -1553,7 +1559,8 @@
|
|
|
| // Update the write barrier for the array store with r0 as the scratch
|
| // register.
|
| - __ RecordWriteField(r1, offset, result_register(), r2, kDontSaveFPRegs);
|
| + __ RecordWriteField(
|
| + r1, offset, result_register(), r2, kLRHasBeenSaved, kDontSaveFPRegs);
|
|
|
| PrepareForBailoutForId(expr->GetIdForElement(i), NO_REGISTERS);
|
| }
|
| @@ -1935,7 +1942,8 @@
|
| MemOperand target = ContextOperand(r1, slot->index());
|
| __ str(r0, target);
|
| __ mov(r3, r0); // Preserve the stored value in r0.
|
| - __ RecordWriteContextSlot(r1, target.offset(), r3, r2, kDontSaveFPRegs);
|
| + __ RecordWriteContextSlot(
|
| + r1, target.offset(), r3, r2, kLRHasBeenSaved, kDontSaveFPRegs);
|
| break;
|
| }
|
| case Slot::LOOKUP:
|
| @@ -1965,7 +1973,8 @@
|
| // The value of the assignment is in result_register(). RecordWrite
|
| // clobbers its second and third register arguments.
|
| __ mov(r3, result_register());
|
| - __ RecordWriteContextSlot(r1, target.offset(), r3, r2, kDontSaveFPRegs);
|
| + __ RecordWriteContextSlot(
|
| + r1, target.offset(), r3, r2, kLRHasBeenSaved, kDontSaveFPRegs);
|
| break;
|
| }
|
|
|
| @@ -2969,7 +2978,8 @@
|
| // Update the write barrier. Save the value as it will be
|
| // overwritten by the write barrier code and is needed afterward.
|
| __ mov(r2, r0);
|
| - __ RecordWriteField(r1, JSValue::kValueOffset, r2, r3, kDontSaveFPRegs);
|
| + __ RecordWriteField(
|
| + r1, JSValue::kValueOffset, r2, r3, kLRHasBeenSaved, kDontSaveFPRegs);
|
|
|
| __ bind(&done);
|
| context()->Plug(r0);
|
| @@ -3265,8 +3275,10 @@
|
| // Possible optimization: do a check that both values are Smis
|
| // (or them and test against Smi mask.)
|
|
|
| - __ RememberedSetHelper(index1, scratch2, kDontSaveFPRegs);
|
| - __ RememberedSetHelper(index2, scratch2, kDontSaveFPRegs);
|
| + __ RememberedSetHelper(
|
| + index1, scratch2, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
|
| + __ RememberedSetHelper(
|
| + index2, scratch2, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
|
|
|
| __ bind(&no_remembered_set);
|
| // We are done. Drop elements from the stack, and return undefined.
|
|
|