Commit graph

55 commits

Author SHA1 Message Date
Brian Carroll
a1f737d6d8 Wasm: Create OpaqueSection for sections that may be used in builtins but not by us 2022-01-10 10:26:43 +00:00
Brian Carroll
738434329e Wasm: refactor the model of the Linking section 2022-01-10 10:26:42 +00:00
Brian Carroll
6db7dbed1c Wasm: Store DataSection as bytes and segment count 2022-01-10 10:26:42 +00:00
Brian Carroll
b8f51fb1bb Wasm: add preloaded_bytes and preloaded_count to Code section 2022-01-10 10:26:42 +00:00
Brian Carroll
743e14148c Wasm: Store Function section as bytes and a count 2022-01-10 10:26:42 +00:00
Brian Carroll
7a6c6b675c Wasm: Store type signatures in serialized form 2022-01-10 10:26:42 +00:00
Brian Carroll
e10acd59ee Debug config for Wasm backend 2021-12-26 10:45:18 +00:00
Brian Carroll
1f86ad3438 Fix Wasm function indices for generated helpers 2021-12-26 10:40:45 +00:00
Brian Carroll
471e2c3143 Completely delete Wasm BlockType 2021-12-21 23:14:55 +00:00
Brian Carroll
1c20075d7b Change usage of Wasm if instruction now that we don't support block results anymore 2021-12-21 23:14:55 +00:00
Brian Carroll
2a141b3586 Automatically clean up any unused values at the end of a block 2021-12-21 13:16:15 +00:00
Brian Carroll
17dc6668ec Make all Wasm blocks NoResult and always put return value in a local var. 2021-12-21 13:16:15 +00:00
Brian Carroll
51119c8142 Emit less code for ensure_value_has_local 2021-12-21 13:16:15 +00:00
Brian Carroll
9594b05c96 Add some debug features to gen_wasm 2021-12-11 20:33:54 +00:00
Brian Carroll
3f7b3bef87 Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-tags 2021-12-09 09:28:11 +00:00
Brian Carroll
1dda8859c4 Update gen_wasm's error handling to remove Result and use macros consistently 2021-12-09 00:11:44 +00:00
Brian Carroll
a25101b378 Remove unusable variants from Align enum
I discovered today that Wasmer throws an error if you use
"higher than natural" alignment in a store instruction.
So let's take them out of the enum.
2021-12-08 21:55:14 +00:00
Brian Carroll
1ba654c5b2 Change round_up_to_alignment to a macro to work on more Rust types 2021-12-08 21:11:10 +00:00
Brian Carroll
a08633fd36 Debugging improvements 2021-11-30 10:58:03 +00:00
Brian Carroll
dcd4914ac1 Fix and enable tests involving empty records 2021-11-29 00:57:28 +00:00
Brian Carroll
27af5897d1 Handle zero-size structs 2021-11-28 21:04:40 +00:00
Brian Carroll
b8f40011b9 Generate a test "platform" with libc allocator functions 2021-11-16 11:59:46 +00:00
Brian Carroll
7ac1c7a72f Get long string literals working in gen_wasm 2021-11-15 15:22:07 +00:00
Brian Carroll
a5c3809290 Delete DataCountSection. Not well-supported and only needed for instructions we don't use
https://webassembly.github.io/spec/core/binary/modules.html#binary-datacountsec

Tools like wasm2wat and wasm-validate reject the module when this section is included!
Its purpose is to enable single-pass validation for two specific instructions that were
not in the original Wasm MVP: memory.init and data.drop.
We don't use them in our Roc backend. It seems to make sense just to drop the section.
2021-11-15 12:59:28 +00:00
Brian Carroll
d34f5050cb formatting 2021-11-14 13:35:25 +00:00
Brian Carroll
f121d6f599 Fix formatting 2021-11-14 13:21:56 +00:00
Brian Carroll
a2abf9c3d2 More accurate model of the Wasm VM's stack machine, with control flow blocks 2021-11-14 12:29:54 +00:00
Brian Carroll
39263b0ab1 Shorter name: VmSymbolState 2021-11-14 10:57:19 +00:00
Brian Carroll
daf6771bf5 Shorten the name of the Symbol for temporary Wasm values 2021-11-12 17:51:50 +00:00
Brian Carroll
4b3538dc58 Simplify CodeBuilder::call 2021-11-12 17:51:50 +00:00
Brian Carroll
7f633c107f Fix a bug in our model of the Wasm VM stack 2021-11-12 17:44:31 +00:00
Brian Carroll
830003c9a3 Change wasm opcodes to an enum 2021-11-10 20:18:55 +00:00
Brian Carroll
7c95189e4a Get lots of Num lowlevel ops working 2021-11-10 14:21:32 +00:00
Brian Carroll
4948cee360 Fix clippy warnings 2021-11-09 15:49:08 +00:00
Brian Carroll
d0ffaabe83 Re-index all internal functions to make room for imported external functions
Linked external functions must be declared in the Import section,
and they must come first in the function index space.
In other words, internal function numbers start at the number of imports.

However we don't know in advance how many builtins the code may call,
and we don't want to add more passes over the full IR. Instead we re-index
function references at the end of code generation.
2021-11-09 14:50:53 +00:00
Brian Carroll
9e6147a9de Add Debug implementations for sections 2021-11-09 14:28:15 +00:00
Brian Carroll
a61987e032 Rename CodeBuilder::finalize -> CodeBuilder::build_fn_header
We actually have a few more steps to go after this one!
2021-11-09 14:28:15 +00:00
Brian Carroll
5bfc0093ec Intitialise CodeSection with just the right capacity 2021-11-08 14:59:49 +00:00
Brian Carroll
34b57cf315 Refactor after creating constant linking data 2021-11-07 11:23:20 +00:00
Brian Carroll
38d9fc5bbd Add linker data for strings, and deduplicate them
For references to addresses of constant strings, we make an entry in
reloc.CODE and configure the relocation type to say it points at a
memory address. (At least I think this is right, I can't test it yet!)

The same info can also be used for de-duplication.

It turns out we don't need reloc.DATA. I had misunderstood it.
The use case for that would be constant nested data structures,
where constant data would contain pointers to other constant data.
I don't think we're doing this in Roc at all, but not sure.
2021-11-07 11:20:32 +00:00
Brian Carroll
5f998f3707 Minor refactor in CodeBuilder 2021-11-05 12:26:05 +00:00
Brian Carroll
e5a0738681 Rename CodeSection serializer, since it doesn't actually mutate 2021-11-05 12:25:27 +00:00
Brian Carroll
01b47a2ec7 Add inline directives to ensure unit placeholders are optimised away 2021-11-05 12:11:37 +00:00
Brian Carroll
d220ed7a23 Refactor module section serialization 2021-11-05 12:11:33 +00:00
Brian Carroll
4dcb65cc46 Fix data count section for the case where data section is empty 2021-11-05 08:36:18 +00:00
Brian Carroll
c5d99433f7 Fix build error
And slightly improve efficiency by exiting early from an iteration
2021-11-04 23:21:48 +00:00
Brian Carroll
09f2ce327c Change some comments after self-review 2021-11-04 21:19:23 +00:00
Brian Carroll
0d1946a782 Don't generate a DataSection unless we actually need it! 2021-11-04 20:50:32 +00:00
Brian Carroll
414c9e6f86 Move WasmModule initialisation into WasmBackend
It helps to coordinate different sections with related values,
based on knowledge of Roc rather than Wasm.
2021-11-04 20:41:23 +00:00
Brian Carroll
1b91fd9533 Get rid of some overcomplicated Data section stuff
Currently a Wasm module can only have one memory
The Data Segment spec allows for more in future
But the format is confusing enough already without that!
Let's just get rid of that complexity, we don't need it.
2021-11-04 19:44:10 +00:00