Skip to content

Commit 6b3994e

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. [email protected] Bug: chromium:1146813 Change-Id: I4ee59084e4184f2e9039208e4e6db43482cefde6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2593333 Reviewed-by: Clemens Backes <[email protected]> Commit-Queue: Thibaud Michaud <[email protected]> Cr-Commit-Position: refs/heads/master@{#71785}
1 parent 43d6119 commit 6b3994e

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
@@ -716,23 +716,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
716716
void TurboAssembler::CallRecordWriteStub(
717717
Register object, Operand offset, RememberedSetAction remembered_set_action,
718718
SaveFPRegsMode fp_mode) {
719-
CallRecordWriteStub(
720-
object, offset, remembered_set_action, fp_mode,
721-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
722-
kNullAddress);
719+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
720+
Builtins::kRecordWrite, kNullAddress);
723721
}
724722

725723
void TurboAssembler::CallRecordWriteStub(
726724
Register object, Operand offset, RememberedSetAction remembered_set_action,
727725
SaveFPRegsMode fp_mode, Address wasm_target) {
728726
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
729-
Handle<Code>::null(), wasm_target);
727+
Builtins::kNoBuiltinId, wasm_target);
730728
}
731729

732730
void TurboAssembler::CallRecordWriteStub(
733731
Register object, Operand offset, RememberedSetAction remembered_set_action,
734-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
735-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
732+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
733+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
734+
wasm_target == kNullAddress);
736735
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
737736
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
738737
// large performance regression is observed, we should use these values to
@@ -756,9 +755,13 @@ void TurboAssembler::CallRecordWriteStub(
756755

757756
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
758757
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
759-
if (code_target.is_null()) {
758+
if (builtin_index == Builtins::kNoBuiltinId) {
760759
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
760+
} else if (options().inline_offheap_trampolines) {
761+
CallBuiltin(builtin_index);
761762
} else {
763+
Handle<Code> code_target =
764+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
762765
Call(code_target, RelocInfo::CODE_TARGET);
763766
}
764767

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

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

605605
void CallRecordWriteStub(Register object, Operand offset,
606606
RememberedSetAction remembered_set_action,
607-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
607+
SaveFPRegsMode fp_mode, int builtin_index,
608608
Address wasm_target);
609609
};
610610

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2882,23 +2882,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
28822882
void TurboAssembler::CallRecordWriteStub(
28832883
Register object, Operand offset, RememberedSetAction remembered_set_action,
28842884
SaveFPRegsMode fp_mode) {
2885-
CallRecordWriteStub(
2886-
object, offset, remembered_set_action, fp_mode,
2887-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
2888-
kNullAddress);
2885+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2886+
Builtins::kRecordWrite, kNullAddress);
28892887
}
28902888

28912889
void TurboAssembler::CallRecordWriteStub(
28922890
Register object, Operand offset, RememberedSetAction remembered_set_action,
28932891
SaveFPRegsMode fp_mode, Address wasm_target) {
28942892
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2895-
Handle<Code>::null(), wasm_target);
2893+
Builtins::kNoBuiltinId, wasm_target);
28962894
}
28972895

28982896
void TurboAssembler::CallRecordWriteStub(
28992897
Register object, Operand offset, RememberedSetAction remembered_set_action,
2900-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
2901-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
2898+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
2899+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
2900+
wasm_target == kNullAddress);
29022901
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
29032902
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
29042903
// large performance regression is observed, we should use these values to
@@ -2922,9 +2921,13 @@ void TurboAssembler::CallRecordWriteStub(
29222921

29232922
Mov(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
29242923
Mov(fp_mode_parameter, Smi::FromEnum(fp_mode));
2925-
if (code_target.is_null()) {
2924+
if (builtin_index == Builtins::kNoBuiltinId) {
29262925
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
2926+
} else if (options().inline_offheap_trampolines) {
2927+
CallBuiltin(builtin_index);
29272928
} else {
2929+
Handle<Code> code_target =
2930+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
29282931
Call(code_target, RelocInfo::CODE_TARGET);
29292932
}
29302933

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

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

14411441
void CallRecordWriteStub(Register object, Operand offset,
14421442
RememberedSetAction remembered_set_action,
1443-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
1443+
SaveFPRegsMode fp_mode, int builtin_index,
14441444
Address wasm_target);
14451445
};
14461446

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -443,25 +443,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
443443
void TurboAssembler::CallRecordWriteStub(
444444
Register object, Register address,
445445
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
446-
CallRecordWriteStub(
447-
object, address, remembered_set_action, fp_mode,
448-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
449-
kNullAddress);
446+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
447+
Builtins::kRecordWrite, kNullAddress);
450448
}
451449

452450
void TurboAssembler::CallRecordWriteStub(
453451
Register object, Register address,
454452
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
455453
Address wasm_target) {
456454
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
457-
Handle<Code>::null(), wasm_target);
455+
Builtins::kNoBuiltinId, wasm_target);
458456
}
459457

460458
void TurboAssembler::CallRecordWriteStub(
461459
Register object, Register address,
462460
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
463-
Handle<Code> code_target, Address wasm_target) {
464-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
461+
int builtin_index, Address wasm_target) {
462+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
463+
wasm_target == kNullAddress);
465464
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
466465
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
467466
// large performance regression is observed, we should use these values to
@@ -489,10 +488,14 @@ void TurboAssembler::CallRecordWriteStub(
489488

490489
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
491490
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
492-
if (code_target.is_null()) {
491+
if (builtin_index == Builtins::kNoBuiltinId) {
493492
// Use {wasm_call} for direct Wasm call within a module.
494493
wasm_call(wasm_target, RelocInfo::WASM_STUB_CALL);
494+
} else if (options().inline_offheap_trampolines) {
495+
CallBuiltin(builtin_index);
495496
} else {
497+
Handle<Code> code_target =
498+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
496499
Call(code_target, RelocInfo::CODE_TARGET);
497500
}
498501

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

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

666666
void CallRecordWriteStub(Register object, Register address,
667667
RememberedSetAction remembered_set_action,
668-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
668+
SaveFPRegsMode fp_mode, int builtin_index,
669669
Address wasm_target);
670670
};
671671

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -389,25 +389,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
389389
void TurboAssembler::CallRecordWriteStub(
390390
Register object, Register address,
391391
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
392-
CallRecordWriteStub(
393-
object, address, remembered_set_action, fp_mode,
394-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
395-
kNullAddress);
392+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
393+
Builtins::kRecordWrite, kNullAddress);
396394
}
397395

398396
void TurboAssembler::CallRecordWriteStub(
399397
Register object, Register address,
400398
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
401399
Address wasm_target) {
402400
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
403-
Handle<Code>::null(), wasm_target);
401+
Builtins::kNoBuiltinId, wasm_target);
404402
}
405403

406404
void TurboAssembler::CallRecordWriteStub(
407405
Register object, Register address,
408406
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
409-
Handle<Code> code_target, Address wasm_target) {
410-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
407+
int builtin_index, Address wasm_target) {
408+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
409+
wasm_target == kNullAddress);
411410

412411
RecordWriteDescriptor descriptor;
413412
RegList registers = descriptor.allocatable_registers();
@@ -436,10 +435,14 @@ void TurboAssembler::CallRecordWriteStub(
436435
} else {
437436
movq(fp_mode_parameter, remembered_set_parameter);
438437
}
439-
if (code_target.is_null()) {
438+
if (builtin_index == Builtins::kNoBuiltinId) {
440439
// Use {near_call} for direct Wasm call within a module.
441440
near_call(wasm_target, RelocInfo::WASM_STUB_CALL);
441+
} else if (options().inline_offheap_trampolines) {
442+
CallBuiltin(builtin_index);
442443
} else {
444+
Handle<Code> code_target =
445+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
443446
Call(code_target, RelocInfo::CODE_TARGET);
444447
}
445448

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

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

731731
void CallRecordWriteStub(Register object, Register address,
732732
RememberedSetAction remembered_set_action,
733-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
733+
SaveFPRegsMode fp_mode, int builtin_index,
734734
Address wasm_target);
735735
};
736736

0 commit comments

Comments
 (0)