Commit graph

87 commits

Author SHA1 Message Date
Brian Carroll
6aed70978d Refactor SymbolStorage into two enums instead of one 2021-10-02 16:15:06 +01:00
Brian Carroll
ffa6ff0a62 gen_wasm: Get rid of individual locals for values in stack memory
All values in stack memory can share the stack frame pointer,
with different offsets.

This avoids having to generate initialisation code for individual
pointers we used to have. It should also make things more efficient
when the runtime compiles Wasm to machine code. It can just assign
the stack frame pointer to a single CPU register and leave it there.

The original idea was to make params and local variables work the same.
(A struct param will be passed as a pointer to caller stack memory.)
But now I don't think that's worth it. Some match expressions get more
awkward this way but we might be able to refactor that to be nicer.
2021-10-02 15:12:25 +01:00
Brian Carroll
4aa2452e01 gen_wasm: Change some compiler bugs error handling from Result to panic
Result makes sense where I have something meaningful to say to the user like
"X is not implemented yet". And also for public functions that may interface
with other parts of the project like Backend.

But for private functions internal to gen_wasm, it's just unhelpful to get a stack trace
to where the Result is unwrapped! I want a stack trace to the root cause.
I always end up temporarily rewriting Err("oops") to panic!("oops") and then waiting
for it to recompile.

This feels like a more balanced approach, using each technique where it makes sense.
2021-10-02 13:40:44 +01:00
Brian Carroll
304e9c904f Formatting 2021-09-30 17:28:02 +01:00
Brian Carroll
92085a0fcb README notes on reducing gets and sets 2021-09-30 17:27:56 +01:00
Brian Carroll
7ac7e16f60 Ensure stack frame is always popped when procedure returns from inside a branch 2021-09-30 17:04:16 +01:00
Brian Carroll
79ac2f04b8 Improve stack allocation code 2021-09-30 17:04:16 +01:00
Brian Carroll
f1b14c14e3 Refactor SymbolStorage to emphasise stack/non-stack params
We don't have much (any) code that cares about the difference between
heap pointers and other primitives, but we have a _lot_ of code that cares
if it's stack memory. So let's encode it that way.
2021-09-30 17:04:16 +01:00
Brian Carroll
7ea59ad9d4 PR tidy-ups 2021-09-29 06:15:58 +01:00
Brian Carroll
45c9dc8617 update gen_wasm README 2021-09-28 19:06:47 +01:00
Brian Carroll
02bb9028ef Returning records on the stack from Wasm dev backend! 2021-09-28 08:06:59 +01:00
Brian Carroll
39fda3e675 Add more information to SymbolStorage
SymbolStorage is function-specific, whereas WasmLayout is function-independent.

SymbolStorage used to be a single-variant enum with a LocalId and a WasmLayout,
but now we need more variants, so we can handle stack memory allocation..

- For values in stack memory, the storage needs to include an offset within the
  stack frame, but we don't need that for primitive values.

- For function parameters, the allocated stack memory is in the caller's frame
  rather than the current frame, so we don't want size or offset.

We could have kept a WasmLayout inside of SymbolStorage but that would have made
possible a lot of invalid combinations. It seemed better to copy the fields we need.
2021-09-26 20:52:17 +01:00
Brian Carroll
ecece45a83 Add a helper method local_id_from_symbol 2021-09-26 20:52:17 +01:00
Brian Carroll
ae6cfe1992 Moree implementations for Wasm32TestResult 2021-09-26 20:52:16 +01:00
Brian Carroll
286ca680e0 Tidy up load_literal 2021-09-26 20:52:16 +01:00
Brian Carroll
ab4f28fd69 Comment out a test that isn't working 2021-09-26 20:52:16 +01:00
Brian Carroll
92b1d73bd6 Refactor build_proc into smaller helpers 2021-09-26 20:52:10 +01:00
Brian Carroll
65446ce1e8 Remove unnecessary Option 2021-09-18 14:46:09 +01:00
Brian Carroll
c3b5ac6c82 Allocate stack memory to local variables 2021-09-18 13:39:38 +01:00
Brian Carroll
52a56bfa27 Optimise away a memory copy for returned structs in simple cases 2021-09-17 21:50:00 +01:00
Brian Carroll
4f55b7a56e Allocate and free stack frames 2021-09-17 21:17:05 +01:00
Brian Carroll
036503c750 copy returned structs to caller stack 2021-09-17 19:42:29 +01:00
Brian Carroll
3d18d34135 Insert extra argument when returning on stack 2021-09-15 18:45:20 +02:00
Brian Carroll
2be2e09ffd Merge branch 'trunk' of github.com:rtfeldman/roc into wasm_stack_memory 2021-09-14 14:57:17 +02:00
Folkert
de959d3ad3 recurse on lambda set in wasm backend 2021-09-14 13:30:19 +02:00
Brian Carroll
866d9f47a0 Move WasmLayout to its own module 2021-09-14 08:31:32 +02:00
Brian Carroll
258513a57c reset join/jump data 2021-09-14 08:18:33 +02:00
Brian Carroll
672aa14f7c Cosmetic: reorganise WasmLayout match statment 2021-09-14 08:00:00 +02:00
Richard Feldman
b16faae0a2 Fix gen_wasm exhaustiveness error 2021-09-13 20:02:34 -04:00
Brian Carroll
cfef0f0f47 Add clarifying comments based on PR feedback 2021-09-13 22:42:04 +02:00
Brian Carroll
c47c3ccf58 Clippy fix 2021-09-13 17:30:13 +02:00
Brian Carroll
408c31ebcc Tests for different bitwidth integers 2021-09-13 17:01:06 +02:00
Brian Carroll
df73a4d80e rename wasm test modules 2021-09-12 23:24:04 +02:00
Brian Carroll
35c5b6bc4e Tests passing with generic native/wasm interface 2021-09-12 23:23:43 +02:00
Brian Carroll
8b73b98622 Code gen full test wrapper from body 2021-09-11 16:56:00 +01:00
Brian Carroll
086f13ef5a Rename test code gen menthod to build_wrapper_body 2021-09-11 16:55:20 +01:00
Brian Carroll
f0a7b4a46a Stack grows downward by convention, not upward 2021-09-11 11:44:49 +01:00
Brian Carroll
e8a36fc9b6 Readme updates 2021-09-11 11:44:48 +01:00
Brian Carroll
83150d2c7e Test helper trait to generate test wrapper code 2021-09-11 11:44:43 +01:00
Brian Carroll
b21155f60b Move some constants from backend to lib 2021-09-11 10:20:32 +01:00
Brian Carroll
042b175d89 More comprehensive WasmLayout 2021-09-11 10:20:27 +01:00
Folkert
34a88c228f fix another typo 2021-09-10 15:49:18 +02:00
Folkert
3a83b0c415 fix typo 2021-09-10 15:44:11 +02:00
Folkert
e3b3206286 sorting comment 2021-09-10 14:15:37 +02:00
Folkert
3750b154ca cleanup 2021-09-10 13:52:33 +02:00
Folkert
7290ef7f98 rename 2021-09-10 13:19:18 +02:00
Folkert
daf0a0e02b Merge remote-tracking branch 'origin/trunk' into gen_wasm_join 2021-09-10 13:16:46 +02:00
Folkert
05469d5ae5 Merge remote-tracking branch 'origin/trunk' into gen_wasm_switch 2021-09-09 10:19:46 +02:00
Brian Carroll
f822251c65 Fix rust-fmt 2021-09-08 20:38:27 +01:00
Brian Carroll
57a30b8e9e Get rid of duplicated eval helper file 2021-09-08 20:16:59 +01:00