diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-12-25 20:28:55 -0500 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-12-25 20:28:55 -0500 |
commit | 0f7bffb6b66698d21cb2f44a4a5b7bbaa3acd59c (patch) | |
tree | 211ca6684edb4000da587480565a8be3c4e0ea9e | |
parent | 7e1189e72938f23b463b7b531c1e91faea1f2c5e (diff) | |
download | binaryen-0f7bffb6b66698d21cb2f44a4a5b7bbaa3acd59c.tar.gz binaryen-0f7bffb6b66698d21cb2f44a4a5b7bbaa3acd59c.tar.bz2 binaryen-0f7bffb6b66698d21cb2f44a4a5b7bbaa3acd59c.zip |
start to implement lcomm
-rw-r--r-- | src/s2wasm.h | 25 | ||||
-rw-r--r-- | test/dot_s/alternate-lcomm.wast | 4 | ||||
-rw-r--r-- | test/dot_s/global.wast | 6 | ||||
-rw-r--r-- | test/dot_s/lcomm-in-text-segment.wast | 4 |
4 files changed, 24 insertions, 15 deletions
diff --git a/src/s2wasm.h b/src/s2wasm.h index 0370cdde3..dd4437ed9 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -867,8 +867,7 @@ private: } else if (match(".section")) { s = strchr(s, '\n'); } else if (match(".lcomm")) { - s = strchr(s, '\n'); - // TODO + parseLcomm(name); return; } skipWhitespace(); @@ -883,12 +882,8 @@ private: } align = pow(2, align); // convert from power to actual bytes if (match(".lcomm")) { - mustMatch(name.str); - skipComma(); - getInt(); - skipComma(); - getInt(); - return; // XXX wtf is this thing and what do we do with it + parseLcomm(name, align); + return; } mustMatch(name.str); mustMatch(":"); @@ -972,6 +967,20 @@ private: wasm.memory.initial = nextStatic; } + void parseLcomm(Name name, size_t align=1) { + mustMatch(name.str); + skipComma(); + size_t size = getInt(); + if (*s == ',') { + skipComma(); + getInt(); + } + while (nextStatic % align) nextStatic++; + staticAddresses[name] = nextStatic; + nextStatic += size; + wasm.memory.initial = nextStatic; + } + void skipImports() { while (1) { if (match(".import")) { diff --git a/test/dot_s/alternate-lcomm.wast b/test/dot_s/alternate-lcomm.wast index 955ce11ea..075b8d5fd 100644 --- a/test/dot_s/alternate-lcomm.wast +++ b/test/dot_s/alternate-lcomm.wast @@ -1,4 +1,4 @@ (module - (memory 0 4294967295) + (memory 5 4294967295) ) -;; METADATA: { "asmConsts": {},"staticBump": 0 } +;; METADATA: { "asmConsts": {},"staticBump": 4 } diff --git a/test/dot_s/global.wast b/test/dot_s/global.wast index f28edc35a..4d84e81da 100644 --- a/test/dot_s/global.wast +++ b/test/dot_s/global.wast @@ -1,5 +1,5 @@ (module - (memory 1136 4294967295 (segment 4 "9\05\00\00") (segment 12 "\01\00\00\00") (segment 16 "*\00\00\00") (segment 20 "\ff\ff\ff\ff") (segment 32 "\00\00\00\00\00\00\00\00") (segment 40 "\ff\ff\ff\ff\ff\ff\ff\ff") (segment 52 "\00\00\00\80") (segment 56 "\00\00\00@") (segment 72 "\00\00\00\00\00\00\00\00") (segment 80 "\00\00\00\00\00\00\00\00") (segment 608 "\b0\00\00\00")) + (memory 1184 4294967295 (segment 4 "9\05\00\00") (segment 20 "\01\00\00\00") (segment 24 "*\00\00\00") (segment 28 "\ff\ff\ff\ff") (segment 56 "\00\00\00\00\00\00\00\00") (segment 64 "\ff\ff\ff\ff\ff\ff\ff\ff") (segment 84 "\00\00\00\80") (segment 88 "\00\00\00@") (segment 120 "\00\00\00\00\00\00\00\00") (segment 128 "\00\00\00\00\00\00\00\00") (segment 656 "\e0\00\00\00")) (import $memcpy "env" "memcpy") (export "foo" $foo) (export "call_memcpy" $call_memcpy) @@ -7,7 +7,7 @@ (block $fake_return_waka123 (block (br $fake_return_waka123 - (i32.load align=4 offset=16 + (i32.load align=4 offset=24 (i32.const 0) ) ) @@ -29,4 +29,4 @@ ) ) ) -;; METADATA: { "asmConsts": {},"staticBump": 1135 } +;; METADATA: { "asmConsts": {},"staticBump": 1183 } diff --git a/test/dot_s/lcomm-in-text-segment.wast b/test/dot_s/lcomm-in-text-segment.wast index 955ce11ea..8bfef7516 100644 --- a/test/dot_s/lcomm-in-text-segment.wast +++ b/test/dot_s/lcomm-in-text-segment.wast @@ -1,4 +1,4 @@ (module - (memory 0 4294967295) + (memory 16 4294967295 (segment 12 "\05\00\00\00")) ) -;; METADATA: { "asmConsts": {},"staticBump": 0 } +;; METADATA: { "asmConsts": {},"staticBump": 15 } |