Commit Graph

82 Commits

Author SHA1 Message Date
Jef
79f26328d4 Improve efficiency of resetting stack pointer 2019-03-27 12:57:49 +01:00
Jef
652e2fdeec Fix some places that could have caused panics, update example assembly in readme 2019-03-27 12:44:51 +01:00
Jef
d50f075078 Add CondCode location so we can branch much more efficiently 2019-03-27 12:22:57 +01:00
Jef
11b26430b6 Fix on latest nightly 2019-03-27 10:06:54 +01:00
Jef
1ff22de331 Remove unused code 2019-03-26 17:50:03 +01:00
Jef
96df539554 Remove unused code 2019-03-26 17:40:57 +01:00
Jef
cf9c57e279 Fix br_if calling convention handling 2019-03-26 10:29:55 +01:00
Jef
3798890d71 Fix inter-function calls assuming that functions are allocated sequentially 2019-03-26 09:01:09 +01:00
Jef
791ccf84b4 Free up registers where possible 2019-03-21 13:33:00 +01:00
Jef
4eb546c6a5 Fix conversions trapping and fix some weirdness around conditional jumps 2019-03-21 11:47:50 +01:00
Jef
14bff9229e Fix conversions 2019-03-20 18:38:32 +01:00
Jef
6b8ff11854 Implement imported mutable globals 2019-03-20 10:57:55 +01:00
Jef
e4752aae3d Several fixes, implement imported globals 2019-03-19 15:22:05 +01:00
Jef
36ec29b048 Fix imported memories 2019-03-18 21:17:18 +01:00
Jef
4e48dad9b6 Add host calls 2019-03-18 19:41:36 +01:00
Jef
dc42a58277 Fix double-free'd registers in call_direct 2019-03-18 11:16:32 +01:00
Jef
a8a26b5948 Fix some float issues 2019-03-16 13:04:49 +01:00
Jef
4d537f703d Fix copysign 2019-03-15 15:15:40 +01:00
Jef
e4260d1f6e Add more float ops 2019-03-15 13:13:34 +01:00
Jef
938d7701d9 Add float equality 2019-03-15 12:23:12 +01:00
Jef
1eb419cdda Implement memory.size/memory.grow, globals, call_indirect 2019-03-15 11:51:11 +01:00
Jef
a9ab1a1467 Add conversions, update tests in readme 2019-03-12 18:29:01 +01:00
Jef
5ae789ab7b Fix div and rem 2019-03-12 16:26:58 +01:00
Jef
45ccc591cd Fix br_if and br_table 2019-03-07 13:21:04 +01:00
Jef
a4e878da75 Add more store instructions 2019-03-06 14:03:40 +01:00
Jef
71662af0fa Integer division 2019-02-28 18:09:22 +01:00
Jef
677d54e46d Experimental br_table support 2019-02-27 17:59:27 +01:00
Jef
15bf933be7 Add more float operations 2019-02-27 11:29:23 +01:00
Jef
f726a8f36d Add float operations 2019-02-25 15:35:45 +01:00
Jef
ab6b8e983a Add floats 2019-02-25 11:17:21 +01:00
Jef
830644e7d0 Remove printlns, make pushing stack arguments work properly 2019-02-19 15:44:04 +01:00
Jef
f1d9ccb9e8 Implement Microwasm 2019-02-19 14:51:30 +01:00
Jef
680a8ed585 Add select 2019-02-08 13:24:59 +01:00
Jef
7e5c3c567f Signature checking for call_indirect, integrate with wasmtime 2019-02-08 11:46:25 +01:00
Jef
2fad984a0d Shift and rotate 2019-01-30 11:06:32 +01:00
Jef
26cb8de303 Only generate a single trap to reduce code size and complexity in call_indirect 2019-01-18 16:59:29 +01:00
Jef
2c8efa32b8 Unnecessarily optimise asm_println 2019-01-18 14:03:23 +01:00
Jef
c7956dbdb2 Fail if we try to call past the end of the table 2019-01-18 14:01:12 +01:00
Jef
b6e29a899e Add todo comments 2019-01-18 13:07:41 +01:00
Jef
b23e00893c Fix saving volatile registers now that we use unused args as scratch 2019-01-18 13:04:53 +01:00
Jef
e57cec3b3f Do call_indirect properly, by accessing the table section 2019-01-18 13:01:42 +01:00
Jef
d06be92a4e Don't allocate context if it's unused 2019-01-17 14:34:34 +01:00
Jef
e0f032a0e5 clz/ctz/popcnt 2019-01-17 13:51:18 +01:00
Jef
74d168ec4b Merge ends, store locals in registers where possible 2019-01-17 11:07:51 +01:00
Jef
a7fa7da7d4 Support a proper vmctx that contains more than just memory offset 2019-01-16 16:34:24 +01:00
Jef
d7434fe5d2 Have vmctx be the first argument so we (almost) never have to shuffle it around 2019-01-16 09:33:46 +01:00
Jef
b86d11e4ad Avoid unnecessary work when passing arguments on 2019-01-15 17:24:30 +01:00
Jef
62fe065e85 Fix miscompilation for maliciously-crafted use of locals 2019-01-15 14:00:43 +01:00
Jef
1b6952bb99 Implement vmctx as a hidden argument for cranelift compat 2019-01-15 12:27:55 +01:00
Jef
1eebc65c9e First baby steps to supporting memory accesses
Currently we don't actually sandbox the memory at all, so you can do evil things
like read and write the host's memory. We also don't support growing memory or
cranelift-compatible ABI that passes the memory offset as an argument.

We also always immediately allocate the buffer when encountering a memory section,
there is preliminary support for translating a buffer which can then have the real
offset replaced using relocations (and returning a different type when doing so)
but I haven't written the code that actually does relocation so it doesn't work yet.
2019-01-11 15:20:32 +01:00