diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-07-21 16:07:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-21 16:07:30 -0700 |
commit | fdbba5eb702a945c0a72ae5c4ab00c5579730f4a (patch) | |
tree | 5d402051ae1781328fb8fe0725cf9c4286c0ff5c /src/ast_utils.h | |
parent | 12abb63203788cba23f5c65a971a2af922e05bfc (diff) | |
download | binaryen-fdbba5eb702a945c0a72ae5c4ab00c5579730f4a.tar.gz binaryen-fdbba5eb702a945c0a72ae5c4ab00c5579730f4a.tar.bz2 binaryen-fdbba5eb702a945c0a72ae5c4ab00c5579730f4a.zip |
support wasm globals (#650)
Diffstat (limited to 'src/ast_utils.h')
-rw-r--r-- | src/ast_utils.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ast_utils.h b/src/ast_utils.h index 77bfaf1f3..3e45d0e33 100644 --- a/src/ast_utils.h +++ b/src/ast_utils.h @@ -160,6 +160,8 @@ struct EffectAnalyzer : public PostWalker<EffectAnalyzer, Visitor<EffectAnalyzer void visitSetLocal(SetLocal *curr) { localsWritten.insert(curr->index); } + void visitGetGlobal(GetGlobal *curr) { readsMemory = true; } // TODO: global-specific + void visitSetGlobal(SetGlobal *curr) { writesMemory = true; } // stuff? void visitLoad(Load *curr) { readsMemory = true; } void visitStore(Store *curr) { writesMemory = true; } void visitReturn(Return *curr) { branches = true; } @@ -277,6 +279,12 @@ struct ExpressionManipulator { Expression* visitSetLocal(SetLocal *curr) { return builder.makeSetLocal(curr->index, copy(curr->value)); } + Expression* visitGetGlobal(GetGlobal *curr) { + return builder.makeGetGlobal(curr->index, curr->type); + } + Expression* visitSetGlobal(SetGlobal *curr) { + return builder.makeSetGlobal(curr->index, copy(curr->value)); + } Expression* visitLoad(Load *curr) { return builder.makeLoad(curr->bytes, curr->signed_, curr->offset, curr->align, copy(curr->ptr), curr->type); } @@ -476,6 +484,15 @@ struct ExpressionAnalyzer { PUSH(SetLocal, value); break; } + case Expression::Id::GetGlobalId: { + CHECK(GetGlobal, index); + break; + } + case Expression::Id::SetGlobalId: { + CHECK(SetGlobal, index); + PUSH(SetGlobal, value); + break; + } case Expression::Id::LoadId: { CHECK(Load, bytes); CHECK(Load, signed_); @@ -678,6 +695,15 @@ struct ExpressionAnalyzer { PUSH(SetLocal, value); break; } + case Expression::Id::GetGlobalId: { + HASH(GetGlobal, index); + break; + } + case Expression::Id::SetGlobalId: { + HASH(SetGlobal, index); + PUSH(SetGlobal, value); + break; + } case Expression::Id::LoadId: { HASH(Load, bytes); HASH(Load, signed_); |