36 lines
1.2 KiB
Plaintext
36 lines
1.2 KiB
Plaintext
# Intermediate code generation
|
|
|
|
- To access named parameters and local variables inside a procedure, IR should
|
|
be able to reference them. During the generation the needed information (e.g.
|
|
offsets or registers) can be extracted from the symbol table and saved in the
|
|
operands.
|
|
|
|
# ELF generation
|
|
|
|
- Don't ignore relocations where the symbol is not defined in the symbol table.
|
|
Report an error about an undefined symbol.
|
|
- JumpLabels inside functions are encoded as functions. Distinguish between
|
|
labels (e.g. .A0 or .L0) and global functions. Lables are NOTYPE LOCAL.
|
|
- Sort the symbols so that local symbols come first. Some table header had a
|
|
number specifiying the index of the first non-local symbol. Adjust that number.
|
|
|
|
# Name analysis
|
|
|
|
- Format error messages.
|
|
- Return non-zero error code on errors.
|
|
|
|
# Register allocation
|
|
|
|
- Each temporary variales gets a tn register where n is the variable index. If
|
|
there more variables the allocation will fail with out of bounds runtime
|
|
error. Implement spill over.
|
|
|
|
# Prarsing and abstract syntax tree
|
|
|
|
- Parse signed hexadecimal numbers.
|
|
|
|
# Other
|
|
|
|
- Type analysis.
|
|
- Generate a call to _divide_by_zero_error on RiscV.
|