diff options
author | Max Graey <maxgraey@gmail.com> | 2021-10-07 22:43:30 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-07 12:43:30 -0700 |
commit | 2dff27c086e8f2a9913096ebf3dc93e97051d85a (patch) | |
tree | 3d689a659ad2339639fc4b2e73753b51e6d9295c /src/wasm-interpreter.h | |
parent | ff68bca64cd669aff59c7e1cc0a6677d267a410f (diff) | |
download | binaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.tar.gz binaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.tar.bz2 binaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.zip |
Add table.set operation (#4215)
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 6ea9f9c9e..2952869c6 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -1359,6 +1359,7 @@ public: return Literal(int32_t(left == right)); } Flow visitTableGet(TableGet* curr) { WASM_UNREACHABLE("unimp"); } + Flow visitTableSet(TableSet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitTry(Try* curr) { WASM_UNREACHABLE("unimp"); } Flow visitThrow(Throw* curr) { NOTE_ENTER("Throw"); @@ -2162,6 +2163,10 @@ public: NOTE_ENTER("TableGet"); return Flow(NONCONSTANT_FLOW); } + Flow visitTableSet(TableSet* curr) { + NOTE_ENTER("TableSet"); + return Flow(NONCONSTANT_FLOW); + } Flow visitLoad(Load* curr) { NOTE_ENTER("Load"); return Flow(NONCONSTANT_FLOW); @@ -2794,6 +2799,22 @@ private: index.getSingleValue().geti32()); } + Flow visitTableSet(TableSet* curr) { + NOTE_ENTER("TableSet"); + Flow index = this->visit(curr->index); + if (index.breaking()) { + return index; + } + Flow flow = this->visit(curr->value); + if (flow.breaking()) { + return flow; + } + auto info = instance.getTableInterfaceInfo(curr->table); + info.interface->tableStore( + info.name, index.getSingleValue().geti32(), flow.getSingleValue()); + return Flow(); + } + Flow visitLocalGet(LocalGet* curr) { NOTE_ENTER("LocalGet"); auto index = curr->index; |