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
This commit is contained in:
parent
81f1b0bdfd
commit
b3ecfa32c2
@ -4710,7 +4710,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
// remembered set.
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm); // Restore the extra scratch registers we used.
|
||||
__ RememberedSetHelper(object_,
|
||||
address_,
|
||||
@ -4723,13 +4723,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm); // Restore the extra scratch registers we used.
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
|
||||
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
Register address =
|
||||
x0.Is(regs_.address()) ? regs_.scratch0() : regs_.address();
|
||||
@ -4741,10 +4741,8 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
__ Mov(x2, Operand(ExternalReference::isolate_address(masm->isolate())));
|
||||
|
||||
AllowExternalCallThatCantCauseGC scope(masm);
|
||||
ExternalReference function = (mode == INCREMENTAL_COMPACTION)
|
||||
? ExternalReference::incremental_evacuation_record_write_function(
|
||||
masm->isolate())
|
||||
: ExternalReference::incremental_marking_record_write_function(
|
||||
ExternalReference function =
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate());
|
||||
__ CallCFunction(function, 3, 0);
|
||||
|
||||
|
@ -293,7 +293,7 @@ class RecordWriteStub: public PlatformCodeStub {
|
||||
MacroAssembler* masm,
|
||||
OnNoNeedToInformIncrementalMarker on_no_need,
|
||||
Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm, Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm);
|
||||
|
||||
Major MajorKey() { return RecordWrite; }
|
||||
|
||||
|
@ -4838,7 +4838,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
// remembered set.
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ RememberedSetHelper(object_,
|
||||
address_,
|
||||
@ -4851,13 +4851,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
|
||||
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
int argument_count = 3;
|
||||
__ PrepareCallCFunction(argument_count, regs_.scratch0());
|
||||
@ -4871,18 +4871,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
__ mov(r2, Operand(ExternalReference::isolate_address(masm->isolate())));
|
||||
|
||||
AllowExternalCallThatCantCauseGC scope(masm);
|
||||
if (mode == INCREMENTAL_COMPACTION) {
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_evacuation_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
} else {
|
||||
ASSERT(mode == INCREMENTAL);
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
}
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
}
|
||||
|
||||
|
@ -324,7 +324,7 @@ class RecordWriteStub: public PlatformCodeStub {
|
||||
MacroAssembler* masm,
|
||||
OnNoNeedToInformIncrementalMarker on_no_need,
|
||||
Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm, Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm);
|
||||
|
||||
Major MajorKey() { return RecordWrite; }
|
||||
|
||||
|
@ -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::
|
||||
store_buffer_overflow_function(Isolate* isolate) {
|
||||
return ExternalReference(Redirect(
|
||||
|
@ -711,8 +711,6 @@ class ExternalReference BASE_EMBEDDED {
|
||||
|
||||
static ExternalReference incremental_marking_record_write_function(
|
||||
Isolate* isolate);
|
||||
static ExternalReference incremental_evacuation_record_write_function(
|
||||
Isolate* isolate);
|
||||
static ExternalReference store_buffer_overflow_function(
|
||||
Isolate* isolate);
|
||||
static ExternalReference flush_icache_function(Isolate* isolate);
|
||||
|
@ -4691,7 +4691,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
masm,
|
||||
kUpdateRememberedSetOnNoNeedToInformIncrementalMarker,
|
||||
mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ RememberedSetHelper(object_,
|
||||
address_,
|
||||
@ -4706,13 +4706,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
masm,
|
||||
kReturnOnNoNeedToInformIncrementalMarker,
|
||||
mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ ret(0);
|
||||
}
|
||||
|
||||
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
|
||||
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
int argument_count = 3;
|
||||
__ PrepareCallCFunction(argument_count, regs_.scratch0());
|
||||
@ -4722,18 +4722,11 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
Immediate(ExternalReference::isolate_address(masm->isolate())));
|
||||
|
||||
AllowExternalCallThatCantCauseGC scope(masm);
|
||||
if (mode == INCREMENTAL_COMPACTION) {
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_evacuation_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
} else {
|
||||
ASSERT(mode == INCREMENTAL);
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
}
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
|
||||
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
}
|
||||
|
||||
|
@ -428,7 +428,7 @@ class RecordWriteStub: public PlatformCodeStub {
|
||||
MacroAssembler* masm,
|
||||
OnNoNeedToInformIncrementalMarker on_no_need,
|
||||
Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm, Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm);
|
||||
|
||||
Major MajorKey() { return RecordWrite; }
|
||||
|
||||
|
@ -83,28 +83,6 @@ void IncrementalMarking::RecordWriteFromCode(HeapObject* obj,
|
||||
Isolate* isolate) {
|
||||
ASSERT(obj->IsHeapObject());
|
||||
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());
|
||||
int counter = chunk->write_barrier_counter();
|
||||
|
@ -129,10 +129,6 @@ class IncrementalMarking {
|
||||
Object** slot,
|
||||
Isolate* isolate);
|
||||
|
||||
static void RecordWriteForEvacuationFromCode(HeapObject* obj,
|
||||
Object** slot,
|
||||
Isolate* isolate);
|
||||
|
||||
// Record a slot for compaction. Returns false for objects that are
|
||||
// guaranteed to be rescanned or not guaranteed to survive.
|
||||
//
|
||||
|
@ -5026,7 +5026,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
// remembered set.
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ RememberedSetHelper(object_,
|
||||
address_,
|
||||
@ -5039,13 +5039,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
|
||||
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
int argument_count = 3;
|
||||
__ PrepareCallCFunction(argument_count, regs_.scratch0());
|
||||
@ -5059,18 +5059,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
__ li(a2, Operand(ExternalReference::isolate_address(masm->isolate())));
|
||||
|
||||
AllowExternalCallThatCantCauseGC scope(masm);
|
||||
if (mode == INCREMENTAL_COMPACTION) {
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_evacuation_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
} else {
|
||||
ASSERT(mode == INCREMENTAL);
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
}
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
}
|
||||
|
||||
|
@ -367,7 +367,7 @@ class RecordWriteStub: public PlatformCodeStub {
|
||||
MacroAssembler* masm,
|
||||
OnNoNeedToInformIncrementalMarker on_no_need,
|
||||
Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm, Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm);
|
||||
|
||||
Major MajorKey() { return RecordWrite; }
|
||||
|
||||
|
@ -310,11 +310,6 @@ void ExternalReferenceTable::PopulateTable(Isolate* isolate) {
|
||||
RUNTIME_ENTRY,
|
||||
6,
|
||||
"StoreBuffer::StoreBufferOverflow");
|
||||
Add(ExternalReference::
|
||||
incremental_evacuation_record_write_function(isolate).address(),
|
||||
RUNTIME_ENTRY,
|
||||
7,
|
||||
"IncrementalMarking::RecordWrite");
|
||||
|
||||
// Miscellaneous
|
||||
Add(ExternalReference::roots_array_start(isolate).address(),
|
||||
|
@ -4537,7 +4537,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
// remembered set.
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ RememberedSetHelper(object_,
|
||||
address_,
|
||||
@ -4550,13 +4550,13 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
||||
|
||||
CheckNeedsToInformIncrementalMarker(
|
||||
masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
|
||||
InformIncrementalMarker(masm, mode);
|
||||
InformIncrementalMarker(masm);
|
||||
regs_.Restore(masm);
|
||||
__ ret(0);
|
||||
}
|
||||
|
||||
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
|
||||
regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
Register address =
|
||||
arg_reg_1.is(regs_.address()) ? kScratchRegister : regs_.address();
|
||||
@ -4572,18 +4572,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
||||
|
||||
AllowExternalCallThatCantCauseGC scope(masm);
|
||||
__ PrepareCallCFunction(argument_count);
|
||||
if (mode == INCREMENTAL_COMPACTION) {
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_evacuation_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
} else {
|
||||
ASSERT(mode == INCREMENTAL);
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
}
|
||||
__ CallCFunction(
|
||||
ExternalReference::incremental_marking_record_write_function(
|
||||
masm->isolate()),
|
||||
argument_count);
|
||||
regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
|
||||
}
|
||||
|
||||
|
@ -401,7 +401,7 @@ class RecordWriteStub: public PlatformCodeStub {
|
||||
MacroAssembler* masm,
|
||||
OnNoNeedToInformIncrementalMarker on_no_need,
|
||||
Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm, Mode mode);
|
||||
void InformIncrementalMarker(MacroAssembler* masm);
|
||||
|
||||
Major MajorKey() { return RecordWrite; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user