Commit Graph

146 Commits

Author SHA1 Message Date
Irmen de Jong
69f3106062 first vm peephole optimizer 2022-06-22 00:21:06 +02:00
Irmen de Jong
cc174b7b85 added boolean() builtin function and use it to get rid of !=0 comparisons 2022-06-14 23:34:45 +02:00
Irmen de Jong
5a756aaed9 Pipe expression "|>" removed from the language 2022-06-12 18:41:42 +02:00
Irmen de Jong
c6e92ecac4 some code cleanup 2022-06-12 16:15:08 +02:00
Irmen de Jong
710f27afa9 bump library versions 2022-06-09 22:44:17 +02:00
Irmen de Jong
3054a1d32d api change: removed swap() builtin function (too complex in codegen for little used function) 2022-06-06 16:01:11 +02:00
Irmen de Jong
0a3cd652b0 vm: fix codegen for storing to pointer indexed 2022-06-06 14:18:12 +02:00
Irmen de Jong
1e61d84fd1 vm: fix expression codegen for pointer indexing 2022-06-04 19:32:35 +02:00
Irmen de Jong
3c8c44155d vm: loadix instruction added for indirect addressing via pointer 2022-06-04 18:07:57 +02:00
Irmen de Jong
2002412026 optimized codegen for pointer indexing (read expressions) 2022-06-04 17:20:17 +02:00
Irmen de Jong
b459b09b2f vm: fix comparison datatype error; primes.p8 works again 2022-05-24 18:26:07 +02:00
Irmen de Jong
3f5877dbcc vm: fix array iteration 2022-05-23 21:24:36 +02:00
Irmen de Jong
e659b91c4d vm: fix storezm/storezx instructions 2022-05-23 21:01:02 +02:00
Irmen de Jong
e09f054058 vm: implemented in-place bit rotate instructions 2022-05-23 20:30:25 +02:00
Irmen de Jong
b646f50265 vm: implemented in-memory bit shift instructions 2022-05-23 20:15:20 +02:00
Irmen de Jong
0a48ef3030 vm: just use new register instead of trying to (ab)use reg 0 2022-05-22 23:38:46 +02:00
Irmen de Jong
ba614801ee cleanup 2022-05-22 23:11:22 +02:00
Irmen de Jong
26ea1da146 vm: add in-place bitwise or,and,xor 2022-05-20 20:50:27 +02:00
Irmen de Jong
c9e8c7a290 vm: add in-place division 2022-05-19 23:38:16 +02:00
Irmen de Jong
5e4eb92443 vm: add in-place multiply 2022-05-19 23:18:54 +02:00
Irmen de Jong
461b6499ef vm: add in-place add/sub 2022-05-19 22:54:50 +02:00
Irmen de Jong
c769920b6e vm: fix signed divide 2022-05-19 22:24:57 +02:00
Irmen de Jong
181b98ef9e vm: implemented some self-assign instructions 2022-05-18 22:15:42 +02:00
Irmen de Jong
e52d9e3210 vm: split off assignment codegen to its own file 2022-05-17 22:38:31 +02:00
Irmen de Jong
dc6475c91b vm: fixed non-byte array indexing 2022-05-17 18:53:33 +02:00
Irmen de Jong
4dc9b45297 vm: fixed string comparisons, added missing vm string module 2022-05-13 23:10:13 +02:00
Irmen de Jong
6e31eebfb5 vm: ifElse codegen uses proper branching instructions now 2022-05-12 21:26:17 +02:00
Irmen de Jong
a7df828932 vm: codegen uses INCM/DECM if possible 2022-05-12 19:40:31 +02:00
Irmen de Jong
517cf61d11 vm: limit int instructions to just 2 register args 2022-05-11 22:36:47 +02:00
Irmen de Jong
4be7bc8323 vm: limit float instructions to just 2 register args 2022-05-11 22:09:46 +02:00
Irmen de Jong
74c05d00a9 vm: fix comparison operator codegen for floats 2022-05-11 17:07:21 +02:00
Irmen de Jong
677613d30a vm: expressiongen: use resultRegister arg instead of allocating new leftResultReg 2022-05-11 15:58:55 +02:00
Irmen de Jong
bacba629a5 vm: use shift-one instructions in codegen 2022-05-11 15:50:51 +02:00
Irmen de Jong
14e36f1362 vm: fix assignment to array 2022-05-11 15:26:54 +02:00
Irmen de Jong
d43ad849d1 vm: actually use the store-zero instructions in codegen 2022-05-11 15:18:36 +02:00
Irmen de Jong
8c4765b386 vm: support non-unary functions in pipe expressions 2022-05-07 20:42:05 +02:00
Irmen de Jong
09d3451d9d vm: accept %asmbinary (but it is eventually ignored in code execution) 2022-05-05 21:43:31 +02:00
Irmen de Jong
da01a5b4dc vm: implement float to integer cast, any, all, reverse 2022-05-04 22:08:21 +02:00
Irmen de Jong
3f9cdd9b56 vm: fix mul and div instructions 2022-05-04 01:10:59 +02:00
Irmen de Jong
0869789214 vm: implement float type casts to integer types 2022-05-02 23:38:32 +02:00
Irmen de Jong
10c8cc35c5 vm: implement float divide multiply sub add 2022-05-02 21:53:43 +02:00
Irmen de Jong
30c2e3e8ff vm: fix comparisons codegen 2022-05-02 21:32:45 +02:00
Irmen de Jong
86cc2f1075 vm: implementing more fp instructions 2022-05-02 21:06:14 +02:00
Irmen de Jong
b32641db87 remove syscall() builtin functions
vm code can do this via inline assembly
2022-05-01 00:41:30 +02:00
Irmen de Jong
0ee790969d vm: allow inline "assembly" 2022-04-30 23:24:25 +02:00
Irmen de Jong
7844ace934 vm: implementing floating-point 2022-04-29 22:27:02 +02:00
Irmen de Jong
625d5b2313 vm: some preparations for floating point 2022-04-26 21:08:32 +02:00
Irmen de Jong
cf50e4f6ec vm: printing of numbers now via conv module.
assigning strings now converted to strcopy function call in the compiler ast.
2022-04-23 02:15:51 +02:00
Irmen de Jong
7eea97d741 - floats: remove all floating point builtin functions and move them to the floats module instead 2022-04-22 00:45:54 +02:00
Irmen de Jong
88b55ab93e vm: add abs() and fix 6502 abs() code. 2022-04-18 21:20:17 +02:00
Irmen de Jong
ee36d47c27 vm: added cmp() and most of the status-branch instructions 2022-04-18 19:59:48 +02:00
Irmen de Jong
0f36be0001 vm: simple optimizations for +/-/*/div with constants 2022-04-14 22:42:25 +02:00
Irmen de Jong
220246278a removed sum(), max(), min(). abs() now always returns uword type.
This greatly simplifies internal handling of builtin functions by always having one fixed return type.
2022-04-14 00:21:16 +02:00
Irmen de Jong
349e5a15e9 min/max give proper error for string args
als implmented more vm builtin functions/syscalls
2022-04-13 23:09:25 +02:00
Irmen de Jong
bf7f4bba7b doc 2022-04-13 20:43:07 +02:00
Irmen de Jong
ab1766a559 moved all *integer* builtin trig functions (sin8u, cos8u etc) as regular asmsubs in math module 2022-04-13 00:27:35 +02:00
Irmen de Jong
51bf33040a vm: add many builtin functions 2022-04-11 22:39:33 +02:00
Irmen de Jong
a2c7273801 vm: use memory load instruction better 2022-04-11 20:55:06 +02:00
Irmen de Jong
ec6ac5bf24 vm: added swap() 2022-04-11 01:50:47 +02:00
Irmen de Jong
ec7501782d vm: added 1-bit variants of lsr/lsl opcodes 2022-04-11 00:25:00 +02:00
Irmen de Jong
890b1c2d52 more readable 2022-04-10 22:31:37 +02:00
Irmen de Jong
a01aee3111 add sideEffects boolean to PtBuiltinFunctionCall 2022-04-10 21:08:54 +02:00
Irmen de Jong
e2e951efdf constValue(expr) convenience function added for new Ast expression nodes 2022-04-10 18:45:33 +02:00
Irmen de Jong
a0face4a28 vm: implementing rol/ror 2022-04-09 11:13:49 +02:00
Irmen de Jong
a8cf9f5cc4 vm: syscalls can now return value 2022-04-05 20:46:34 +02:00
Irmen de Jong
8e4c0f7c22 vm: add sorting and reverse functions, fix value arg out of range errors 2022-04-05 17:48:49 +02:00
Irmen de Jong
d78bfcc35c vm: more optimal code when array index is constant value 2022-04-05 00:19:37 +02:00
Irmen de Jong
2b7c09e6ee vm: more optimal code for loops ending on 0 2022-04-05 00:08:38 +02:00
Irmen de Jong
036d9dbe59 got rid of unnecessary cast of boolean expressions by making their type dynamically adjust to byte or word 2022-04-04 23:43:55 +02:00
Irmen de Jong
62b32b2211 todos 2022-04-03 22:56:13 +02:00
Irmen de Jong
5b3ccab7dc vm: support noreinit option 2022-04-03 17:19:50 +02:00
Irmen de Jong
d616cb283b vm: implemented Pipe expression 2022-04-03 15:25:32 +02:00
Irmen de Jong
6ff56dc0bb vm: implemented When 2022-04-02 19:04:12 +02:00
Irmen de Jong
6ddb7453e1 vm postincrdecr on array done 2022-03-31 02:13:20 +02:00
Irmen de Jong
ad2355f8d3 vm forloop done 2022-03-31 01:41:59 +02:00
Irmen de Jong
0a0c58d450 added for loop over constant ranges 2022-03-30 23:42:15 +02:00
Irmen de Jong
0dc592b819 working on vm 2022-03-30 22:23:25 +02:00
Irmen de Jong
f46300016d working on vm 2022-03-30 01:58:31 +02:00
Irmen de Jong
3e1a7c6102 fix vm signed comparisons 2022-03-29 00:57:33 +02:00
Irmen de Jong
6d79903eb3 workin on vm issues 2022-03-28 01:49:43 +02:00
Irmen de Jong
bb1bf6a88c working on vm 2022-03-28 00:40:15 +02:00
Irmen de Jong
30cbb6c9a8 implementing more of the vm 2022-03-27 21:59:46 +02:00
Irmen de Jong
5494f309c0 working on vm 2022-03-27 17:46:15 +02:00
Irmen de Jong
3b6e7eccdd simplified containment check, only possible on string and arrays (as per the docs) 2022-03-27 16:59:55 +02:00
Irmen de Jong
e41d6787bb working on vm 2022-03-27 14:23:01 +02:00
Irmen de Jong
ed30108961 removed '**' power-operator. Use floats.pow() instead. 2022-03-27 13:16:34 +02:00
Irmen de Jong
12712ef812 working on vm 2022-03-27 11:48:44 +02:00
Irmen de Jong
0307f6b42c working on vm 2022-03-25 20:22:41 +01:00
Irmen de Jong
27f6d47efa working on vm codegen 2022-03-24 23:26:57 +01:00
Irmen de Jong
dbc7ad2ec4 no more Gosub node in new Ast, back to Functioncalls there. 2022-03-22 22:48:19 +01:00
Irmen de Jong
7b27d270a2 gosub only uses an identifier 2022-03-22 20:53:06 +01:00
Irmen de Jong
06b38506d1 working on vm translator 2022-03-22 01:43:02 +01:00
Irmen de Jong
fd581ffc37 moved pattern_match() from prog8_lib to string module 2022-03-21 21:32:10 +01:00
Irmen de Jong
ff57c5e9d3 working on vm and new ast 2022-03-21 01:36:11 +01:00
Irmen de Jong
9b16d7c786 working on vm 2022-03-20 15:06:29 +01:00
Irmen de Jong
7d2bf892b1 added start of virtual machine compilation target 2022-03-19 00:57:35 +01:00