| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index b52a6c0c1154100abe5a5e3918d63ed1d3ab5e0b..6516c5b629f35ed82d453a318f6ec9a4d7814afa 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -6258,12 +6258,15 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
|
| __ bind(&skip_to_incremental_compacting);
|
| GenerateIncremental(masm, INCREMENTAL_COMPACTION);
|
|
|
| - if (!masm->isolate()->heap()->incremental_marking()->IsMarking()) {
|
| + // TODO(gc) ensure that GC can't happen after stub was generated by before
|
| + // it was added to a stub cache.
|
| + IncrementalMarking* marking = masm->isolate()->heap()->incremental_marking();
|
| + if (!marking->IsMarking() || marking->IsCompacting()) {
|
| ASSERT(masm->byte_at(0) == kTwoByteJumpInstruction);
|
| masm->set_byte_at(0, kTwoByteNopInstruction);
|
| }
|
|
|
| - if (!masm->isolate()->heap()->incremental_marking()->IsMarking()) {
|
| + if (!marking->IsMarking()) {
|
| ASSERT(masm->byte_at(2) == kFiveByteJumpInstruction);
|
| masm->set_byte_at(2, kFiveByteNopInstruction);
|
| }
|
| @@ -6311,9 +6314,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
|
| }
|
|
|
|
|
| -void RecordWriteStub::InformIncrementalMarker(
|
| - MacroAssembler* masm,
|
| - RecordWriteStub::Mode mode) {
|
| +void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
|
| regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
|
| int argument_count = 3;
|
| __ PrepareCallCFunction(argument_count, regs_.scratch0());
|
| @@ -6348,8 +6349,8 @@ void RecordWriteStub::InformIncrementalMarker(
|
|
|
| void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
|
| MacroAssembler* masm,
|
| - RecordWriteStub::OnNoNeedToInformIncrementalMarker on_no_need,
|
| - RecordWriteStub::Mode mode) {
|
| + OnNoNeedToInformIncrementalMarker on_no_need,
|
| + Mode mode) {
|
| Label object_is_black, need_incremental, need_incremental_pop_object;
|
|
|
| // Let's look at the color of the object: If it is not black we don't have
|
|
|