2018-08-06 01:35:43 +00:00
|
|
|
====
|
|
|
|
TODO
|
|
|
|
====
|
|
|
|
|
2019-01-24 01:43:25 +00:00
|
|
|
Memory Block Operations integrated in language?
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
2018-08-06 01:35:43 +00:00
|
|
|
|
2019-04-11 23:06:46 +00:00
|
|
|
list,string memory block operations?
|
2018-08-06 01:35:43 +00:00
|
|
|
|
|
|
|
- list operations (whole list, individual element)
|
|
|
|
operations: set, get, copy (from another list with the same length), shift-N(left,right), rotate-N(left,right)
|
|
|
|
clear (set whole list to the given value, default 0)
|
|
|
|
|
2018-10-30 19:29:03 +00:00
|
|
|
- list operations ofcourse work identical on vars and on memory mapped vars of these types.
|
2018-08-06 01:35:43 +00:00
|
|
|
|
|
|
|
- strings: identical operations as on lists.
|
|
|
|
|
2019-04-11 23:06:46 +00:00
|
|
|
these should call optimized pieces of assembly code, so they run as fast as possible
|
2018-08-06 01:35:43 +00:00
|
|
|
|
2019-03-31 11:54:22 +00:00
|
|
|
For now, we have the ``memcopy``, ``memset`` and ``strlen`` builtin functions.
|
2019-01-24 01:43:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
More optimizations
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Add more compiler optimizations to the existing ones.
|
|
|
|
|
|
|
|
- on the language AST level
|
|
|
|
- on the StackVM intermediate code level
|
|
|
|
- on the final assembly source level
|
2019-01-29 22:32:43 +00:00
|
|
|
- can the parameter passing to subroutines be optimized to avoid copying?
|
2019-01-24 01:43:25 +00:00
|
|
|
|
2019-01-31 22:46:58 +00:00
|
|
|
- subroutines with 1 or 2 byte args (or 1 word arg) should be converted to asm calling convention with the args in A/Y register
|
2019-02-01 21:51:30 +00:00
|
|
|
this requires rethinking the way parameters are represented, simply injecting vardecls to
|
|
|
|
declare local variables for them is not always correct anymore
|
2019-01-31 22:46:58 +00:00
|
|
|
|
2019-01-24 01:43:25 +00:00
|
|
|
|
|
|
|
Also some library routines and code patterns could perhaps be optimized further
|
|
|
|
|
2019-01-26 16:32:26 +00:00
|
|
|
|
2019-01-29 22:32:43 +00:00
|
|
|
Eval stack redesign? (lot of work)
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
The eval stack is now a split lsb/msb stack using X as the stackpointer.
|
|
|
|
Is it easier/faster to just use a single page unsplit stack?
|
|
|
|
It could then even be moved into the zeropage to greatly reduce code size and slowness.
|
|
|
|
|
|
|
|
Or just move the LSB portion into a slab of the zeropage.
|
|
|
|
|
2019-01-29 22:48:26 +00:00
|
|
|
Allocate a fixed word in ZP that is the TOS so we can operate on TOS directly
|
|
|
|
without having to to index into the stack?
|
|
|
|
|
|
|
|
|
2019-01-31 22:46:58 +00:00
|
|
|
structs?
|
|
|
|
^^^^^^^^
|
|
|
|
|
|
|
|
A user defined struct type would be nice to group a bunch
|
|
|
|
of values together (and use it multiple times). Something like::
|
|
|
|
|
|
|
|
struct Point {
|
|
|
|
ubyte color
|
2019-04-15 23:50:12 +00:00
|
|
|
word[] vec = [0,0,0]
|
2019-01-31 22:46:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Point p1
|
|
|
|
Point p2
|
|
|
|
Point p3
|
|
|
|
|
|
|
|
p1.color = 3
|
|
|
|
p1.vec[2] = 2
|
|
|
|
|
2019-01-29 22:32:43 +00:00
|
|
|
|
2019-01-27 18:14:58 +00:00
|
|
|
Misc
|
|
|
|
^^^^
|
|
|
|
|
2019-04-11 23:06:46 +00:00
|
|
|
- are there any other missing instructions in the code generator?
|