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.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index d75973ab0..b7daeda5a 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -2302,6 +2302,9 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
if (maybeVisitAtomicNotify(curr, code)) {
break;
}
+ if (maybeVisitAtomicFence(curr, code)) {
+ break;
+ }
throwError("invalid code after atomic prefix: " + std::to_string(code));
break;
}
@@ -3172,6 +3175,20 @@ bool WasmBinaryBuilder::maybeVisitAtomicNotify(Expression*& out, uint8_t code) {
return true;
}
+bool WasmBinaryBuilder::maybeVisitAtomicFence(Expression*& out, uint8_t code) {
+ if (code != BinaryConsts::AtomicFence) {
+ return false;
+ }
+ auto* curr = allocator.alloc<AtomicFence>();
+ if (debug) {
+ std::cerr << "zz node: AtomicFence" << std::endl;
+ }
+ curr->order = getU32LEB();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
bool WasmBinaryBuilder::maybeVisitConst(Expression*& out, uint8_t code) {
Const* curr;
if (debug) {