Aula 26: Geração de Código de Máquina
Objetivos
- Traduzir IR para Assembly.
- Seleção de Instruções Básica.
Conteúdo
Finalmente, saímos do mundo virtual (IR) para o real. O Gerador de Código tem três responsabilidades principais:
- Seleção de Instruções: Escolher quais instruções de máquina usar para implementar a IR.
- Alocação de Registradores: Já vimos (Chaitin).
- Escalonamento (Scheduling): Reordenar para pipeline.
Expansão Macro (Template Matching)
A abordagem mais simples. Mapeamos cada instrução IR para um snippet de Assembly fixo. Ex (RISC fake): x = y + z
LW R1, offset_y(FP) ; Carrega y
LW R2, offset_z(FP) ; Carrega z
ADD R1, R1, R2 ; Soma
SW R1, offset_x(FP) ; Salva xÉ ineficiente (memory-heavy), mas funciona. O Alocador de Registradores posterior limpará os LW/SW desnecessários.
Referências
- Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
- Cooper, K., & Torczon, L. (2011). Engineering a Compiler.