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.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp
index f9c26d788..8803a7811 100644
--- a/src/passes/InstrumentLocals.cpp
+++ b/src/passes/InstrumentLocals.cpp
@@ -60,6 +60,8 @@ Name get_funcref("get_funcref");
Name get_externref("get_externref");
Name get_exnref("get_exnref");
Name get_anyref("get_anyref");
+Name get_eqref("get_eqref");
+Name get_i31ref("get_i31ref");
Name get_v128("get_v128");
Name set_i32("set_i32");
@@ -70,6 +72,8 @@ Name set_funcref("set_funcref");
Name set_externref("set_externref");
Name set_exnref("set_exnref");
Name set_anyref("set_anyref");
+Name set_eqref("set_eqref");
+Name set_i31ref("set_i31ref");
Name set_v128("set_v128");
struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
@@ -104,6 +108,12 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
case Type::anyref:
import = get_anyref;
break;
+ case Type::eqref:
+ import = get_eqref;
+ break;
+ case Type::i31ref:
+ import = get_i31ref;
+ break;
case Type::none:
case Type::unreachable:
WASM_UNREACHABLE("unexpected type");
@@ -153,6 +163,12 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
case Type::anyref:
import = set_anyref;
break;
+ case Type::eqref:
+ import = set_eqref;
+ break;
+ case Type::i31ref:
+ import = set_i31ref;
+ break;
case Type::unreachable:
return; // nothing to do here
case Type::none:
@@ -203,6 +219,14 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
addImport(
curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
+ addImport(
+ curr, get_eqref, {Type::i32, Type::i32, Type::eqref}, Type::eqref);
+ addImport(
+ curr, set_eqref, {Type::i32, Type::i32, Type::eqref}, Type::eqref);
+ addImport(
+ curr, get_i31ref, {Type::i32, Type::i32, Type::i31ref}, Type::i31ref);
+ addImport(
+ curr, set_i31ref, {Type::i32, Type::i32, Type::i31ref}, Type::i31ref);
}
}
if (curr->features.hasSIMD()) {