[wasm] Access "CEntryStub" from the root set.
This removes a shortcut to a "CEntryStub" from the instance object and instead loads those values via the root set which is also referenced from the instance. It makes instance objects smaller. R=clemensh@chromium.org Change-Id: I2e77cf2cb6949873bb461fb1ed0787e4a413aa5f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1714656 Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#62888}
This commit is contained in:
parent
8881fac82e
commit
55643564a6
@ -2517,7 +2517,10 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) {
|
||||
__ push(kWasmCompileLazyFuncIndexRegister);
|
||||
// Load the correct CEntry builtin from the instance object.
|
||||
__ ldr(r2, FieldMemOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kCEntryStubOffset));
|
||||
WasmInstanceObject::kIsolateRootOffset));
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
__ ldr(r2, MemOperand(r2, IsolateData::builtin_slot_offset(centry_id)));
|
||||
// Initialize the JavaScript context with 0. CEntry will use it to
|
||||
// set the current context on the isolate.
|
||||
__ Move(cp, Smi::zero());
|
||||
|
@ -3031,9 +3031,12 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) {
|
||||
// function.
|
||||
__ Push(kWasmInstanceRegister, kWasmCompileLazyFuncIndexRegister);
|
||||
// Load the correct CEntry builtin from the instance object.
|
||||
__ Ldr(x2, FieldMemOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kIsolateRootOffset));
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
__ LoadTaggedPointerField(
|
||||
x2, FieldMemOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kCEntryStubOffset));
|
||||
x2, MemOperand(x2, IsolateData::builtin_slot_offset(centry_id)));
|
||||
// Initialize the JavaScript context with 0. CEntry will use it to
|
||||
// set the current context on the isolate.
|
||||
__ Mov(cp, Smi::zero());
|
||||
|
@ -46,10 +46,16 @@ class WasmBuiltinsAssembler : public CodeStubAssembler {
|
||||
}
|
||||
|
||||
TNode<Code> LoadCEntryFromInstance(TNode<Object> instance) {
|
||||
return UncheckedCast<Code>(
|
||||
Load(MachineType::AnyTagged(), instance,
|
||||
IntPtrConstant(WasmInstanceObject::kCEntryStubOffset -
|
||||
TNode<IntPtrT> isolate_root = UncheckedCast<IntPtrT>(
|
||||
Load(MachineType::Pointer(), instance,
|
||||
IntPtrConstant(WasmInstanceObject::kIsolateRootOffset -
|
||||
kHeapObjectTag)));
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
TNode<Code> target = UncheckedCast<Code>(
|
||||
Load(MachineType::TaggedPointer(), isolate_root,
|
||||
IntPtrConstant(IsolateData::builtin_slot_offset(centry_id))));
|
||||
return target;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2676,7 +2676,10 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) {
|
||||
__ Push(kWasmCompileLazyFuncIndexRegister);
|
||||
// Load the correct CEntry builtin from the instance object.
|
||||
__ mov(ecx, FieldOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kCEntryStubOffset));
|
||||
WasmInstanceObject::kIsolateRootOffset));
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
__ mov(ecx, MemOperand(ecx, IsolateData::builtin_slot_offset(centry_id)));
|
||||
// Initialize the JavaScript context with 0. CEntry will use it to
|
||||
// set the current context on the isolate.
|
||||
__ Move(kContextRegister, Smi::zero());
|
||||
|
@ -2663,9 +2663,12 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) {
|
||||
// Push the function index as second argument.
|
||||
__ Push(r11);
|
||||
// Load the correct CEntry builtin from the instance object.
|
||||
__ movq(rcx, FieldOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kIsolateRootOffset));
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
__ LoadTaggedPointerField(
|
||||
rcx, FieldOperand(kWasmInstanceRegister,
|
||||
WasmInstanceObject::kCEntryStubOffset));
|
||||
rcx, MemOperand(rcx, IsolateData::builtin_slot_offset(centry_id)));
|
||||
// Initialize the JavaScript context with 0. CEntry will use it to
|
||||
// set the current context on the isolate.
|
||||
__ Move(kContextRegister, Smi::zero());
|
||||
|
@ -3326,11 +3326,14 @@ Node* WasmGraphBuilder::BuildCallToRuntimeWithContext(
|
||||
auto call_descriptor = Linkage::GetRuntimeCallDescriptor(
|
||||
mcgraph()->zone(), f, fun->nargs, Operator::kNoProperties,
|
||||
CallDescriptor::kNoFlags);
|
||||
Node* isolate_root = LOAD_INSTANCE_FIELD(IsolateRoot, MachineType::Pointer());
|
||||
// The CEntryStub is loaded from the instance_node so that generated code is
|
||||
// Isolate independent. At the moment this is only done for CEntryStub(1).
|
||||
DCHECK_EQ(1, fun->result_size);
|
||||
Node* centry_stub = LOAD_INSTANCE_FIELD(
|
||||
CEntryStub, MachineType::TypeCompressedTaggedPointer());
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
Node* centry_stub = LOAD_TAGGED_POINTER(
|
||||
isolate_root, IsolateData::builtin_slot_offset(centry_id));
|
||||
// TODO(titzer): allow arbitrary number of runtime arguments
|
||||
// At the moment we only allow 5 parameters. If more parameters are needed,
|
||||
// increase this constant accordingly.
|
||||
|
@ -1631,7 +1631,13 @@ class LiftoffCompiler {
|
||||
__ TurboAssembler::Move(kContextRegister,
|
||||
Smi::FromInt(Context::kNoContext));
|
||||
Register centry = kJavaScriptCallCodeStartRegister;
|
||||
LOAD_TAGGED_PTR_INSTANCE_FIELD(centry, CEntryStub);
|
||||
LOAD_INSTANCE_FIELD(centry, IsolateRoot, kSystemPointerSize);
|
||||
// All cache registers are spilled and there are no register arguments.
|
||||
LiftoffRegList pinned;
|
||||
auto centry_id =
|
||||
Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
|
||||
__ LoadTaggedPointer(centry, centry, no_reg,
|
||||
IsolateData::builtin_slot_offset(centry_id), pinned);
|
||||
__ CallRuntimeWithCEntry(runtime_function, centry);
|
||||
safepoint_table_builder_.DefineSafepoint(&asm_, Safepoint::kNoLazyDeopt);
|
||||
}
|
||||
|
@ -261,7 +261,6 @@ OPTIONAL_ACCESSORS(WasmInstanceObject, managed_native_allocations, Foreign,
|
||||
kManagedNativeAllocationsOffset)
|
||||
OPTIONAL_ACCESSORS(WasmInstanceObject, exceptions_table, FixedArray,
|
||||
kExceptionsTableOffset)
|
||||
ACCESSORS(WasmInstanceObject, centry_stub, Code, kCEntryStubOffset)
|
||||
OPTIONAL_ACCESSORS(WasmInstanceObject, wasm_exported_functions, FixedArray,
|
||||
kWasmExportedFunctionsOffset)
|
||||
|
||||
|
@ -1726,9 +1726,6 @@ Handle<WasmInstanceObject> WasmInstanceObject::New(
|
||||
isolate->factory()->NewFixedArray(num_imported_functions);
|
||||
instance->set_imported_function_refs(*imported_function_refs);
|
||||
|
||||
Handle<Code> centry_stub = CodeFactory::CEntry(isolate);
|
||||
instance->set_centry_stub(*centry_stub);
|
||||
|
||||
instance->SetRawMemory(nullptr, 0);
|
||||
instance->set_isolate_root(isolate->isolate_root());
|
||||
instance->set_stack_limit_address(
|
||||
|
@ -444,7 +444,6 @@ class WasmInstanceObject : public JSObject {
|
||||
DECL_OPTIONAL_ACCESSORS(indirect_function_table_refs, FixedArray)
|
||||
DECL_OPTIONAL_ACCESSORS(managed_native_allocations, Foreign)
|
||||
DECL_OPTIONAL_ACCESSORS(exceptions_table, FixedArray)
|
||||
DECL_ACCESSORS(centry_stub, Code)
|
||||
DECL_OPTIONAL_ACCESSORS(wasm_exported_functions, FixedArray)
|
||||
DECL_PRIMITIVE_ACCESSORS(memory_start, byte*)
|
||||
DECL_PRIMITIVE_ACCESSORS(memory_size, size_t)
|
||||
@ -504,7 +503,6 @@ class WasmInstanceObject : public JSObject {
|
||||
V(kIndirectFunctionTablesOffset, kTaggedSize) \
|
||||
V(kManagedNativeAllocationsOffset, kTaggedSize) \
|
||||
V(kExceptionsTableOffset, kTaggedSize) \
|
||||
V(kCEntryStubOffset, kTaggedSize) \
|
||||
V(kWasmExportedFunctionsOffset, kTaggedSize) \
|
||||
V(kRealStackLimitAddressOffset, kSystemPointerSize) \
|
||||
V(kDataSegmentStartsOffset, kSystemPointerSize) \
|
||||
@ -544,7 +542,6 @@ class WasmInstanceObject : public JSObject {
|
||||
kIndirectFunctionTablesOffset,
|
||||
kManagedNativeAllocationsOffset,
|
||||
kExceptionsTableOffset,
|
||||
kCEntryStubOffset,
|
||||
kWasmExportedFunctionsOffset};
|
||||
|
||||
V8_EXPORT_PRIVATE const wasm::WasmModule* module();
|
||||
|
Loading…
Reference in New Issue
Block a user