Commit Graph

406 Commits

Author SHA1 Message Date
37eae090e5 nac3artiq: fix linker inputs 2021-11-06 14:23:54 +08:00
204baabfd2 nac3artiq: add compile_method_to_mem 2021-11-06 14:14:53 +08:00
597857ccd0 typo 2021-11-06 14:14:40 +08:00
efc9edbc14 nac3parser: fix decorator and above comments 2021-11-06 14:13:17 +08:00
7d66195eae nac3artiq: embed linker script, put intermediate objects in temp dir 2021-11-06 13:04:00 +08:00
1fea51d9b3 Merge pull request 'nac3parser: add comment support' (#68) from with_nac3comment into master
Reviewed-on: M-Labs/nac3#68
2021-11-05 20:46:42 +08:00
99b29d8ded Merge branch 'master' into with_nac3comment 2021-11-05 20:46:29 +08:00
3db95b120b nac3core: implements bool conversion function 2021-11-05 20:34:34 +08:00
8dbb4ad58a nac3core/toplevel: make test less fragile
test results should not depend on internal states if possible
2021-11-05 20:28:21 +08:00
ee67b22ebc Merge branch 'master' into with_nac3comment 2021-11-05 20:01:36 +08:00
afb94dd299 nac3artiq: move demo to dedicated folder 2021-11-05 18:28:31 +08:00
d6f0607ff0 nac3artiq: rename class decorator to nac3 2021-11-05 18:08:36 +08:00
610448fa73 nac3artiq: include parallel in demo 2021-11-05 18:07:18 +08:00
e8228710e7 min_artiq: remove unnecessary definitions 2021-11-05 17:50:26 +08:00
032e1d84cf nac3parser: add and fix tests due to comment support 2021-11-04 15:03:34 +08:00
b239806558 nac3core: adapt to ast change due to comment support 2021-11-04 15:02:51 +08:00
694c7e945c nac3ast: generated ast with comment fields 2021-11-04 15:01:50 +08:00
3b1cc02d06 nac3parser, ast: add comment support core changes 2021-11-04 15:00:27 +08:00
32d1fe811b flake: update nixpkgs 2021-11-03 21:54:27 +08:00
36e4028f5b fix and run parser tests 2021-11-03 17:39:48 +08:00
b6ff46c39e README: update 2021-11-03 17:22:14 +08:00
bf7e2c295a integrate nac3parser 2021-11-03 17:11:00 +08:00
48ce6bb6c5 rustpython-parser: string interner, optimizations, thread local cache
corresponds to M-Labs RustPython fork at efdf7829ba1a5f87d30df8eaff12a330544f3cbd
branch parser-mod
2021-11-03 16:36:28 +08:00
80c7bc1cbd add RustPython parser
based on RustPython 67b338863ee6f16b0df0a7d1aa9debba55284651
2021-11-03 16:34:10 +08:00
e89bc93b5f ignore expressions in class definition body (#26) 2021-11-02 23:30:12 +08:00
47f563908a basic string support (#30) 2021-11-02 23:22:49 +08:00
0e914ab7e9 composer: add range keyword 2021-11-02 18:56:14 +08:00
613020a717 test: add missing id_to_name entry 2021-11-02 18:34:48 +08:00
ee2c0d8bab flake: add cargo-insta to dev shell 2021-11-02 18:13:59 +08:00
0d1e9262af flake: update cargoSha256 2021-11-02 15:17:10 +08:00
bc0f82cad8 Revert "nac3artiq/codegen: fixed smax problem"
We have LLVM 12 now and can use the intrinsic.

This reverts commit 98d9f73afb.
2021-11-02 14:00:28 +08:00
624dfe8cd1 upgrade to LLVM 12 2021-11-02 14:00:20 +08:00
e47597bb8a Merge branch 'context-manager' 2021-11-02 11:17:00 +08:00
98d9f73afb nac3artiq/codegen: fixed smax problem
It turns out the smax intrinsic I use is a new one that is not supported
in LLVM11. Now implemented with signed integer compare and select.
2021-11-02 11:10:21 +08:00
da2886565b runkernel: sort out cargo rigmarole with rustc link arg 2021-11-01 00:28:27 +08:00
b37cf6de08 nac3artiq: share isa->time_fns map 2021-11-01 00:03:15 +08:00
083eacc268 with parallel/sequential support
Behavior of parallel and sequential:
Each function call (indirectly, can be inside a sequential block) within a parallel
block will update the end variable to the maximum now_mu in the block.
Each function call directly inside a parallel block will reset the timeline after
execution. A parallel block within a sequential block (or not within any block) will
set the timeline to the max now_mu within the block (and the outer max now_mu will also
be updated).

Implementation: We track the start and end separately.
- If there is a start variable, it indicates that we are directly inside a
parallel block and we have to reset the timeline after every function call.
- If there is a end variable, it indicates that we are (indirectly) inside a
parallel block, and we should update the max end value.

Note: requires testing, it is difficult to inspect the output IR
2021-10-31 23:54:37 +08:00
137efebb33 runkernel: add simple host kernel runner 2021-10-31 23:52:43 +08:00
443b95d909 nac3artiq: do not use custom linker script when targeting host 2021-10-31 23:51:50 +08:00
8b73a123cc nac3artiq: support compiling for the host 2021-10-31 23:02:21 +08:00
84c5201243 with parallel/sequential support
Behavior of parallel and sequential:
Each function call (indirectly, can be inside a sequential block) within a parallel
block will update the end variable to the maximum now_mu in the block.
Each function call directly inside a parallel block will reset the timeline after
execution. A parallel block within a sequential block (or not within any block) will
set the timeline to the max now_mu within the block (and the outer max now_mu will also
be updated).

Implementation: We track the start and end separately.
- If there is a start variable, it indicates that we are directly inside a
parallel block and we have to reset the timeline after every function call.
- If there is a end variable, it indicates that we are (indirectly) inside a
parallel block, and we should update the max end value.

Note: requires testing, it is difficult to inspect the output IR
2021-10-31 17:16:21 +08:00
558c3f03ef nac3core/codegen: list comprehension support 2021-10-24 16:53:43 +08:00
45673b0ecc nac3core/codegen: cleanup 2021-10-24 16:53:43 +08:00
181607008d nac3core/codegen: supports list iter 2021-10-24 14:39:50 +08:00
fb92b6d364 nac3core: supports range iterator 2021-10-23 23:53:36 +08:00
2f6ba69770 nac3core/typecheck: check if value is none 2021-10-23 21:31:14 +08:00
cc83bbc63a nac3core/codegen: fix broken test 2021-10-17 13:07:45 +08:00
279f47f633 nac3core/codegen: avoid sending unifiers
Previously, we have to copy types from one unification table to another,
and make the table sendable. This requires cloning (processing) the
whole table 3 times per function call which is not efficient and uses
more memory than required when the unification table is large.

We now use a concrete type table to only copy the type we need. This
reduces the overhead as we only need to process the unification table
for once (when we do the function codegen), and reduces memory usage by
a bit (but not noticeable when the unification table is small, i.e. the
types are simple).
2021-10-17 13:02:18 +08:00
9850cbe313 nac3core/codegen: optimize for every function
This speeds up compilation and reduces memory usage.
2021-10-17 12:56:11 +08:00
1f5bea2448 nac3core/codegen: refactor according to #23 2021-10-16 22:17:36 +08:00