summaryrefslogtreecommitdiff
path: root/src/passes/InstrumentLocals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/InstrumentLocals.cpp')
-rw-r--r--src/passes/InstrumentLocals.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp
index ee288c103..b1ce5f05e 100644
--- a/src/passes/InstrumentLocals.cpp
+++ b/src/passes/InstrumentLocals.cpp
@@ -59,6 +59,7 @@ Name get_f64("get_f64");
Name get_funcref("get_funcref");
Name get_externref("get_externref");
Name get_exnref("get_exnref");
+Name get_anyref("get_anyref");
Name get_v128("get_v128");
Name set_i32("set_i32");
@@ -68,6 +69,7 @@ Name set_f64("set_f64");
Name set_funcref("set_funcref");
Name set_externref("set_externref");
Name set_exnref("set_exnref");
+Name set_anyref("set_anyref");
Name set_v128("set_v128");
struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
@@ -99,6 +101,9 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
case Type::exnref:
import = get_exnref;
break;
+ case Type::anyref:
+ import = get_anyref;
+ break;
case Type::none:
case Type::unreachable:
WASM_UNREACHABLE("unexpected type");
@@ -145,6 +150,9 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
case Type::exnref:
import = set_exnref;
break;
+ case Type::anyref:
+ import = set_anyref;
+ break;
case Type::unreachable:
return; // nothing to do here
case Type::none:
@@ -184,12 +192,18 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
set_externref,
{Type::i32, Type::i32, Type::externref},
Type::externref);
- }
- if (curr->features.hasExceptionHandling()) {
- addImport(
- curr, get_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref);
- addImport(
- curr, set_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref);
+ if (curr->features.hasExceptionHandling()) {
+ addImport(
+ curr, get_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref);
+ addImport(
+ curr, set_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref);
+ }
+ if (curr->features.hasAnyref()) {
+ addImport(
+ curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
+ addImport(
+ curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
+ }
}
if (curr->features.hasSIMD()) {
addImport(curr, get_v128, {Type::i32, Type::i32, Type::v128}, Type::v128);