PPC: [heap] Make write barrier safe for the concurrent marker.

Port bd3d091dba

Original Commit Message:

    With concurrent marking the write barrier should trigger even if the
    object is black because the concurrent marker could have fetched
    object field before marking the object black.

R=ulan@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=chromium:694255
LOG=N

Change-Id: I3e3b5b467ab3c2eca45ac8d85523c8af4f5f5d4b
Reviewed-on: https://chromium-review.googlesource.com/535736
Reviewed-by: Junliang Yan <jyan@ca.ibm.com>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Jaideep Bajwa <bjaideep@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#45956}
This commit is contained in:
Jaideep Bajwa 2017-06-14 11:41:50 -04:00 committed by Commit Bot
parent 74aa3ad011
commit 8e646bd08c

View File

@ -2302,9 +2302,10 @@ void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm) {
void RecordWriteStub::CheckNeedsToInformIncrementalMarker( void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
MacroAssembler* masm, OnNoNeedToInformIncrementalMarker on_no_need, MacroAssembler* masm, OnNoNeedToInformIncrementalMarker on_no_need,
Mode mode) { Mode mode) {
Label on_black;
Label need_incremental; Label need_incremental;
Label need_incremental_pop_scratch; Label need_incremental_pop_scratch;
#ifndef V8_CONCURRENT_MARKING
Label on_black;
// Let's look at the color of the object: If it is not black we don't have // Let's look at the color of the object: If it is not black we don't have
// to inform the incremental marker. // to inform the incremental marker.
@ -2319,6 +2320,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
} }
__ bind(&on_black); __ bind(&on_black);
#endif
// Get the value from the slot. // Get the value from the slot.
__ LoadP(regs_.scratch0(), MemOperand(regs_.address(), 0)); __ LoadP(regs_.scratch0(), MemOperand(regs_.address(), 0));