1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-22 21:29:50 +00:00

Improved TODO

This commit is contained in:
jespergravgaard 2017-10-23 01:29:39 +02:00
parent 0d9a0a84f8
commit 7def3abf28

View File

@ -18,15 +18,12 @@ Features
- Add ability to call ASM code from KC.
- Add ability to call KC code from ASM. (Maybe declare some functions external to ensure their interface is well defined. Maybe generate ASM call stubs.)
- Add an export keyword ensuring that a function is generated even if it is never called. Maybe export can be handled by generating a call that can be used as stub.
- Add inline ASM
- Syntax asm( "asm...", "asm...", "asm..." ); - aligned with gcc
- Better syntax: asm { asm... } - using real ASM syntax inline!
- Allow inline ASM parameter expansion
- Handle long branches
- Optimize loops by unrolling them somewhat
- Optimize loops with Strength reduction (https://en.wikipedia.org/wiki/Strength_reduction)
- Remove unused functions.
- Support calculated pointers eg. *(ptr+i)
- Add syntax for encoded chars (eg. PETSCII instead of SCREEN)
Arrays / Strings / Inline data
- New semantic: Arrays are always allocated inline (and must therefore have a size). Pointers are never.
@ -36,6 +33,15 @@ Arrays / Strings / Inline data
- Add support for empty / filled byte data arrays.
- Add support for expressions in data initializers.
- Inline ASM
- Add support for inline asm
- Syntax asm( "asm...", "asm...", "asm..." ); - aligned with gcc
- Better syntax: asm { asm... } - using real ASM syntax inline!
- Allow inline ASM parameter expansion - eg lda line (where line is a variable)
- Support ASM syntax check etc.
- Also perform ASM clobber analysis when assigning registers.
- Allow lda <var> or sta <var> to just perform a register copy if possible.
Assembler Improvements
- Relabel blocks eliminating long labels such as b3_from_b11
- Eliminate chained JMP's (replace by direct JMP) - example: loopsplit.asm