summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-stack.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-06-02 13:24:22 -0700
committerGitHub <noreply@github.com>2021-06-02 13:24:22 -0700
commitd8f2ddd4d680b059c2daded7f57051bf21d77297 (patch)
tree11a1f5d1e2621152bdfcef385201b950c379f0c5 /src/wasm/wasm-stack.cpp
parente40396003798678803f4091ac4132aefa3905d7a (diff)
downloadbinaryen-d8f2ddd4d680b059c2daded7f57051bf21d77297.tar.gz
binaryen-d8f2ddd4d680b059c2daded7f57051bf21d77297.tar.bz2
binaryen-d8f2ddd4d680b059c2daded7f57051bf21d77297.zip
[Wasm GC] Add negated BrOn* operations (#3913)
They are basically the flip versions. The only interesting part in the impl is that their returned typed and sent types are different. Spec: https://docs.google.com/document/d/1DklC3qVuOdLHSXB5UXghM_syCh-4cMinQ50ICiXnK3Q/edit
Diffstat (limited to 'src/wasm/wasm-stack.cpp')
-rw-r--r--src/wasm/wasm-stack.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index 12c999c0d..70a593bec 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -1954,18 +1954,33 @@ void BinaryInstWriter::visitBrOn(BrOn* curr) {
case BrOnNull:
o << int8_t(BinaryConsts::BrOnNull);
break;
+ case BrOnNonNull:
+ o << int8_t(BinaryConsts::BrOnNonNull);
+ break;
case BrOnCast:
o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnCast);
break;
+ case BrOnCastFail:
+ o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnCastFail);
+ break;
case BrOnFunc:
o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnFunc);
break;
+ case BrOnNonFunc:
+ o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonFunc);
+ break;
case BrOnData:
o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnData);
break;
+ case BrOnNonData:
+ o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonData);
+ break;
case BrOnI31:
o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnI31);
break;
+ case BrOnNonI31:
+ o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonI31);
+ break;
default:
WASM_UNREACHABLE("invalid br_on_*");
}