summaryrefslogtreecommitdiff
path: root/deps/v8/src/wasm/function-compiler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/wasm/function-compiler.cc')
-rw-r--r--deps/v8/src/wasm/function-compiler.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/deps/v8/src/wasm/function-compiler.cc b/deps/v8/src/wasm/function-compiler.cc
index e520a7d680..5aa2eabd4b 100644
--- a/deps/v8/src/wasm/function-compiler.cc
+++ b/deps/v8/src/wasm/function-compiler.cc
@@ -64,7 +64,7 @@ WasmCompilationResult WasmCompilationUnit::ExecuteImportWrapperCompilation(
bool source_positions = is_asmjs_module(env->module);
WasmCompilationResult result = compiler::CompileWasmImportCallWrapper(
env, kind, sig, source_positions,
- static_cast<int>(sig->parameter_count()));
+ static_cast<int>(sig->parameter_count()), wasm::kNoSuspend);
return result;
}
@@ -175,14 +175,21 @@ bool UseGenericWrapper(const FunctionSig* sig) {
if (sig->returns().size() > 1) {
return false;
}
- if (sig->returns().size() == 1 && sig->GetReturn(0).kind() != kI32 &&
- sig->GetReturn(0).kind() != kI64 && sig->GetReturn(0).kind() != kF32 &&
- sig->GetReturn(0).kind() != kF64) {
- return false;
+ if (sig->returns().size() == 1) {
+ ValueType ret = sig->GetReturn(0);
+ if (ret.kind() == kS128) return false;
+ if (ret.is_reference()) {
+ if (ret.heap_representation() != wasm::HeapType::kAny &&
+ ret.heap_representation() != wasm::HeapType::kFunc) {
+ return false;
+ }
+ }
}
for (ValueType type : sig->parameters()) {
if (type.kind() != kI32 && type.kind() != kI64 && type.kind() != kF32 &&
- type.kind() != kF64) {
+ type.kind() != kF64 &&
+ !(type.is_reference() &&
+ type.heap_representation() == wasm::HeapType::kAny)) {
return false;
}
}
@@ -220,7 +227,9 @@ void JSToWasmWrapperCompilationUnit::Execute() {
Handle<Code> JSToWasmWrapperCompilationUnit::Finalize() {
if (use_generic_wrapper_) {
- return isolate_->builtins()->code_handle(Builtin::kGenericJSToWasmWrapper);
+ return FromCodeT(
+ isolate_->builtins()->code_handle(Builtin::kGenericJSToWasmWrapper),
+ isolate_);
}
CompilationJob::Status status = job_->FinalizeJob(isolate_);