Commit b3ecfa32 authored by hpayer@chromium.org's avatar hpayer@chromium.org

Consolidate RecordWriteFromCode and RecordWriteForEvacuationFromCode.

BUG=
R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/185233008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19639 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 81f1b0bd
...@@ -4710,7 +4710,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4710,7 +4710,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
// remembered set. // remembered set.
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); // Restore the extra scratch registers we used. regs_.Restore(masm); // Restore the extra scratch registers we used.
__ RememberedSetHelper(object_, __ RememberedSetHelper(object_,
address_, address_,
...@@ -4723,13 +4723,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4723,13 +4723,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kReturnOnNoNeedToInformIncrementalMarker, mode); masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); // Restore the extra scratch registers we used. regs_.Restore(masm); // Restore the extra scratch registers we used.
__ Ret(); __ Ret();
} }
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
Register address = Register address =
x0.Is(regs_.address()) ? regs_.scratch0() : regs_.address(); x0.Is(regs_.address()) ? regs_.scratch0() : regs_.address();
...@@ -4741,10 +4741,8 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ...@@ -4741,10 +4741,8 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
__ Mov(x2, Operand(ExternalReference::isolate_address(masm->isolate()))); __ Mov(x2, Operand(ExternalReference::isolate_address(masm->isolate())));
AllowExternalCallThatCantCauseGC scope(masm); AllowExternalCallThatCantCauseGC scope(masm);
ExternalReference function = (mode == INCREMENTAL_COMPACTION) ExternalReference function =
? ExternalReference::incremental_evacuation_record_write_function( ExternalReference::incremental_marking_record_write_function(
masm->isolate())
: ExternalReference::incremental_marking_record_write_function(
masm->isolate()); masm->isolate());
__ CallCFunction(function, 3, 0); __ CallCFunction(function, 3, 0);
......
...@@ -293,7 +293,7 @@ class RecordWriteStub: public PlatformCodeStub { ...@@ -293,7 +293,7 @@ class RecordWriteStub: public PlatformCodeStub {
MacroAssembler* masm, MacroAssembler* masm,
OnNoNeedToInformIncrementalMarker on_no_need, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm, Mode mode); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; } Major MajorKey() { return RecordWrite; }
......
...@@ -4838,7 +4838,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4838,7 +4838,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
// remembered set. // remembered set.
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object_, __ RememberedSetHelper(object_,
address_, address_,
...@@ -4851,13 +4851,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4851,13 +4851,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kReturnOnNoNeedToInformIncrementalMarker, mode); masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ Ret(); __ Ret();
} }
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
int argument_count = 3; int argument_count = 3;
__ PrepareCallCFunction(argument_count, regs_.scratch0()); __ PrepareCallCFunction(argument_count, regs_.scratch0());
...@@ -4871,18 +4871,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ...@@ -4871,18 +4871,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
__ mov(r2, Operand(ExternalReference::isolate_address(masm->isolate()))); __ mov(r2, Operand(ExternalReference::isolate_address(masm->isolate())));
AllowExternalCallThatCantCauseGC scope(masm); AllowExternalCallThatCantCauseGC scope(masm);
if (mode == INCREMENTAL_COMPACTION) {
__ CallCFunction(
ExternalReference::incremental_evacuation_record_write_function(
masm->isolate()),
argument_count);
} else {
ASSERT(mode == INCREMENTAL);
__ CallCFunction( __ CallCFunction(
ExternalReference::incremental_marking_record_write_function( ExternalReference::incremental_marking_record_write_function(
masm->isolate()), masm->isolate()),
argument_count); argument_count);
}
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
} }
......
...@@ -324,7 +324,7 @@ class RecordWriteStub: public PlatformCodeStub { ...@@ -324,7 +324,7 @@ class RecordWriteStub: public PlatformCodeStub {
MacroAssembler* masm, MacroAssembler* masm,
OnNoNeedToInformIncrementalMarker on_no_need, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm, Mode mode); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; } Major MajorKey() { return RecordWrite; }
......
...@@ -1028,14 +1028,6 @@ ExternalReference ExternalReference:: ...@@ -1028,14 +1028,6 @@ ExternalReference ExternalReference::
} }
ExternalReference ExternalReference::
incremental_evacuation_record_write_function(Isolate* isolate) {
return ExternalReference(Redirect(
isolate,
FUNCTION_ADDR(IncrementalMarking::RecordWriteForEvacuationFromCode)));
}
ExternalReference ExternalReference:: ExternalReference ExternalReference::
store_buffer_overflow_function(Isolate* isolate) { store_buffer_overflow_function(Isolate* isolate) {
return ExternalReference(Redirect( return ExternalReference(Redirect(
......
...@@ -711,8 +711,6 @@ class ExternalReference BASE_EMBEDDED { ...@@ -711,8 +711,6 @@ class ExternalReference BASE_EMBEDDED {
static ExternalReference incremental_marking_record_write_function( static ExternalReference incremental_marking_record_write_function(
Isolate* isolate); Isolate* isolate);
static ExternalReference incremental_evacuation_record_write_function(
Isolate* isolate);
static ExternalReference store_buffer_overflow_function( static ExternalReference store_buffer_overflow_function(
Isolate* isolate); Isolate* isolate);
static ExternalReference flush_icache_function(Isolate* isolate); static ExternalReference flush_icache_function(Isolate* isolate);
......
...@@ -4691,7 +4691,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4691,7 +4691,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, masm,
kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker,
mode); mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object_, __ RememberedSetHelper(object_,
address_, address_,
...@@ -4706,13 +4706,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4706,13 +4706,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
masm, masm,
kReturnOnNoNeedToInformIncrementalMarker, kReturnOnNoNeedToInformIncrementalMarker,
mode); mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ ret(0); __ ret(0);
} }
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
int argument_count = 3; int argument_count = 3;
__ PrepareCallCFunction(argument_count, regs_.scratch0()); __ PrepareCallCFunction(argument_count, regs_.scratch0());
...@@ -4722,18 +4722,11 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ...@@ -4722,18 +4722,11 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
Immediate(ExternalReference::isolate_address(masm->isolate()))); Immediate(ExternalReference::isolate_address(masm->isolate())));
AllowExternalCallThatCantCauseGC scope(masm); AllowExternalCallThatCantCauseGC scope(masm);
if (mode == INCREMENTAL_COMPACTION) {
__ CallCFunction(
ExternalReference::incremental_evacuation_record_write_function(
masm->isolate()),
argument_count);
} else {
ASSERT(mode == INCREMENTAL);
__ CallCFunction( __ CallCFunction(
ExternalReference::incremental_marking_record_write_function( ExternalReference::incremental_marking_record_write_function(
masm->isolate()), masm->isolate()),
argument_count); argument_count);
}
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
} }
......
...@@ -428,7 +428,7 @@ class RecordWriteStub: public PlatformCodeStub { ...@@ -428,7 +428,7 @@ class RecordWriteStub: public PlatformCodeStub {
MacroAssembler* masm, MacroAssembler* masm,
OnNoNeedToInformIncrementalMarker on_no_need, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm, Mode mode); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; } Major MajorKey() { return RecordWrite; }
......
...@@ -83,28 +83,6 @@ void IncrementalMarking::RecordWriteFromCode(HeapObject* obj, ...@@ -83,28 +83,6 @@ void IncrementalMarking::RecordWriteFromCode(HeapObject* obj,
Isolate* isolate) { Isolate* isolate) {
ASSERT(obj->IsHeapObject()); ASSERT(obj->IsHeapObject());
IncrementalMarking* marking = isolate->heap()->incremental_marking(); IncrementalMarking* marking = isolate->heap()->incremental_marking();
ASSERT(!marking->is_compacting_);
MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address());
int counter = chunk->write_barrier_counter();
if (counter < (MemoryChunk::kWriteBarrierCounterGranularity / 2)) {
marking->write_barriers_invoked_since_last_step_ +=
MemoryChunk::kWriteBarrierCounterGranularity -
chunk->write_barrier_counter();
chunk->set_write_barrier_counter(
MemoryChunk::kWriteBarrierCounterGranularity);
}
marking->RecordWrite(obj, slot, *slot);
}
void IncrementalMarking::RecordWriteForEvacuationFromCode(HeapObject* obj,
Object** slot,
Isolate* isolate) {
ASSERT(obj->IsHeapObject());
IncrementalMarking* marking = isolate->heap()->incremental_marking();
ASSERT(marking->is_compacting_);
MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address());
int counter = chunk->write_barrier_counter(); int counter = chunk->write_barrier_counter();
......
...@@ -129,10 +129,6 @@ class IncrementalMarking { ...@@ -129,10 +129,6 @@ class IncrementalMarking {
Object** slot, Object** slot,
Isolate* isolate); Isolate* isolate);
static void RecordWriteForEvacuationFromCode(HeapObject* obj,
Object** slot,
Isolate* isolate);
// Record a slot for compaction. Returns false for objects that are // Record a slot for compaction. Returns false for objects that are
// guaranteed to be rescanned or not guaranteed to survive. // guaranteed to be rescanned or not guaranteed to survive.
// //
......
...@@ -5026,7 +5026,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -5026,7 +5026,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
// remembered set. // remembered set.
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object_, __ RememberedSetHelper(object_,
address_, address_,
...@@ -5039,13 +5039,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -5039,13 +5039,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kReturnOnNoNeedToInformIncrementalMarker, mode); masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ Ret(); __ Ret();
} }
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
int argument_count = 3; int argument_count = 3;
__ PrepareCallCFunction(argument_count, regs_.scratch0()); __ PrepareCallCFunction(argument_count, regs_.scratch0());
...@@ -5059,18 +5059,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ...@@ -5059,18 +5059,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
__ li(a2, Operand(ExternalReference::isolate_address(masm->isolate()))); __ li(a2, Operand(ExternalReference::isolate_address(masm->isolate())));
AllowExternalCallThatCantCauseGC scope(masm); AllowExternalCallThatCantCauseGC scope(masm);
if (mode == INCREMENTAL_COMPACTION) {
__ CallCFunction(
ExternalReference::incremental_evacuation_record_write_function(
masm->isolate()),
argument_count);
} else {
ASSERT(mode == INCREMENTAL);
__ CallCFunction( __ CallCFunction(
ExternalReference::incremental_marking_record_write_function( ExternalReference::incremental_marking_record_write_function(
masm->isolate()), masm->isolate()),
argument_count); argument_count);
}
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
} }
......
...@@ -367,7 +367,7 @@ class RecordWriteStub: public PlatformCodeStub { ...@@ -367,7 +367,7 @@ class RecordWriteStub: public PlatformCodeStub {
MacroAssembler* masm, MacroAssembler* masm,
OnNoNeedToInformIncrementalMarker on_no_need, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm, Mode mode); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; } Major MajorKey() { return RecordWrite; }
......
...@@ -310,11 +310,6 @@ void ExternalReferenceTable::PopulateTable(Isolate* isolate) { ...@@ -310,11 +310,6 @@ void ExternalReferenceTable::PopulateTable(Isolate* isolate) {
RUNTIME_ENTRY, RUNTIME_ENTRY,
6, 6,
"StoreBuffer::StoreBufferOverflow"); "StoreBuffer::StoreBufferOverflow");
Add(ExternalReference::
incremental_evacuation_record_write_function(isolate).address(),
RUNTIME_ENTRY,
7,
"IncrementalMarking::RecordWrite");
// Miscellaneous // Miscellaneous
Add(ExternalReference::roots_array_start(isolate).address(), Add(ExternalReference::roots_array_start(isolate).address(),
......
...@@ -4537,7 +4537,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4537,7 +4537,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
// remembered set. // remembered set.
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode); masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object_, __ RememberedSetHelper(object_,
address_, address_,
...@@ -4550,13 +4550,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { ...@@ -4550,13 +4550,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
CheckNeedsToInformIncrementalMarker( CheckNeedsToInformIncrementalMarker(
masm, kReturnOnNoNeedToInformIncrementalMarker, mode); masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
InformIncrementalMarker(masm, mode); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ ret(0); __ ret(0);
} }
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
Register address = Register address =
arg_reg_1.is(regs_.address()) ? kScratchRegister : regs_.address(); arg_reg_1.is(regs_.address()) ? kScratchRegister : regs_.address();
...@@ -4572,18 +4572,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { ...@@ -4572,18 +4572,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
AllowExternalCallThatCantCauseGC scope(masm); AllowExternalCallThatCantCauseGC scope(masm);
__ PrepareCallCFunction(argument_count); __ PrepareCallCFunction(argument_count);
if (mode == INCREMENTAL_COMPACTION) {
__ CallCFunction(
ExternalReference::incremental_evacuation_record_write_function(
masm->isolate()),
argument_count);
} else {
ASSERT(mode == INCREMENTAL);
__ CallCFunction( __ CallCFunction(
ExternalReference::incremental_marking_record_write_function( ExternalReference::incremental_marking_record_write_function(
masm->isolate()), masm->isolate()),
argument_count); argument_count);
}
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_); regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
} }
......
...@@ -401,7 +401,7 @@ class RecordWriteStub: public PlatformCodeStub { ...@@ -401,7 +401,7 @@ class RecordWriteStub: public PlatformCodeStub {
MacroAssembler* masm, MacroAssembler* masm,
OnNoNeedToInformIncrementalMarker on_no_need, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm, Mode mode); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() { return RecordWrite; } Major MajorKey() { return RecordWrite; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment