From ee164ffe3ddacdf79cd5d2bb536f3ae66c58db70 Mon Sep 17 00:00:00 2001 From: "hpayer@chromium.org" Date: Thu, 22 Nov 2012 07:05:20 +0000 Subject: [PATCH] Use slot instead of value in the write barrier to record write from code. BUG= Review URL: https://codereview.chromium.org/11412096 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13029 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/code-stubs-arm.cc | 7 +------ src/ia32/code-stubs-ia32.cc | 8 +------- src/incremental-marking.cc | 4 ++-- src/incremental-marking.h | 2 +- src/mips/code-stubs-mips.cc | 7 +------ src/x64/code-stubs-x64.cc | 9 ++------- 6 files changed, 8 insertions(+), 29 deletions(-) diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc index 2c2589cf3c..5374b36b48 100644 --- a/src/arm/code-stubs-arm.cc +++ b/src/arm/code-stubs-arm.cc @@ -7381,12 +7381,7 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ASSERT(!address.is(r0)); __ Move(address, regs_.address()); __ Move(r0, regs_.object()); - if (mode == INCREMENTAL_COMPACTION) { - __ Move(r1, address); - } else { - ASSERT(mode == INCREMENTAL); - __ ldr(r1, MemOperand(address, 0)); - } + __ Move(r1, address); __ mov(r2, Operand(ExternalReference::isolate_address())); AllowExternalCallThatCantCauseGC scope(masm); diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc index 42086c8fc8..fa3e1a88bb 100644 --- a/src/ia32/code-stubs-ia32.cc +++ b/src/ia32/code-stubs-ia32.cc @@ -7225,13 +7225,7 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { int argument_count = 3; __ PrepareCallCFunction(argument_count, regs_.scratch0()); __ mov(Operand(esp, 0 * kPointerSize), regs_.object()); - if (mode == INCREMENTAL_COMPACTION) { - __ mov(Operand(esp, 1 * kPointerSize), regs_.address()); // Slot. - } else { - ASSERT(mode == INCREMENTAL); - __ mov(regs_.scratch0(), Operand(regs_.address(), 0)); - __ mov(Operand(esp, 1 * kPointerSize), regs_.scratch0()); // Value. - } + __ mov(Operand(esp, 1 * kPointerSize), regs_.address()); // Slot. __ mov(Operand(esp, 2 * kPointerSize), Immediate(ExternalReference::isolate_address())); diff --git a/src/incremental-marking.cc b/src/incremental-marking.cc index e9fd74c0d1..e420d28521 100644 --- a/src/incremental-marking.cc +++ b/src/incremental-marking.cc @@ -78,7 +78,7 @@ void IncrementalMarking::RecordWriteSlow(HeapObject* obj, void IncrementalMarking::RecordWriteFromCode(HeapObject* obj, - Object* value, + Object** slot, Isolate* isolate) { ASSERT(obj->IsHeapObject()); IncrementalMarking* marking = isolate->heap()->incremental_marking(); @@ -94,7 +94,7 @@ void IncrementalMarking::RecordWriteFromCode(HeapObject* obj, MemoryChunk::kWriteBarrierCounterGranularity); } - marking->RecordWrite(obj, NULL, value); + marking->RecordWrite(obj, slot, *slot); } diff --git a/src/incremental-marking.h b/src/incremental-marking.h index 77d54bed4b..fc5a978cc4 100644 --- a/src/incremental-marking.h +++ b/src/incremental-marking.h @@ -127,7 +127,7 @@ class IncrementalMarking { } static void RecordWriteFromCode(HeapObject* obj, - Object* value, + Object** slot, Isolate* isolate); static void RecordWriteForEvacuationFromCode(HeapObject* obj, diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 2897878cbf..0e4d37b2fe 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -7555,12 +7555,7 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ASSERT(!address.is(a0)); __ Move(address, regs_.address()); __ Move(a0, regs_.object()); - if (mode == INCREMENTAL_COMPACTION) { - __ Move(a1, address); - } else { - ASSERT(mode == INCREMENTAL); - __ lw(a1, MemOperand(address, 0)); - } + __ Move(a1, address); __ li(a2, Operand(ExternalReference::isolate_address())); AllowExternalCallThatCantCauseGC scope(masm); diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc index 6d6d3e9c06..c529eb4da5 100644 --- a/src/x64/code-stubs-x64.cc +++ b/src/x64/code-stubs-x64.cc @@ -6214,13 +6214,8 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ASSERT(!address.is(arg1)); __ Move(address, regs_.address()); __ Move(arg1, regs_.object()); - if (mode == INCREMENTAL_COMPACTION) { - // TODO(gc) Can we just set address arg2 in the beginning? - __ Move(arg2, address); - } else { - ASSERT(mode == INCREMENTAL); - __ movq(arg2, Operand(address, 0)); - } + // TODO(gc) Can we just set address arg2 in the beginning? + __ Move(arg2, address); __ LoadAddress(arg3, ExternalReference::isolate_address()); int argument_count = 3;