| Index: src/x87/full-codegen-x87.cc
|
| diff --git a/src/x87/full-codegen-x87.cc b/src/x87/full-codegen-x87.cc
|
| index 94ccbcfb5521d3ddd0fd8855d986f8da8801f0e3..15a7176fa9d102437a9b7bc7fceae4344037c0e8 100644
|
| --- a/src/x87/full-codegen-x87.cc
|
| +++ b/src/x87/full-codegen-x87.cc
|
| @@ -224,7 +224,8 @@ void FullCodeGenerator::Generate() {
|
| __ RecordWriteContextSlot(esi,
|
| context_offset,
|
| eax,
|
| - ebx);
|
| + ebx,
|
| + kDontSaveFPRegs);
|
| } else if (FLAG_debug_code) {
|
| Label done;
|
| __ JumpIfInNewSpace(esi, eax, &done, Label::kNear);
|
| @@ -708,7 +709,7 @@ void FullCodeGenerator::SetVar(Variable* var,
|
| if (var->IsContextSlot()) {
|
| int offset = Context::SlotOffset(var->index());
|
| DCHECK(!scratch0.is(esi) && !src.is(esi) && !scratch1.is(esi));
|
| - __ RecordWriteContextSlot(scratch0, offset, src, scratch1);
|
| + __ RecordWriteContextSlot(scratch0, offset, src, scratch1, kDontSaveFPRegs);
|
| }
|
| }
|
|
|
| @@ -842,6 +843,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
|
| Context::SlotOffset(variable->index()),
|
| result_register(),
|
| ecx,
|
| + kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| OMIT_SMI_CHECK);
|
| PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
|
| @@ -881,6 +883,7 @@ void FullCodeGenerator::VisitModuleDeclaration(ModuleDeclaration* declaration) {
|
| Context::SlotOffset(variable->index()),
|
| eax,
|
| ecx,
|
| + kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| OMIT_SMI_CHECK);
|
| PrepareForBailoutForId(declaration->proxy()->id(), NO_REGISTERS);
|
| @@ -1784,6 +1787,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
|
| __ mov(FieldOperand(ebx, offset), result_register());
|
| // Update the write barrier for the array store.
|
| __ RecordWriteField(ebx, offset, result_register(), ecx,
|
| + kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| INLINE_SMI_CHECK);
|
| } else {
|
| @@ -1942,7 +1946,8 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
|
| Immediate(Smi::FromInt(continuation.pos())));
|
| __ mov(FieldOperand(eax, JSGeneratorObject::kContextOffset), esi);
|
| __ mov(ecx, esi);
|
| - __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx);
|
| + __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx,
|
| + kDontSaveFPRegs);
|
| __ lea(ebx, Operand(ebp, StandardFrameConstants::kExpressionsOffset));
|
| __ cmp(esp, ebx);
|
| __ j(equal, &post_runtime);
|
| @@ -2016,7 +2021,8 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
|
| Immediate(Smi::FromInt(l_continuation.pos())));
|
| __ mov(FieldOperand(eax, JSGeneratorObject::kContextOffset), esi);
|
| __ mov(ecx, esi);
|
| - __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx);
|
| + __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx,
|
| + kDontSaveFPRegs);
|
| __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
|
| __ mov(context_register(),
|
| Operand(ebp, StandardFrameConstants::kContextOffset));
|
| @@ -2225,7 +2231,7 @@ void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
|
| // Only the value field needs a write barrier, as the other values are in the
|
| // root set.
|
| __ RecordWriteField(eax, JSGeneratorObject::kResultValuePropertyOffset,
|
| - ecx, edx);
|
| + ecx, edx, kDontSaveFPRegs);
|
| }
|
|
|
|
|
| @@ -2433,7 +2439,7 @@ void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot(
|
| if (var->IsContextSlot()) {
|
| __ mov(edx, eax);
|
| int offset = Context::SlotOffset(var->index());
|
| - __ RecordWriteContextSlot(ecx, offset, edx, ebx);
|
| + __ RecordWriteContextSlot(ecx, offset, edx, ebx, kDontSaveFPRegs);
|
| }
|
| }
|
|
|
| @@ -3532,7 +3538,7 @@ void FullCodeGenerator::EmitSetValueOf(CallRuntime* expr) {
|
| // Update the write barrier. Save the value as it will be
|
| // overwritten by the write barrier code and is needed afterward.
|
| __ mov(edx, eax);
|
| - __ RecordWriteField(ebx, JSValue::kValueOffset, edx, ecx);
|
| + __ RecordWriteField(ebx, JSValue::kValueOffset, edx, ecx, kDontSaveFPRegs);
|
|
|
| __ bind(&done);
|
| context()->Plug(eax);
|
|
|