Files
pl/TODO.md
2026-01-06 16:39:51 +01:00

57 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Milestones
## Clean codebase structure
0. Prelude classes like FileIO, strings null-termination etc.
1. Diagnostic helper class for logging
2. Remove "void" valuehandle class and use it as ValueHandle::Type instead
3. Function multiple arguments support
4. Implement if-else and while statements
## Types support in language
## Stack based code generation
0. Stack based codegen, i.e. for fasm x86_64
## IR Optimizations aka const folding, deadcode elimination
## Register allocation
## First beta assembly code generation with registers
## ...
-------------------------------------------------
# References for IR optimizations
2. Find out what use[B] and def[B] are for each block
3. Define successors and predecessors of each block and make them accessible
4. Compute liveIn[B] and liveOut[B] for each block
Classic equations:
liveIn[B] = use[B] (liveOut[B] - def[B])
liveOut[B] = liveIn[S] for S in succ[B]
5. Linear scan register allocation
- Instruction numbering + per-instruction liveness
- Live intervals
- Linear scan allocator with ~6 fake regs
- Spill to stack slots
- Add “CALL clobbers regs” rule
# References for register allocation
function's reserved registers:
EAX, ECX, EDX
return registers:
int => EAX
float => ST0