Commit graph

16 commits

Author SHA1 Message Date
Leonardo de Moura
224fdc7a78 refactor(library/init/lean/ir): platform dependent IR
Motivation: in 64-bit machines, we can store boxed uint32 values as a
tagged pointer. In 32-bit machines, we need to allocated an object (like
Haskell) to store the uint32 value. So, the generated bytecode is quite
different in each platform.

This change also allow us to simplify the IR. Example: we don't need the
type `sizet` anymore.

Impact: To be able to bootstrap in both platforms,
we will have to store two versions of the generated code: 32 and 64
versions. In principle, we only need to store the 64-bit version,
and use cross-compilation to build the 32-bit version.
2018-05-10 13:15:02 -07:00
Leonardo de Moura
552ca3bb11 feat(library/init/lean/ir): allow uint32 in case instruction 2018-05-10 12:56:55 -07:00
Leonardo de Moura
ad61772c72 feat(library/init/lean/ir): add is_null
We will use this instruction for compiling inductive datatypes such as
`option A` where `A` is represented as an `object`.
In this case, we can represent `some a` as `a` (without any extra memory
allocation), and `none` as the null pointer.
2018-05-10 12:47:44 -07:00
Leonardo de Moura
aba3d08372 fix(library/init/lean/ir/extract_cpp): minor fixes 2018-05-10 10:54:43 -07:00
Leonardo de Moura
9a261975f7 chore(library/init/lean/ir/extract_cpp): cleanup 2018-05-10 10:28:30 -07:00
Leonardo de Moura
e882d9d7cf feat(library/init/lean/ir): add array_size, sarray_size and string_len 2018-05-10 10:02:16 -07:00
Leonardo de Moura
68458aa97b refactor(library/init/lean/ir): array operations 2018-05-10 09:52:00 -07:00
Leonardo de Moura
4862da3fca feat(library/init/lean/ir): add array_pop and sarray_pop 2018-05-10 09:24:48 -07:00
Leonardo de Moura
f1535121b9 refactor(library/init/lean/ir): combine unary instructions 2018-05-10 09:19:13 -07:00
Leonardo de Moura
655cfbf3b0 refactor(library/init/lean/ir): read and sread instructions are now binop 2018-05-10 08:47:16 -07:00
Leonardo de Moura
7b89a8c910 chore(library/init/lean/ir): copy_array ==> array_copy, copy_sarray ==> sarray_copy 2018-05-10 08:36:33 -07:00
Leonardo de Moura
d2c4918ca3 chore(library/init/lean/ir): shared ==> is_shared, scalar ==> is_scalar 2018-05-10 08:30:28 -07:00
Leonardo de Moura
2e0629133f feat(library/init/lean/ir): add emit_lit 2018-05-09 18:29:54 -07:00
Leonardo de Moura
fc840eab3f feat(library/init/lean/ir): add emit_unop 2018-05-09 18:20:46 -07:00
Leonardo de Moura
c7153f7661 chore(library/init/lean/ir/extract_cpp): cleanup 2018-05-09 18:03:00 -07:00
Leonardo de Moura
9345765815 feat(library/init/lean/ir/extract_cpp): start IR => C++ extractor 2018-05-09 17:47:55 -07:00