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 |
|
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
|
ae45ce517e
|
cleanups
|
2022-04-03 17:33:50 +02:00 |
|
Irmen de Jong
|
d616cb283b
|
vm: implemented Pipe expression
|
2022-04-03 15:25:32 +02:00 |
|
Irmen de Jong
|
1e63615592
|
tweaks
|
2022-04-02 18:04:41 +02:00 |
|