| Index: src/compiler/wasm-compiler.cc
|
| diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc
|
| index b461e2fab7c90eca9823f5180241620a856b53fb..5e6a900ee093cb05236994d19c29bb556890f777 100644
|
| --- a/src/compiler/wasm-compiler.cc
|
| +++ b/src/compiler/wasm-compiler.cc
|
| @@ -474,40 +474,44 @@ Node* WasmGraphBuilder::Int64Constant(int64_t value) {
|
| void WasmGraphBuilder::StackCheck(wasm::WasmCodePosition position,
|
| Node** effect, Node** control) {
|
| if (FLAG_wasm_no_stack_checks) return;
|
| - if (effect == nullptr) {
|
| - effect = effect_;
|
| - }
|
| - if (control == nullptr) {
|
| - control = control_;
|
| - }
|
| // We do not generate stack checks for cctests.
|
| - if (module_ && !module_->instance->context.is_null()) {
|
| - Node* limit = graph()->NewNode(
|
| - jsgraph()->machine()->Load(MachineType::Pointer()),
|
| - jsgraph()->ExternalConstant(
|
| - ExternalReference::address_of_stack_limit(jsgraph()->isolate())),
|
| - jsgraph()->IntPtrConstant(0), *effect, *control);
|
| - Node* pointer = graph()->NewNode(jsgraph()->machine()->LoadStackPointer());
|
| -
|
| - Node* check =
|
| - graph()->NewNode(jsgraph()->machine()->UintLessThan(), limit, pointer);
|
| -
|
| - Diamond stack_check(graph(), jsgraph()->common(), check, BranchHint::kTrue);
|
| - stack_check.Chain(*control);
|
| - Node* effect_true = *effect;
|
| -
|
| - // Generate a call to the runtime if there is a stack check failure.
|
| - Node* call = BuildCallToRuntime(Runtime::kStackGuard, jsgraph(),
|
| - module_->instance->context, nullptr, 0,
|
| - effect, stack_check.if_false);
|
| - SetSourcePosition(call, position);
|
| -
|
| - Node* ephi = graph()->NewNode(jsgraph()->common()->EffectPhi(2),
|
| - effect_true, call, stack_check.merge);
|
| -
|
| - *control = stack_check.merge;
|
| - *effect = ephi;
|
| - }
|
| + if (!module_ || module_->instance->context.is_null()) return;
|
| + if (effect == nullptr) effect = effect_;
|
| + if (control == nullptr) control = control_;
|
| +
|
| + Node* limit = graph()->NewNode(
|
| + jsgraph()->machine()->Load(MachineType::Pointer()),
|
| + jsgraph()->ExternalConstant(
|
| + ExternalReference::address_of_stack_limit(jsgraph()->isolate())),
|
| + jsgraph()->IntPtrConstant(0), *effect, *control);
|
| + Node* pointer = graph()->NewNode(jsgraph()->machine()->LoadStackPointer());
|
| +
|
| + Node* check =
|
| + graph()->NewNode(jsgraph()->machine()->UintLessThan(), limit, pointer);
|
| +
|
| + Diamond stack_check(graph(), jsgraph()->common(), check, BranchHint::kTrue);
|
| + stack_check.Chain(*control);
|
| + Node* effect_true = *effect;
|
| +
|
| + Handle<Code> code = jsgraph()->isolate()->builtins()->WasmStackGuard();
|
| + CallInterfaceDescriptor idesc =
|
| + WasmStackGuardDescriptor(jsgraph()->isolate());
|
| + CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
| + jsgraph()->isolate(), jsgraph()->zone(), idesc, 0,
|
| + CallDescriptor::kNoFlags, Operator::kNoProperties);
|
| + Node* stub_code = jsgraph()->HeapConstant(code);
|
| +
|
| + Node* context = jsgraph()->SmiConstant(0);
|
| + Node* call = graph()->NewNode(jsgraph()->common()->Call(desc), stub_code,
|
| + context, *effect, stack_check.if_false);
|
| +
|
| + SetSourcePosition(call, position);
|
| +
|
| + Node* ephi = graph()->NewNode(jsgraph()->common()->EffectPhi(2), effect_true,
|
| + call, stack_check.merge);
|
| +
|
| + *control = stack_check.merge;
|
| + *effect = ephi;
|
| }
|
|
|
| Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right,
|
| @@ -3004,7 +3008,7 @@ void WasmGraphBuilder::BuildWasmInterpreterEntry(
|
| arg_buffer, // argument buffer
|
| };
|
| BuildCallToRuntime(Runtime::kWasmRunInterpreter, jsgraph(),
|
| - jsgraph()->isolate()->native_context(), parameters,
|
| + instance->compiled_module()->native_context(), parameters,
|
| arraysize(parameters), effect_, *control_);
|
|
|
| // Read back the return value.
|
|
|