summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-21 14:53:57 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-12-21 14:53:57 -0800
commitf0dbc606f7217e1151edd14c9ecfa80290b3009b (patch)
tree48bd2caf87a9e445ff675f9429d7c82998f15b2e /src
parent97f639e459643de5e6659080335174cb795dff4d (diff)
downloadbinaryen-f0dbc606f7217e1151edd14c9ecfa80290b3009b.tar.gz
binaryen-f0dbc606f7217e1151edd14c9ecfa80290b3009b.tar.bz2
binaryen-f0dbc606f7217e1151edd14c9ecfa80290b3009b.zip
support load/store offsets in wasm2asm
Diffstat (limited to 'src')
-rw-r--r--src/wasm2asm.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h
index 6edc8fd82..dc7f5c93e 100644
--- a/src/wasm2asm.h
+++ b/src/wasm2asm.h
@@ -755,6 +755,9 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) {
// normal load
assert(curr->bytes == curr->align); // TODO: unaligned
Ref ptr = visit(curr->ptr, EXPRESSION_RESULT);
+ if (curr->offset) {
+ ptr = makeAsmCoercion(ValueBuilder::makeBinary(ptr, PLUS, ValueBuilder::makeNum(curr->offset)), ASM_INT);
+ }
Ref ret;
switch (curr->type) {
case i32: {
@@ -791,6 +794,9 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) {
// normal store
assert(curr->bytes == curr->align); // TODO: unaligned
Ref ptr = visit(curr->ptr, EXPRESSION_RESULT);
+ if (curr->offset) {
+ ptr = makeAsmCoercion(ValueBuilder::makeBinary(ptr, PLUS, ValueBuilder::makeNum(curr->offset)), ASM_INT);
+ }
Ref value = visit(curr->value, EXPRESSION_RESULT);
Ref ret;
switch (curr->type) {