summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-stack.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2023-05-23 10:38:00 -0700
committerGitHub <noreply@github.com>2023-05-23 10:38:00 -0700
commite8ac658a5db2fadc93c3d317d465eed253e191ed (patch)
tree29a02aa1bea161be7c25713a5ae435f708b42b87 /src/wasm/wasm-stack.cpp
parent5beebc6b249c6393e0dbf69f0ec2374eca5d387b (diff)
downloadbinaryen-e8ac658a5db2fadc93c3d317d465eed253e191ed.tar.gz
binaryen-e8ac658a5db2fadc93c3d317d465eed253e191ed.tar.bz2
binaryen-e8ac658a5db2fadc93c3d317d465eed253e191ed.zip
Revert "Update br_on_cast binary and text format (#5734)" (#5740)
This reverts commit b7b1d0df29df14634d2c680d1d2c351b624b4fbb. See comment at the end of #5734: It turns out that dropping the old opcodes causes problems for current users, so let's revert this for now, and later we can figure out how best to do the update.
Diffstat (limited to 'src/wasm/wasm-stack.cpp')
-rw-r--r--src/wasm/wasm-stack.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index ee457da69..7a4dd3983 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -2045,22 +2045,25 @@ void BinaryInstWriter::visitBrOn(BrOn* curr) {
o << U32LEB(getBreakIndex(curr->name));
return;
case BrOnCast:
- case BrOnCastFail: {
o << int8_t(BinaryConsts::GCPrefix);
- if (curr->op == BrOnCast) {
+ if (curr->castType.isNullable()) {
+ o << U32LEB(BinaryConsts::BrOnCastNull);
+ } else {
o << U32LEB(BinaryConsts::BrOnCast);
+ }
+ o << U32LEB(getBreakIndex(curr->name));
+ parent.writeHeapType(curr->castType.getHeapType());
+ return;
+ case BrOnCastFail:
+ o << int8_t(BinaryConsts::GCPrefix);
+ if (curr->castType.isNullable()) {
+ o << U32LEB(BinaryConsts::BrOnCastFailNull);
} else {
o << U32LEB(BinaryConsts::BrOnCastFail);
}
- assert(curr->ref->type.isRef());
- uint8_t flags = (curr->ref->type.isNullable() ? 1 : 0) |
- (curr->castType.isNullable() ? 2 : 0);
- o << flags;
o << U32LEB(getBreakIndex(curr->name));
- parent.writeHeapType(curr->ref->type.getHeapType());
parent.writeHeapType(curr->castType.getHeapType());
return;
- }
}
WASM_UNREACHABLE("invalid br_on_*");
}