summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index f1c6eeb7c..d15ac493f 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -679,6 +679,8 @@ void WasmBinaryWriter::writeFeaturesSection() {
return BinaryConsts::UserSections::SignExtFeature;
case FeatureSet::ExceptionHandling:
return BinaryConsts::UserSections::ExceptionHandlingFeature;
+ case FeatureSet::TailCall:
+ return BinaryConsts::UserSections::TailCallFeature;
default:
WASM_UNREACHABLE();
}
@@ -2162,6 +2164,8 @@ void WasmBinaryBuilder::readFeatures(size_t payloadLen) {
wasm.features.setSignExt();
} else if (name == BinaryConsts::UserSections::SIMD128Feature) {
wasm.features.setSIMD();
+ } else if (name == BinaryConsts::UserSections::TailCallFeature) {
+ wasm.features.setTailCall();
}
}
}
@@ -2210,6 +2214,20 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
visitCallIndirect(
(curr = allocator.alloc<CallIndirect>())->cast<CallIndirect>());
break;
+ case BinaryConsts::RetCallFunction: {
+ auto call = allocator.alloc<Call>();
+ call->isReturn = true;
+ curr = call;
+ visitCall(call);
+ break;
+ }
+ case BinaryConsts::RetCallIndirect: {
+ auto call = allocator.alloc<CallIndirect>();
+ call->isReturn = true;
+ curr = call;
+ visitCallIndirect(call);
+ break;
+ }
case BinaryConsts::LocalGet:
visitLocalGet((curr = allocator.alloc<LocalGet>())->cast<LocalGet>());
break;