2018-08-06 01:35:43 +00:00
====
TODO
====
2021-04-12 00:10:54 +00:00
- make sure that in if statements, the left and right operand of the comparison is never a complex expression
anymore (only number, variable, addressof or memread) by rewriting if <left> <op> <right> {..} into:
if_eval_left = left
if_eval_right = right
if if_eval_left <op> if_eval_right { ... } (only rewrite operand if x.isSimple() !!)
and then simplify all the codegeneration for if statements.
the variables are allocated in subroutine scope (otherwise irq handler could clobber them)
2018-08-06 01:35:43 +00:00
2021-03-06 22:07:30 +00:00
- optimize several inner loops in gfx2
2021-02-16 22:58:31 +00:00
- hoist all variable declarations up to the subroutine scope *before* even the constant folding takes place (to avoid undefined symbol errors when referring to a variable from another nested scope in the subroutine)
2021-02-07 18:08:47 +00:00
- optimize swap of two memread values with index, using the same pointer expression/variable, like swap(@(ptr+1), @(ptr+2))
- add a flood fill routine to gfx2?
2021-03-06 22:07:30 +00:00
- add modes 2 and 3 to gfx2 (lowres 4 color and 16 color) ?
2021-01-16 17:09:47 +00:00
- add a f_seek() routine for the Cx16 that uses its seek dos api?
2021-02-20 16:33:45 +00:00
- refactor the asmgen into their own submodule?
- refactor the compiler optimizers into their own submodule?
2021-01-07 00:25:50 +00:00
- optimizer: detect variables that are written but never read - mark those as unused too and remove them, such as uword unused = memory("unused222", 20) - also remove the memory slab allocation
2021-03-21 18:55:21 +00:00
- add a compiler option to not remove unused subroutines. this allows for building library programs. But this won't work with 64tass's .proc ...
2021-02-21 00:24:44 +00:00
- make it possible to use cpu opcodes such as 'nop' as variable names by prefixing all asm vars with something such as `` v_ ``
2020-08-18 12:47:52 +00:00
- option to load the built-in library files from a directory instead of the embedded ones (for easier library development/debugging)
2021-02-15 03:41:33 +00:00
- c64: make the graphics.BITMAP_ADDRESS configurable (VIC banking)
2020-11-10 21:44:48 +00:00
- some support for recursive subroutines?
- via %option recursive?: allocate all params and local vars on estack, don't allow nested subroutines, can begin by first not allowing any local variables just fixing the parameters
- Or via a special recursive call operation that copies the current values of all local vars (including arguments) to the stack, replaces the arguments, jsr subroutine, and after returning copy the stack back to the local variables
2020-10-22 21:41:16 +00:00
- get rid of all other TODO's in the code ;-)
2020-03-21 23:43:46 +00:00
2019-01-24 01:43:25 +00:00
More optimizations
^^^^^^^^^^^^^^^^^^
Add more compiler optimizations to the existing ones.
2020-10-02 20:37:52 +00:00
- further optimize assignment codegeneration, such as the following:
2021-02-15 03:41:33 +00:00
- rewrite expression code generator to not use eval stack but a fixed number of predetermined value 'variables' (1 per nesting level?)
2020-10-02 20:37:52 +00:00
- binexpr splitting (beware self-referencing expressions and asm code ballooning though)
2020-03-24 21:37:42 +00:00
- more optimizations on the language AST level
- more optimizations on the final assembly source level
2019-01-24 01:43:25 +00:00
2019-01-26 16:32:26 +00:00
2019-01-27 18:14:58 +00:00
Misc
^^^^
2019-08-11 16:21:15 +00:00
Several ideas were discussed on my reddit post
https://www.reddit.com/r/programming/comments/alhj59/creating_a_programming_language_and_cross/