summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNg Zhi An <ngzhian@gmail.com>2020-07-17 11:32:04 -0700
committerGitHub <noreply@github.com>2020-07-17 11:32:04 -0700
commite2a1f74acbf69e155914e86ccd3dc6a7a483fe3c (patch)
treec5328827b73bb3a0d018af1151de8ab36c9a593f /src
parent1c75f7de7e5f93373da34182a8729ace838ef7bd (diff)
downloadbinaryen-e2a1f74acbf69e155914e86ccd3dc6a7a483fe3c.tar.gz
binaryen-e2a1f74acbf69e155914e86ccd3dc6a7a483fe3c.tar.bz2
binaryen-e2a1f74acbf69e155914e86ccd3dc6a7a483fe3c.zip
Add v128 support to instrument locals (#2960)
In instrument-locals_all-features.wast I added the tests to the end of the file so that the diff of expected output is smaller and easier to read. Otherwise the constants will have to all change since they are order dependent.
Diffstat (limited to 'src')
-rw-r--r--src/passes/InstrumentLocals.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp
index aa3df95ad..2c74e5794 100644
--- a/src/passes/InstrumentLocals.cpp
+++ b/src/passes/InstrumentLocals.cpp
@@ -60,6 +60,7 @@ Name get_funcref("get_funcref");
Name get_externref("get_externref");
Name get_nullref("get_nullref");
Name get_exnref("get_exnref");
+Name get_v128("get_v128");
Name set_i32("set_i32");
Name set_i64("set_i64");
@@ -69,6 +70,7 @@ Name set_funcref("set_funcref");
Name set_externref("set_externref");
Name set_nullref("set_nullref");
Name set_exnref("set_exnref");
+Name set_v128("set_v128");
struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
void visitLocalGet(LocalGet* curr) {
@@ -87,7 +89,8 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
import = get_f64;
break;
case Type::v128:
- assert(false && "v128 not implemented yet");
+ import = get_v128;
+ break;
case Type::funcref:
import = get_funcref;
break;
@@ -135,7 +138,8 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
import = set_f64;
break;
case Type::v128:
- assert(false && "v128 not implemented yet");
+ import = set_v128;
+ break;
case Type::funcref:
import = set_funcref;
break;
@@ -203,6 +207,10 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
addImport(
curr, set_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref);
}
+ if (curr->features.hasSIMD()) {
+ addImport(curr, get_v128, {Type::i32, Type::i32, Type::v128}, Type::v128);
+ addImport(curr, set_v128, {Type::i32, Type::i32, Type::v128}, Type::v128);
+ }
}
private: