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:

  1. Seleção de Instruções: Escolher quais instruções de máquina usar para implementar a IR.
  2. Alocação de Registradores: Já vimos (Chaitin).
  3. 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.
Back to top