Skip to content

Commit 8130669

Browse files
thibaudmichaudCommit Bot
authored andcommitted
[macro-assembler] Avoid using the isolate in CallRecordWriteStub
CallRecordWriteStub is used in a background compile thread for JS-to-Wasm wrapper compilation, so it should avoid accessing the isolate. Call the builtin using CallBuiltin which does not require a Handle<Code> object and instead gets the call target directly from the embedded data. R=​clemensb@chromium.org (cherry picked from commit 6b3994e) No-Try: true No-Presubmit: true No-Tree-Checks: true Bug: chromium:1146813 Change-Id: I4ee59084e4184f2e9039208e4e6db43482cefde6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2593333 Reviewed-by: Clemens Backes <clemensb@chromium.org> Commit-Queue: Thibaud Michaud <thibaudm@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#71785} Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2731535 Commit-Queue: Victor-Gabriel Savu <vsavu@google.com> Reviewed-by: Jana Grill <janagrill@chromium.org> Cr-Commit-Position: refs/branch-heads/8.6@{#66} Cr-Branched-From: a64aed2-refs/heads/8.6.395@{#1} Cr-Branched-From: a626bc0-refs/heads/master@{#69472}
1 parent e152f8a commit 8130669

8 files changed

Lines changed: 48 additions & 36 deletions

src/codegen/arm/macro-assembler-arm.cc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -722,23 +722,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
722722
void TurboAssembler::CallRecordWriteStub(
723723
Register object, Operand offset, RememberedSetAction remembered_set_action,
724724
SaveFPRegsMode fp_mode) {
725-
CallRecordWriteStub(
726-
object, offset, remembered_set_action, fp_mode,
727-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
728-
kNullAddress);
725+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
726+
Builtins::kRecordWrite, kNullAddress);
729727
}
730728

731729
void TurboAssembler::CallRecordWriteStub(
732730
Register object, Operand offset, RememberedSetAction remembered_set_action,
733731
SaveFPRegsMode fp_mode, Address wasm_target) {
734732
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
735-
Handle<Code>::null(), wasm_target);
733+
Builtins::kNoBuiltinId, wasm_target);
736734
}
737735

738736
void TurboAssembler::CallRecordWriteStub(
739737
Register object, Operand offset, RememberedSetAction remembered_set_action,
740-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
741-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
738+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
739+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
740+
wasm_target == kNullAddress);
742741
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
743742
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
744743
// large performance regression is observed, we should use these values to
@@ -762,9 +761,13 @@ void TurboAssembler::CallRecordWriteStub(
762761

763762
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
764763
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
765-
if (code_target.is_null()) {
764+
if (builtin_index == Builtins::kNoBuiltinId) {
766765
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
766+
} else if (options().inline_offheap_trampolines) {
767+
CallBuiltin(builtin_index);
767768
} else {
769+
Handle<Code> code_target =
770+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
768771
Call(code_target, RelocInfo::CODE_TARGET);
769772
}
770773

src/codegen/arm/macro-assembler-arm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
588588

589589
void CallRecordWriteStub(Register object, Operand offset,
590590
RememberedSetAction remembered_set_action,
591-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
591+
SaveFPRegsMode fp_mode, int builtin_index,
592592
Address wasm_target);
593593
};
594594

src/codegen/arm64/macro-assembler-arm64.cc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2749,23 +2749,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
27492749
void TurboAssembler::CallRecordWriteStub(
27502750
Register object, Operand offset, RememberedSetAction remembered_set_action,
27512751
SaveFPRegsMode fp_mode) {
2752-
CallRecordWriteStub(
2753-
object, offset, remembered_set_action, fp_mode,
2754-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
2755-
kNullAddress);
2752+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2753+
Builtins::kRecordWrite, kNullAddress);
27562754
}
27572755

27582756
void TurboAssembler::CallRecordWriteStub(
27592757
Register object, Operand offset, RememberedSetAction remembered_set_action,
27602758
SaveFPRegsMode fp_mode, Address wasm_target) {
27612759
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2762-
Handle<Code>::null(), wasm_target);
2760+
Builtins::kNoBuiltinId, wasm_target);
27632761
}
27642762

27652763
void TurboAssembler::CallRecordWriteStub(
27662764
Register object, Operand offset, RememberedSetAction remembered_set_action,
2767-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
2768-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
2765+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
2766+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
2767+
wasm_target == kNullAddress);
27692768
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
27702769
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
27712770
// large performance regression is observed, we should use these values to
@@ -2789,9 +2788,13 @@ void TurboAssembler::CallRecordWriteStub(
27892788

27902789
Mov(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
27912790
Mov(fp_mode_parameter, Smi::FromEnum(fp_mode));
2792-
if (code_target.is_null()) {
2791+
if (builtin_index == Builtins::kNoBuiltinId) {
27932792
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
2793+
} else if (options().inline_offheap_trampolines) {
2794+
CallBuiltin(builtin_index);
27942795
} else {
2796+
Handle<Code> code_target =
2797+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
27952798
Call(code_target, RelocInfo::CODE_TARGET);
27962799
}
27972800

src/codegen/arm64/macro-assembler-arm64.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1425,7 +1425,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
14251425

14261426
void CallRecordWriteStub(Register object, Operand offset,
14271427
RememberedSetAction remembered_set_action,
1428-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
1428+
SaveFPRegsMode fp_mode, int builtin_index,
14291429
Address wasm_target);
14301430
};
14311431

src/codegen/ia32/macro-assembler-ia32.cc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -415,25 +415,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
415415
void TurboAssembler::CallRecordWriteStub(
416416
Register object, Register address,
417417
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
418-
CallRecordWriteStub(
419-
object, address, remembered_set_action, fp_mode,
420-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
421-
kNullAddress);
418+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
419+
Builtins::kRecordWrite, kNullAddress);
422420
}
423421

424422
void TurboAssembler::CallRecordWriteStub(
425423
Register object, Register address,
426424
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
427425
Address wasm_target) {
428426
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
429-
Handle<Code>::null(), wasm_target);
427+
Builtins::kNoBuiltinId, wasm_target);
430428
}
431429

432430
void TurboAssembler::CallRecordWriteStub(
433431
Register object, Register address,
434432
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
435-
Handle<Code> code_target, Address wasm_target) {
436-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
433+
int builtin_index, Address wasm_target) {
434+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
435+
wasm_target == kNullAddress);
437436
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
438437
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
439438
// large performance regression is observed, we should use these values to
@@ -461,10 +460,14 @@ void TurboAssembler::CallRecordWriteStub(
461460

462461
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
463462
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
464-
if (code_target.is_null()) {
463+
if (builtin_index == Builtins::kNoBuiltinId) {
465464
// Use {wasm_call} for direct Wasm call within a module.
466465
wasm_call(wasm_target, RelocInfo::WASM_STUB_CALL);
466+
} else if (options().inline_offheap_trampolines) {
467+
CallBuiltin(builtin_index);
467468
} else {
469+
Handle<Code> code_target =
470+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
468471
Call(code_target, RelocInfo::CODE_TARGET);
469472
}
470473

src/codegen/ia32/macro-assembler-ia32.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
601601

602602
void CallRecordWriteStub(Register object, Register address,
603603
RememberedSetAction remembered_set_action,
604-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
604+
SaveFPRegsMode fp_mode, int builtin_index,
605605
Address wasm_target);
606606
};
607607

src/codegen/x64/macro-assembler-x64.cc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -385,25 +385,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
385385
void TurboAssembler::CallRecordWriteStub(
386386
Register object, Register address,
387387
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
388-
CallRecordWriteStub(
389-
object, address, remembered_set_action, fp_mode,
390-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
391-
kNullAddress);
388+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
389+
Builtins::kRecordWrite, kNullAddress);
392390
}
393391

394392
void TurboAssembler::CallRecordWriteStub(
395393
Register object, Register address,
396394
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
397395
Address wasm_target) {
398396
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
399-
Handle<Code>::null(), wasm_target);
397+
Builtins::kNoBuiltinId, wasm_target);
400398
}
401399

402400
void TurboAssembler::CallRecordWriteStub(
403401
Register object, Register address,
404402
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
405-
Handle<Code> code_target, Address wasm_target) {
406-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
403+
int builtin_index, Address wasm_target) {
404+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
405+
wasm_target == kNullAddress);
407406

408407
RecordWriteDescriptor descriptor;
409408
RegList registers = descriptor.allocatable_registers();
@@ -432,10 +431,14 @@ void TurboAssembler::CallRecordWriteStub(
432431
} else {
433432
movq(fp_mode_parameter, remembered_set_parameter);
434433
}
435-
if (code_target.is_null()) {
434+
if (builtin_index == Builtins::kNoBuiltinId) {
436435
// Use {near_call} for direct Wasm call within a module.
437436
near_call(wasm_target, RelocInfo::WASM_STUB_CALL);
437+
} else if (options().inline_offheap_trampolines) {
438+
CallBuiltin(builtin_index);
438439
} else {
440+
Handle<Code> code_target =
441+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
439442
Call(code_target, RelocInfo::CODE_TARGET);
440443
}
441444

src/codegen/x64/macro-assembler-x64.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
697697

698698
void CallRecordWriteStub(Register object, Register address,
699699
RememberedSetAction remembered_set_action,
700-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
700+
SaveFPRegsMode fp_mode, int builtin_index,
701701
Address wasm_target);
702702
};
703703

0 commit comments

Comments
 (0)