Commit 93150467 authored by Milad Fa's avatar Milad Fa Committed by V8 LUCI CQ

PPC/s390: [heap] Add shared barrier to RecordWrite builtin

Port c5d48121

Original Commit Message:

    This CL adds the shared barrier to the RecordWrite builtin which is
    used in generated code for builtins, interpreted and optimized code.

    The out-of-line part of the barrier now checks whether either the
    POINTERS_TO_HERE_ARE_INTERESTING or the IN_SHARED_HEAP bit is set in
    the value object's page flags.

    Outside of marking the RecordWrite builtin now needs to check whether
    to insert into the generational or shared remembered set. Inserting
    into the shared remembered set will always call into C++ code.

    During marking the RecordWrite builtin now also needs to check whether
    this store created an old-to-shared pointer.

R=dinfuehr@chromium.org, joransiu@ca.ibm.com, junyan@redhat.com, midawson@redhat.com
BUG=
LOG=N

Change-Id: I850fc234fa34868c6320fc64c6dac7e2f24af1c3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3825891
Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#82399}
parent e44c745d
......@@ -177,9 +177,10 @@ class OutOfLineRecordWrite final : public OutOfLineCode {
if (COMPRESS_POINTERS_BOOL) {
__ DecompressTaggedPointer(value_, value_);
}
__ CheckPageFlag(value_, scratch0_,
MemoryChunk::kPointersToHereAreInterestingMask, eq,
exit());
__ CheckPageFlag(
value_, scratch0_,
MemoryChunk::kPointersToHereAreInterestingOrInSharedHeapMask, eq,
exit());
if (offset_ == no_reg) {
__ addi(scratch1_, object_, Operand(offset_immediate_));
} else {
......
......@@ -214,9 +214,10 @@ class OutOfLineRecordWrite final : public OutOfLineCode {
if (COMPRESS_POINTERS_BOOL) {
__ DecompressTaggedPointer(value_, value_);
}
__ CheckPageFlag(value_, scratch0_,
MemoryChunk::kPointersToHereAreInterestingMask, eq,
exit());
__ CheckPageFlag(
value_, scratch0_,
MemoryChunk::kPointersToHereAreInterestingOrInSharedHeapMask, eq,
exit());
if (offset_ == no_reg) {
__ AddS64(scratch1_, object_, Operand(offset_immediate_));
} else {
......
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