From fdbba5eb702a945c0a72ae5c4ab00c5579730f4a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 21 Jul 2016 16:07:30 -0700 Subject: support wasm globals (#650) --- src/ast_utils.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/ast_utils.h') 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 PostWalkerindex); } + 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_); -- cgit v1.2.3