Commit Graph

271 Commits

Author SHA1 Message Date
Irmen de Jong
905921a684 IR: new (sys)call instructions that encapsulate the full subroutine call
to fix the bugs resulting from nesting subroutine calls (as param to another call etc)
2023-05-14 15:20:25 +02:00
Irmen de Jong
bff3c4f95c IR now converts IRInlineAsmChunk (of type IR) into regular code chunks directly.
.p8ir files usually won't contain <INLINEASM> nodes any longer
2023-05-09 21:04:31 +02:00
Irmen de Jong
add8a777d8 IR: binarydata fixes 2023-05-03 22:31:04 +02:00
Irmen de Jong
f465b2e2a0 some improvements to IR peephole optimizer 2023-05-02 00:29:04 +02:00
Irmen de Jong
efd7d6f0c0 tweak IR call args setting now via special SETPARAM instruction 2023-04-14 02:10:39 +02:00
Irmen de Jong
b55be093be tweak IR 2023-04-11 22:48:20 +02:00
Irmen de Jong
7c1d5cadd7 fix sort and reverse on strings on 6502 codegen 2023-04-10 19:33:24 +02:00
Irmen de Jong
dd1592b03b ir syscalls args via stack instead of fixed r65500+ 2023-04-10 18:02:37 +02:00
Irmen de Jong
9b37ac483f vm fix str to word conversion
ir SYSCALL puts result(s) on value stack,  instead of on hardcoded r0, r1
2023-04-10 16:26:42 +02:00
Irmen de Jong
090820958e ir divmod returns its results on valuestack, to keep consistency with the rule that only 1 register can be a returnvalue 2023-04-10 15:26:30 +02:00
Irmen de Jong
ac21e1be5c vm syscall instruction no longer fixed to r0 2023-04-10 13:44:05 +02:00
Irmen de Jong
c8531cbeb1 remove unused variables from IR output 2023-04-09 23:09:30 +02:00
Irmen de Jong
9b952fbc44 tweaking IR instruction set branch instructions 2023-04-09 22:17:19 +02:00
Irmen de Jong
ccdf05e922 tweaking IR instruction formats 2023-04-09 16:12:16 +02:00
Irmen de Jong
c3d74f2ae9 fix golden ram area for x16, remove romsub restriction
note: romsubs still won't work in the VM but at least they compile again
2023-04-08 00:40:52 +02:00
Irmen de Jong
4861973899 vm: fix float arrays init values 2023-04-04 00:06:55 +02:00
Irmen de Jong
d936568b76 added divmod() and divmodw() builtin functions to efficiently compute division and remainder in a single call 2023-03-29 23:46:44 +02:00
Irmen de Jong
1fa2e2e37d 3rd party library versions upgrades 2023-03-26 21:36:21 +02:00
Irmen de Jong
78a097585d new IR call and return instructions to deal with returnregisters 2023-03-12 21:54:59 +01:00
Irmen de Jong
592f74124c fix startup subroutine linking in VM 2023-03-12 16:09:55 +01:00
Irmen de Jong
fd07ae5225 fix various IR file and symboltable issues 2023-03-07 19:40:11 +01:00
Irmen de Jong
fd269453a4 todos 2023-03-04 14:14:01 +01:00
Irmen de Jong
435b9d8973 get rid of 'noreinit' option for now, because it resulted in unreliable code 2023-02-20 23:29:16 +01:00
Irmen de Jong
92a07b87d2 clearer 2023-02-20 02:32:36 +01:00
Irmen de Jong
c3c82282ba reinitGlobals option is clearer than the inverse 2023-02-19 19:09:29 +01:00
Irmen de Jong
dddf9a9396 remove explicit 'bss' from St var, changed to 'uninitialized' 2023-02-19 16:50:06 +01:00
Irmen de Jong
9ca6860ffa tweak 2023-02-19 15:08:16 +01:00
Irmen de Jong
3cce985f03 check float bits 2023-02-16 22:22:12 +01:00
Irmen de Jong
19a2791c65 vm target can't use asmsub at all, give better error for that 2023-01-26 01:38:13 +01:00
Irmen de Jong
e0913a39ab optimizing 2022-12-30 18:50:45 +01:00
Irmen de Jong
a04839dd6b vm: add property for custom breakpoint handler 2022-12-30 15:10:13 +01:00
Irmen de Jong
a7df094ff4 don't allow ~ on booleans, also introduce SZ and SNZ instructions in IR to complete the conditional-set instruction list. 2022-12-28 21:19:38 +01:00
Irmen de Jong
1e6fa77633 ir: 4 new instructions to branch on signed <0, >0, <=0, >=0 2022-12-28 13:14:20 +01:00
Irmen de Jong
eb4cff202c removed redundant branch opcodes in IR: BLT(S), BLE(S). Just use swapped BGT(S), BGE(S). 2022-12-28 12:41:05 +01:00
Irmen de Jong
bf0604133c fix error in IR for inline asm and BSS vars. 2022-12-04 16:48:44 +01:00
Irmen de Jong
17bedac96c vm: memory is randomized on start instead of 0. P8ir file now has BSS segment. Vm clears BSS vars to 0. 2022-12-03 17:46:06 +01:00
Irmen de Jong
c21913a66b ir: keep order of children in block 2022-11-22 02:04:24 +01:00
Irmen de Jong
91fdb3e2d4 ir: store labels in blocks, but still useless 2022-11-17 00:37:45 +01:00
Irmen de Jong
d08451bccc ir: Block can now contain inline binary 2022-11-12 20:17:23 +01:00
Irmen de Jong
e6688f4b9d clearer error for VM limitation cannot load label address as value 2022-11-12 13:45:02 +01:00
Irmen de Jong
9d7b9771c2 p8ir file format is now valid XML 2022-11-11 23:35:52 +01:00
Irmen de Jong
5d4bfffc7e float.rndseedf() now takes float seed value and is consistent for all CBM compilation targets 2022-11-06 22:53:57 +01:00
Irmen de Jong
38efaae7b2 ir/vm: syscall params in high base register to avoid push/pop 2022-11-06 12:52:09 +01:00
Irmen de Jong
469e042216 vm: replaced prog8_lib.string_compare and others with syscalls 2022-11-04 23:12:13 +01:00
Irmen de Jong
0f1a4b9d8f fixed certain type check error when passing boolean value to ubyte function parameter
fixed virtual machine string comparison syscall
2022-11-03 23:06:03 +01:00
Irmen de Jong
06b032af91 refactor 2022-11-03 00:20:31 +01:00
Irmen de Jong
e7408224ac ir: remove position tracking from codechunk for now 2022-11-02 22:12:42 +01:00
Irmen de Jong
e67c05c274 ir: fix asmsub contents not appearing in IR file 2022-11-02 20:50:51 +01:00
Irmen de Jong
b22804efaf ir: fix inlineasm linking 2022-10-31 23:59:33 +01:00
Irmen de Jong
0eda7ac498 vm: don't crash on empty code chunks 2022-10-30 17:05:08 +01:00
Irmen de Jong
7cc3cc3990 ir: fix non-code chunk linkage 2022-10-30 12:55:06 +01:00
Irmen de Jong
b718b12083 ir/vm fix chunk linkage 2022-10-26 00:12:56 +02:00
Irmen de Jong
cfa7258ff4 various 2022-10-25 23:18:42 +02:00
Irmen de Jong
585009ac5c ir: fix syscall numbers and more 2022-10-24 01:57:37 +02:00
Irmen de Jong
30ee65fd14 ir: ensure that block and sub labels are also on the first chunk in said block/sub 2022-10-23 18:54:08 +02:00
Irmen de Jong
76428b16f0 Merge branch 'master' into labeledchunks
# Conflicts:
#	codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt
#	docs/source/todo.rst
#	examples/test.p8
#	virtualmachine/src/prog8/vm/VirtualMachine.kt
2022-10-23 12:19:02 +02:00
Irmen de Jong
00afa1ce52 ir: replace RND opcode by syscalls 2022-10-22 17:20:46 +02:00
Irmen de Jong
ec5adffdc2 rnd()/rndf() routines can now be seeded with new rndseed()/rndseedf() routines. fixes #80 2022-10-22 13:34:22 +02:00
Irmen de Jong
fabae6e970 ir: fix handling of labeled chunks 2022-10-16 23:53:17 +02:00
Irmen de Jong
6fc89607d3 ir: moving to labeled chunks, no more IRLabel nodes 2022-10-07 00:34:56 +02:00
Irmen de Jong
2340760f53 rename 2022-10-04 22:54:14 +02:00
Irmen de Jong
39d6d2857e ir: change inline binary a bit 2022-10-04 00:57:08 +02:00
Irmen de Jong
7b722a0001 ir: fix count register uses 2022-10-04 00:25:55 +02:00
Irmen de Jong
af6be44676 ir: adding register usage inspections
fix compiler problems with untrimmed inlined asm, and when only a single return statement is present in a subroutine
2022-09-30 20:25:00 +02:00
Irmen de Jong
5a8f97a0b6 ir: adding last missing features to be able to encode all of Prog8 2022-09-30 16:01:00 +02:00
Irmen de Jong
0d4dd385b8 added '%ir' to write inline IR code, '%asm' is now only for real 6502 assembly.
(%ir is probably only used in the library modules for the virtual machine target)
2022-09-30 15:12:26 +02:00
Irmen de Jong
43e31765e5 kotlin 1.7.20 2022-09-29 18:41:20 +02:00
Irmen de Jong
7c1bdfe713 ir: uninitialized vars remain empty, bss section classifier (unused for now as there are no segements yet) 2022-09-28 16:56:50 +02:00
Irmen de Jong
7ea7e63f44 use require() more often 2022-09-27 18:27:55 +02:00
Irmen de Jong
1d2ce2cbeb consolidate IR line parse function 2022-09-27 18:02:57 +02:00
Irmen de Jong
9d219ae4b9 refactor 2022-09-27 03:32:39 +02:00
Irmen de Jong
90b2be2bf4 vm: new memory initialization of array vars 2022-09-27 02:43:50 +02:00
Irmen de Jong
db1aa8fcbd vm: new translation of IRProgram into vm program list 2022-09-27 01:50:00 +02:00
Irmen de Jong
11c000f764 moved codeGenVirtual module into virtualmachine module 2022-09-26 20:00:40 +02:00
Irmen de Jong
4d6dcbd173 ir: consolidate IRCodeInstruction and Instruction 2022-09-26 19:46:44 +02:00
Irmen de Jong
0da117efd2 vm: get rid of .p8virt file and cruft 2022-09-26 19:28:40 +02:00
Irmen de Jong
dda19c29fe vm: fix symbols to be case sensitive properly in p8virt assembler 2022-09-25 15:51:50 +02:00
Irmen de Jong
ca41669f4f vm: fix scoped name in address-of inside array 2022-09-24 18:26:35 +02:00
Irmen de Jong
0e1886e6bd vm: fix nested label prefixing 2022-09-24 16:00:25 +02:00
Irmen de Jong
c26e116f0e vm: fix crashes when array contains pointers/strings 2022-09-24 14:42:07 +02:00
Irmen de Jong
e0fbce0087 few more unittests for IR 2022-09-21 02:59:36 +02:00
Irmen de Jong
11d87e4725 VM: support cpu registers 2022-09-19 17:13:46 +02:00
Irmen de Jong
627ed51a1b IR: mem mapped vars and memory slabs 2022-09-19 15:20:40 +02:00
Irmen de Jong
c8f3bfa726 vm assembler now understands simple indexed addresses (symbol+number) 2022-09-18 02:17:42 +02:00
Irmen de Jong
3091e3a1c8 IR support for instructions operating on cpu regs 2022-09-18 01:51:04 +02:00
Irmen de Jong
2f3e7d1c27 IR support for storing incbins and romsubs 2022-09-17 16:07:41 +02:00
Irmen de Jong
0e831d4b92 fix superfluous usage of addressOf() 2022-09-16 00:31:04 +02:00
Irmen de Jong
12ed07a607 comments 2022-09-13 23:06:05 +02:00
Irmen de Jong
101b33c381 split intermediate representation into separate module 2022-09-13 23:06:05 +02:00
Irmen de Jong
78d3d9d27d vm: get rid of jumpi traces, fix IR value issue with STOREIX 2022-08-13 20:00:13 +02:00
Irmen de Jong
e560e2ab3f vm instructions now contain info on input/output registers 2022-08-07 18:49:16 +02:00
Irmen de Jong
1e441c2ddf tweak vm codegen 2022-08-07 13:45:03 +02:00
Irmen de Jong
f718f4251b working on better encoding of romsub in new ast/vmtarget 2022-08-07 12:21:10 +02:00
Irmen de Jong
00b717cde8 tweak 2022-08-04 18:35:10 +02:00
Irmen de Jong
feb5c8be95 vm: some more peephole optimizations 2022-07-12 19:04:19 +02:00
Irmen de Jong
ff1fc28287 added immediate value vm logical instructions because these are so common 2022-07-12 16:12:32 +02:00
Irmen de Jong
314398ba4c added immediate value vm arithmetic instructions because these are so common 2022-07-12 15:21:26 +02:00
Irmen de Jong
840331347b added a few more vm optimizations and unit tests 2022-07-12 12:42:37 +02:00
Irmen de Jong
cc41218d37 added nicer vm example 2022-07-03 00:41:04 +02:00
Irmen de Jong
4b358abbb7 "not" operator removed from ast and codegen (it's been replaced with x==0 as equivalent) 2022-06-29 01:13:08 +02:00
Irmen de Jong
435d6f6f3f vm: and/or/xor/not are all bitwise operations again 2022-06-28 03:17:51 +02:00
Irmen de Jong
ef92451d1a fix logical expressions on arbitrary values, for now with boolean() around the operands 2022-06-28 01:18:36 +02:00
Irmen de Jong
c75bd97537 update kotest 2022-06-26 18:51:03 +02:00
Irmen de Jong
775c85fc18 don't swap operands that would change function evaluation order + vm: fix label casing error 2022-06-13 00:25:45 +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
0a3cd652b0 vm: fix codegen for storing to pointer indexed 2022-06-06 14:18:12 +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
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
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
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
bacba629a5 vm: use shift-one instructions in codegen 2022-05-11 15:50:51 +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
09d3451d9d vm: accept %asmbinary (but it is eventually ignored in code execution) 2022-05-05 21:43:31 +02:00
Irmen de Jong
b1a49e5f29 vm: implement rest of float instructions 2022-05-04 22:31:45 +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
0869789214 vm: implement float type casts to integer types 2022-05-02 23:38:32 +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
7844ace934 vm: implementing floating-point 2022-04-29 22:27:02 +02:00
Irmen de Jong
f4993d6e5d vm: fix instruction type checks 2022-04-28 22:19:46 +02:00
Irmen de Jong
0fab806f36 vm: some preparations for floating point 2022-04-27 17:45:58 +02:00
Irmen de Jong
be2113d291 vm: starting to implement floating point instructions 2022-04-26 21:25:59 +02:00
Irmen de Jong
625d5b2313 vm: some preparations for floating point 2022-04-26 21:08:32 +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
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
51bf33040a vm: add many builtin functions 2022-04-11 22:39:33 +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
b6eb343234 moving string escaping out of antlr project 2022-04-10 17:31:30 +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