Commit Graph

116 Commits

Author SHA1 Message Date
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
45b2a5dae2 Merge remote-tracking branch 'forked/master' into loops 2019-01-15 12:59:55 +01:00
Jef
1b6952bb99 Implement vmctx as a hidden argument for cranelift compat 2019-01-15 12:27:55 +01:00
Jef
8312730377 Make calling functions safe 2019-01-14 18:45:14 +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
Jef
ddb4c0fd19 x64 sign-extends imm32 arguments, so don't truncate them in an unsigned way 2019-01-08 11:10:59 +01:00
Jef
010f2d8569 Fix comparisons, add more tests for binops 2019-01-08 09:45:39 +01:00
Jef
fcd18746a7 Add 64-bit operations 2019-01-07 19:17:29 +01:00
Jef
5eee15ab02 Remove outdated comment 2018-12-19 20:27:16 +00:00
Jef
522818e7d8 Fix compiler bomb 2018-12-19 17:52:26 +00:00
Jef
9decdca525 Add Return 2018-12-19 16:39:20 +00:00
Jef
c52cf1493a Reformat a comment 2018-12-19 14:46:32 +01:00
Jef
f91b9072de Fix some issues with the use of stack depth 2018-12-19 14:42:00 +01:00
Jef
3b5c11a92a Test comparison operators 2018-12-19 12:58:08 +01:00
Jef
2173f4bcca Add other comparison operators, fix materialising locals, add more TODO comments (v. important) 2018-12-19 12:42:35 +01:00
Jef
cbf34a455b Add factorial tests from spec (after fixing them slightly) 2018-12-19 10:40:31 +01:00
Jef
72855e48c7 Improve behaviour when adding literal to non-literal, materialise local if its value will be changed
Currently the implementation of materializing locals causes compilation to be non-linear in degenerate cases
2018-12-18 19:15:29 +01:00
Jef
5418241dc6 Allow blocks to return values in any register 2018-12-18 17:16:38 +01:00
Jef
74ffb8560c Fix use of locals 2018-12-18 12:12:17 +01:00
Jef
0d1c4f3290 Allow calling functions with any signature 2018-12-17 21:55:03 -08:00
Jef
53841cdb07 Add loops 2018-12-17 12:50:29 +01:00
Jef
23b5a56a7d Fix locals not being restored properly (which may cause us to read garbage values from the stack) 2018-12-17 12:16:40 +01:00
Jef
bd2ee53c89 Optimize pop_i32_into, check more fib values 2018-12-15 16:39:38 +01:00
Sergey Pepyakin
5511f92088 Add call alignment requirement. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
23476e82ff Fix typo. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
aab191b460 Comment FuncDef. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
94e2f0c2a5 Add the fib test. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
d6b300c87f Implement returns. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
38590cbcb9 Add i32 literals support. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
a3719e08e5 Pass arguments. 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
eb60c2587a Basic form of a function call 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
635ccc6916 Introduce TranslationContext 2018-12-14 12:07:50 -05:00
Sergey Pepyakin
f22b9903b6 Pass function sig in function_body::translate 2018-12-14 12:07:50 -05:00
Jef
1e04dc90b6 Make more tests quickcheck-compatible, remove unused code 2018-12-14 16:35:48 +01:00
Jef
b832832c76 Add const folding, fix returning values from blocks 2018-12-14 16:20:28 +01:00
Jef
17ecd049a1 Register allocation V2
This lays the groundwork for other on-the-fly optimisations,
like passing literals through in order to do const folding
in linear time, while compiling.
2018-12-14 14:16:43 +01:00
Jef
4994e3671c Remove unused argument from fibonacci example 2018-12-13 12:26:49 +01:00
Jef
912fa83fff Add benchmarks 2018-12-13 12:26:47 +01:00
Jef
5bb7430976 Add quickcheck, implement simple binary operations 2018-12-13 10:25:37 +01:00
Jef
5b448ce3c7 Stop leaking stack space on function call 2018-12-13 10:25:17 +01:00
Jef
189996accd Fix receiving more than 6 arguments, allow calling functions with more than 6 arguments 2018-12-12 13:23:43 +01:00
Jef
86353cba5e Allow calling functions with any signature 2018-12-12 11:52:48 +01:00
Sergey Pepyakin
b32f77ea02 Add the fib test. 2018-12-11 20:15:26 +01:00
Sergey Pepyakin
0cd70c649a Implement returns. 2018-12-11 20:13:20 +01:00
Sergey Pepyakin
e02dbf1bc2 Add i32 literals support. 2018-12-11 20:12:55 +01:00