diff options
author | Ng Zhi An <ngzhian@gmail.com> | 2020-07-17 11:32:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-17 11:32:04 -0700 |
commit | e2a1f74acbf69e155914e86ccd3dc6a7a483fe3c (patch) | |
tree | c5328827b73bb3a0d018af1151de8ab36c9a593f /src | |
parent | 1c75f7de7e5f93373da34182a8729ace838ef7bd (diff) | |
download | binaryen-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.cpp | 12 |
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: |