Generación de Código No Optimizado
-
Upload
cedric-greene -
Category
Documents
-
view
57 -
download
3
description
Transcript of Generación de Código No Optimizado
![Page 1: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/1.jpg)
CompiladoresGeneración de Código No
Optimizado
De la Representación Intermedia a Código de Máquina
![Page 2: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/2.jpg)
Oscar Bonilla 2 Universidad Galileo
Resumen
• Introducción• Overview de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 3: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/3.jpg)
Oscar Bonilla 3 Universidad Galileo
Anatomía de un Compilador
Optimizador de Código Intermedio
Generador de Código
Representación Intermedia Optimizada
Código en Assembler
Generador de Código Intermedio
Representación Intermedia
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
![Page 4: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/4.jpg)
Oscar Bonilla 4 Universidad Galileo
Anatomía de un Compilador
Generador de Código
Representación Intermedia
Código en Assembler
High-level IR
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
Low-level IR
Generador de Código Intermedio
![Page 5: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/5.jpg)
Oscar Bonilla 5 Universidad Galileo
Representación en Formato Intermedio
while (i < v.length && v[i] != 0) { i = i+1;
}
entry
ldl i len
<
cbr
stl i
exit
ldf v
lda 0
!=
cbr
ldf v ldl ildl i 0
+
![Page 6: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/6.jpg)
Oscar Bonilla 6 Universidad Galileo
El Generador de Código debe...
• Traducir todas las instrucciones en la representación intermedia a lenguaje ensamblador
• Asignar espacio para variables, arreglos, etc.
• Adherirse a las convenciones de llamado
• Crear la información simbólica necesaria
![Page 7: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/7.jpg)
Oscar Bonilla 7 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 8: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/8.jpg)
Oscar Bonilla 8 Universidad Galileo
Resumen de un Procesador Moderno
• ALU
• Control
• Memoria
• Registros
Memory
Registers ALU
Control
![Page 9: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/9.jpg)
Oscar Bonilla 9 Universidad Galileo
Arithmetic and Logic Unit
• Hace la mayoría de operaciones
• Con forma:OP Rdest, Rsrc1, Rsrc2
• Operaciones son:– Operaciones aritméticas (add, sub, mul)– Operaciones lógicas (and, sll)– Operaciones de comparación (seq, sge,
slt)
Memory
Registers
Control
ALU
![Page 10: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/10.jpg)
Oscar Bonilla 10 Universidad Galileo
Arithmetic and Logic Unit
• Muchas operaciones aritméticas pueden causar una excepción– overflow y underflow
• Puede operar en distintos tipos de datos– 8, 16, 32 bits
– Aritmética con y sin signo
– Operaciones de punto flotante (ALU separada)
– Instrucciones para convertir entre formatos (cvt.s.d)
Memory
Registers
Control
ALU
![Page 11: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/11.jpg)
Oscar Bonilla 11 Universidad Galileo
Control
• Maneja la secuencia de Instrucciones
• Ejecución de Instrucciones– Todas las instrucciones están en
memoria– Fetch de la instrucción a la que apunta
el PC y ejecutarla– Para instrucciones generales,
incrementar el PC para que apunte a la siguiente posición de memoria
Memory
Registers ALU
Control
![Page 12: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/12.jpg)
Oscar Bonilla 12 Universidad Galileo
Control• Saltos no condicionales
– Fetch de la siguiente instrucción de una localidad diferente
– Salto incondicional a una dirección dadaj label
– Salto incondicional a una dirección en un registro
jr rsrc
– Para manejar llamadas a procedimientos, se hace un salto incondicional, pero se guarda la siguiente dirección en la secuencia actual en un registro
jal label jalr rsrc
Memory
Registers ALU
Control
![Page 13: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/13.jpg)
Oscar Bonilla 13 Universidad Galileo
Control
• Saltos Condicionales– Ejectuamos un test,
si es éxitoso, fetch de instrucciones de una nueva dirección,de otra forma fetch de la siguiente instrucción
– Las instrucciones son de la forma: brelop Rsrc1, Rsrc2, label
– relop es de la forma: eq, ne, gt, ge, lt, le
Memory
Registers ALU
Control
![Page 14: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/14.jpg)
Oscar Bonilla 14 Universidad Galileo
Control• Transferencia de control en casos
especiales (raros)– traps y excepciones– Mecanismo
• Guardar la posición de la siguiente instrucción (o la actual)
• Encontrar la dirección a la que hay que saltar (de un vector de excepciones)
• Saltar a esa posición
Memory
Registers ALU
Control
![Page 15: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/15.jpg)
Oscar Bonilla 15 Universidad Galileo
Memory
• Espacio de Direcciones plano– Compuesto de words– Direccionable por bytes
• Necesitamos guardar– Programa– Variables locales– Stack– Heap
Memory
Registers ALU
Control
![Page 16: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/16.jpg)
Oscar Bonilla 16 Universidad Galileo
Memory
Memory
Registers ALU
Control
Stack
Código Generado
HeapObjetos
Arrays
locales(parámetros)
![Page 17: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/17.jpg)
Oscar Bonilla 17 Universidad Galileo
Registers
• Arquitectura load/store– Todas las operaciones se ejecutan en
registros– Necesitamos mover datos de/a memoria
a/de registros
• Importante para rendimiento– Limitados en número
ALU
Control
Memory
Registers
![Page 18: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/18.jpg)
Oscar Bonilla 18 Universidad Galileo
Otras Interacciones
• Otras operaciones– Input/Output– Operaciones Privilegiadas / seguras– Manejo de hardware especial
• TLBs, Caches etc.
• La mayoría via system calls – Codificadas a mano en assembler– El compilador las puede tratar como una llamada
normal a una función
ALU
Control
Memory
Registers
![Page 19: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/19.jpg)
Oscar Bonilla 19 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 20: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/20.jpg)
Oscar Bonilla 20 Universidad Galileo
Las máquinas entienden...
location data
0x4009b0: 3c1c0fc0
0x4009b4: 279c7640
0x4009b8: 0399e021
0x4009bc: 8f998044
0x4009c0: 27bdffe0
0x4009c4: afbf001c
0x4009c8: afbc0018
0x4009cc: 0320f809
0x4009d0: 2404000a
0x4009d4: 8fbf001c
0x4009d8: 8fbc0018
0x4009dc: 27bd0020
0x4009e0: 03e00008
0x4009e4: 00001025
![Page 21: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/21.jpg)
Oscar Bonilla 21 Universidad Galileo
Las máquinas entienden...
location data assembly instruction
main:
[test.c: 3] 0x4009b0: 3c1c0fc0 lui gp,0xfc0
[test.c: 3] 0x4009b4: 279c7640 addiu gp,gp,30272
[test.c: 3] 0x4009b8: 0399e021 addu gp,gp,t9
[test.c: 3] 0x4009bc: 8f998044 lw t9,-32700(gp)
[test.c: 3] 0x4009c0: 27bdffe0 addiu sp,sp,-32
[test.c: 3] 0x4009c4: afbf001c sw ra,28(sp)
[test.c: 3] 0x4009c8: afbc0018 sw gp,24(sp)
[test.c: 3] 0x4009cc: 0320f809 jalr ra,t9
[test.c: 3] 0x4009d0: 2404000a li a0,10
[test.c: 3] 0x4009d4: 8fbf001c lw ra,28(sp)
[test.c: 3] 0x4009d8: 8fbc0018 lw gp,24(sp)
[test.c: 3] 0x4009dc: 27bd0020 addiu sp,sp,32
[test.c: 3] 0x4009e0: 03e00008 jr ra
[test.c: 3] 0x4009e4: 00001025 move v0,zero
![Page 22: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/22.jpg)
Oscar Bonilla 22 Universidad Galileo
Representación Intermedia
Programa (character stream)
Generador de Código
Código en Assembler
High-level IR
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)Token Stream
Arbol de Parseo
Low-level IR
Generador de Código Intermedio
![Page 23: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/23.jpg)
Oscar Bonilla 23 Universidad Galileo
Representación Intermedia
Programa (character stream)
Generador de Código
Código en Assembler
High-level IR
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)Token Stream
Arbol de Parseo
Low-level IR
Generador de Código Intermedio
Assembler & linker
Binario Ejecutable
Procesador
![Page 24: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/24.jpg)
Oscar Bonilla 24 Universidad Galileo
Lenguaje Ensamblador
• Ventajas– Simplifica la generación de código debido al uso de
instrucciones simbólicas y nombres simbólicos– Capa de abstracción lógica– Las arquitecturas pueden ser descritas por un
lenguaje ensamblador podemos modificar la implementación
• Instrucciones de macro assembler
• Desventajas– Proceso adicional de ensamblaje y linking
![Page 25: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/25.jpg)
Oscar Bonilla 25 Universidad Galileo
Lenguaje Ensamblador
• Lenguaje de Máquina Reposicionable (object modules)– Todas las posiciones (direcciones) representadas por
símbolos
– Mapeadas a direcciones de memoria en tiempo de linking y loading
– Flexibilidad de compilación separada
• Lenguaje de Máquina Absoluto– Direcciones hard-coded
– Implementación simple y directa
– Inflexible – difícil de recargar el código generado
![Page 26: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/26.jpg)
Oscar Bonilla 26 Universidad Galileo
Ejemplo de Assembleritem:
.word 1
.textfib:
subu $sp, 40sw $31, 28($sp)sw $4, 40($sp)sw $16, 20($sp).frame $sp, 40, $31
# 7 if(n == 0) return 0;lw $14, 40($sp)bne $14, 0, $32move $2, $0b lab2
lab1:lw $15, 40($sp)bne $15, 1, $33li $2, 1b lab1
![Page 27: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/27.jpg)
Oscar Bonilla 27 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 28: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/28.jpg)
Oscar Bonilla 28 Universidad Galileo
Compatibilidad
• Necesitamos Manejar– Procedimientos múltiples– Llamadas a librerías– Código compilado por otros compiladores, escrito
en lenguajes distintos, assembler escrito a mano
• Convenciones de llamado– Layout de memoria– Registros– Stack
![Page 29: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/29.jpg)
Oscar Bonilla 29 Universidad Galileo
Layout de Memoria
• Inicio del Stack
• Manejo del Heap– free lists
• Posición de inicio en el segmento de texto
Stack
Text segment
HeapObjects
Arrays
locals(parameters)
0x7fffffff
0x400000
Reserved
![Page 30: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/30.jpg)
Oscar Bonilla 30 Universidad Galileo
Disciplinas de paso de parámetros
• Muchos métodos distintos– Llamada por referencia– Llamada por valor– Llamada por valor-resultado
• ¿Cómo pasamos los parámetros?– Por el stack– Por los registros– O una combinación
![Page 31: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/31.jpg)
Oscar Bonilla 31 Universidad Galileo
Registros
• No es un registro, hard-wired a la constante 0
0 zero hard-wired to zero
20
![Page 32: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/32.jpg)
Oscar Bonilla 32 Universidad Galileo
Registros
• Return Address de una llamada (call) – Implicitamente copiada por jal y jalr
0 zero hard-wired to zero
31 ra return address
![Page 33: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/33.jpg)
Oscar Bonilla 33 Universidad Galileo
Registros
• Frame pointer• Stack pointer• Pointer to global area
0 zero hard-wired to zero
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 34: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/34.jpg)
Oscar Bonilla 34 Universidad Galileo
Registros
• Reservado para uso del ensamblador– Se necesita almacenamiento para manejar
instrucciones de assembler compuestas0 zero hard-wired to zero1 at Reserved for asm
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 35: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/35.jpg)
Oscar Bonilla 35 Universidad Galileo
Registros
• Retornan los resultados– Copiar el resultado cuando estamos listos para retornar
– Usados para evaluar expresiones (si quieren)
0 zero hard-wired to zero1 at Reserved for asm
2 - 3 v0 - v1 expr. eval and return of results
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 36: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/36.jpg)
Oscar Bonilla 36 Universidad Galileo
Registros
• Primeros cuatro argumentos de una llamada– Se pueden usar para otra cosa si los argumentos no importan
– Si hay más argumentos se pasan por el stack
0 zero hard-wired to zero1 at Reserved for asm
2 - 3 v0 - v1 expr. eval and return of results4 - 7 a0 - a3 arguments 1 to 4
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 37: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/37.jpg)
Oscar Bonilla 37 Universidad Galileo
Registros
• El resto son temporales
0 zero hard-wired to zero1 at Reserved for asm
2 - 3 v0 - v1 expr. eval and return of results4 - 7 a0 - a3 arguments 1 to 4
8 - 25 keep temporary values
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 38: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/38.jpg)
Oscar Bonilla 38 Universidad Galileo
Registros• En una llamada a procedimiento los temporales:
– Son guardados por el caller– Son guardados por el callee– Alguna combinación de ambos
0 zero hard-wired to zero1 at Reserved for asm
2 - 3 v0 - v1 expr. eval and return of results4 - 7 a0 - a3 arguments 1 to 4
8 - 25 keep temporary values
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
![Page 39: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/39.jpg)
Oscar Bonilla 39 Universidad Galileo
Pregunta:
• ¿Cuáles son las ventajas/desventajas de que:– El callee guarde los registros?– El caller guarde los registros?
• ¿Qué registros deben ser usados por el caller y callee si la mitad es guardada por el caller y la otra mitad es guardada por el callee?– Caller-saved t0 - t9– Calliee-saved s0-s7
21
![Page 40: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/40.jpg)
Oscar Bonilla 40 Universidad Galileo
Registros
0 zero hard-wired to zero1 at Reserved for asm
2 - 3 v0 - v1 expr. eval and return of results4 - 7 a0 - a3 arguments 1 to 48-15 t0 - t7 caller saved temporary
16 - 23 s0 - s7 calliee saved temporary24, 25 t8, t9 caller saved temporary
28 gp pointer to global area29 sp stack pointer30 fp frame pointer31 ra return address
• En una llamada a procedimiento los temporales:– Son guardados por el caller– Son guardados por el callee– Alguna combinación de ambos
![Page 41: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/41.jpg)
Oscar Bonilla 41 Universidad Galileo
Stack
• Guarda los parámetros y las variables locales– Cada invocación obtiene una nueva copia
• Caller tiene que guardar– Cualquier registro caller-saved que tiene un valor– Cualesquiera parámetros pasados– Return address (de cuando se hizo el branch)
• Callee tiene que guardar– Dirección anterior del stack pointer– Cualquier registro callee-saved que use
23
![Page 42: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/42.jpg)
Oscar Bonilla 42 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
fp
sp
• Dirección del n-ésimo argumento es -(n-4)*4*$fp
• Variables locales son constantes positivas de $fp
![Page 43: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/43.jpg)
Oscar Bonilla 43 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
fp
sp
• Al llamar un nuevo procedimiento
24
![Page 44: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/44.jpg)
Oscar Bonilla 44 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
fp
sp
• Al llamar un nuevo procedimiento, el caller:
![Page 45: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/45.jpg)
Oscar Bonilla 45 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers
fp
sp
• Al llamar un nuevo procedimiento, el caller:– push de cualquier t0-t9 que
tenga un valor importante al stack
![Page 46: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/46.jpg)
Oscar Bonilla 46 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fp
sp
• Al llamar un nuevo procedimiento, el caller:– push de cualquier t0-t9 que
tenga un valor importante al stack
– poner argumentos 1-4 en registros a0-a3
– push del resto de los argumentos al stack
![Page 47: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/47.jpg)
Oscar Bonilla 47 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fp
sp
• Al llamar un nuevo procedimiento, el caller:– push de cualquier t0-t9 que
tenga un valor importante al stack
– poner argumentos 1-4 en registros a0-a3
– push del resto de los argumentos al stack
– hacer un jal o jalr
![Page 48: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/48.jpg)
Oscar Bonilla 48 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fp
sp
• En el procedimiento, el calliee al principio:
25
![Page 49: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/49.jpg)
Oscar Bonilla 49 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments fp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp
sp
![Page 50: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/50.jpg)
Oscar Bonilla 50 Universidad Galileo
old frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fpsp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp– push $fp al stack
![Page 51: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/51.jpg)
Oscar Bonilla 51 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fp
sp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp– push $fp al stack– push $ra al stack
![Page 52: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/52.jpg)
Oscar Bonilla 52 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Calliee savedregisters
Caller saved registers arguments
fp
sp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp– push $fp al stack– push $ra al stack– si cualquier s0-s7 es usado
en el procedimiento, guardarlo en el stack
![Page 53: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/53.jpg)
Oscar Bonilla 53 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Local variables
Calliee savedregisters
Caller saved registers arguments
fp
sp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp– push $fp al stack– push $ra al stack– si cualquier s0-s7 es usado
en el procedimiento, guardarlo en el stack
– crear espacio para variables locales en el stack
![Page 54: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/54.jpg)
Oscar Bonilla 54 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Local variables
Calliee savedregisters
Caller saved registers arguments
Dynamic area
fp
sp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp– push $fp al stack– push $ra al stack– si cualquier s0-s7 es usado
en el procedimiento, guardarlo en el stack
– crear espacio para variables locales en el stack
– ejecutar al calliee...
![Page 55: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/55.jpg)
Oscar Bonilla 55 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Local variables
Calliee savedregisters
Caller saved registers arguments
Dynamic area
• En el procedimiento, el calliee al final :
fp
sp
26
![Page 56: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/56.jpg)
Oscar Bonilla 56 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Local variables
Calliee savedregisters
Caller saved registers arguments
Dynamic area
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
fp
sp
![Page 57: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/57.jpg)
Oscar Bonilla 57 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Calliee savedregisters
Caller saved registers arguments
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
fp
sp
![Page 58: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/58.jpg)
Oscar Bonilla 58 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
fp
spCalliee saved
registers
![Page 59: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/59.jpg)
Oscar Bonilla 59 Universidad Galileo
return addressold frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
– restaurar $ra del stack fpsp
![Page 60: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/60.jpg)
Oscar Bonilla 60 Universidad Galileo
old frame pointer
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
– restaurar $ra del stack
– restaurar $fp del stack
fp
sp
![Page 61: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/61.jpg)
Oscar Bonilla 61 Universidad Galileo
return addressold frame pointer
Stack
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
– restaurar $ra del stack
– restaurar $fp del stack
– ejecutar jr ra para regresar al caller
fp
sp
![Page 62: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/62.jpg)
Oscar Bonilla 62 Universidad Galileo
Stack• Al regresar de la llamada al
procedimiento, el caller:return address
old frame pointer
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers arguments
fp
sp
27
![Page 63: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/63.jpg)
Oscar Bonilla 63 Universidad Galileo
Stack• Al regresar de la llamada al
procedimiento, el caller:– actualizar $sp para ignorar
argumentos
return addressold frame pointer
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers
fp
sp
![Page 64: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/64.jpg)
Oscar Bonilla 64 Universidad Galileo
Stack• Al regresar de la llamada al
procedimiento, el caller:– actualizar $sp para ignorar
argumentos– pop de los registros caller
saved
return addressold frame pointer
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
Caller saved registers
fp
sp
![Page 65: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/65.jpg)
Oscar Bonilla 65 Universidad Galileo
Stack• Al regresar de la llamada al
procedimiento, el caller:– actualizar $sp para ignorar
argumentos– pop de los registros caller
saved– continuar...
return addressold frame pointer
Local variables
Calliee savedregisters
Stack temporaries
... argument 5argument 4
Dynamic area
fp
sp
![Page 66: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/66.jpg)
Oscar Bonilla 66 Universidad Galileo
Pregunta:
• ¿es necesario el $fp?
• ¿cuáles son las ventajas y desventajas de tener $fp?
30
![Page 67: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/67.jpg)
Oscar Bonilla 67 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;else
dx = bx - ax; …
retrun dx + dy + dz;}
}
![Page 68: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/68.jpg)
Oscar Bonilla 68 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;else
dx = bx - ax; …
retrun dx + dy + dz;}
}
…int px, py, pz;…auxmath am;am.sum3d(px, py, pz, 0, 0, 0);
![Page 69: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/69.jpg)
Oscar Bonilla 69 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;else
dx = bx - ax; …
retrun dx + dy + dz;}
}
…int px, py, pz;px = 10; py = 20; pz = 30;auxmath am;am.sum3d(px, py, pz, 0, 1, -1);
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fpArgument 6: by (1)Argument 5: bx (0)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??
![Page 70: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/70.jpg)
Oscar Bonilla 70 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;else
dx = bx - ax; …
retrun dx + dy + dz;}
}
…int px, py, pz;px = 10; py = 20; pz = 30;auxmath am;am.sum3d(px, py, pz, 0, 1, -1);
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??
![Page 71: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/71.jpg)
Oscar Bonilla 71 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;else
dx = bx - ax; …
retrun dx + dy + dz;}
}
…int px, py, pz;px = 10; py = 20; pz = 30;auxmath am;am.sum3d(px, py, pz, 0, 1, -1);
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??
![Page 72: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/72.jpg)
Oscar Bonilla 72 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 73: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/73.jpg)
Oscar Bonilla 73 Universidad Galileo
Creación de Expresiones• Algoritmo ingenuo de generación de código
x = y op z– Seleccionar un registro Rsrc1 (digamos $t0) para cargar el
valor y
– Generar instrucción para copiar, si y está:• En otro registro (digamos $t7) add $t0, $t7, zero• Es constante (digamos 1024) li $t0, 1024
• En memoria (digamos que $t7 apunta a y) lw $t0, $t7
• En una dirección simbólica (digamos lab1) la $t0, lab1
– Seleccionar registro Rsrc2 (digamos $t1) y cargar el valor z
– Seleccionar registro Rdest (digamos $t2) para guardar x
– Hacer la operación (digamos and) and $t2, $t1, $t0
![Page 74: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/74.jpg)
Oscar Bonilla 74 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;
sp
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
![Page 75: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/75.jpg)
Oscar Bonilla 75 Universidad Galileo
Programa Ejemploclass auxmath {
int sum3d(int ax, int ay, int az, int bx, int by, int bz)
{int dx, dy, dz;if(ax > ay)
dx = ax - bx;
sp
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
add $t0, $a1, zerolw $t1, 0($fp)sub $t2, $t0, $t1sw $t2, -12($fp)
address
src1src2dest
![Page 76: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/76.jpg)
Oscar Bonilla 76 Universidad Galileo
Cuidado
• Los temporales son limitados– Cuándo el árbol es grande, 18 registros temporales pueden
ser insuficientes asignar espacio en el stack
• No hay instrucción de máquina– Puede ser que haya que expandir la operación intermedia a
múltiples operaciones de máquina
• Muy ineficiente– Muchas copias, sumas con cero, etc.– No se preocupen, vamos a arreglarlas en la optimización– Mantengan el generador de código muy muy simple
![Page 77: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/77.jpg)
Oscar Bonilla 77 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 78: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/78.jpg)
Oscar Bonilla 78 Universidad Galileo
Generación de control de flujo
• Aplanar la estructura del control– Usar un template
• Poner etiquetas únicas para puntos donde el control se une (join points)
• Ahora generamos el código apropiado
![Page 79: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/79.jpg)
Oscar Bonilla 79 Universidad Galileo
Template para condicionales
if (test)true_body
elsefalse_body
<do the test>
boper …, lab_true
<false_body>
j lab_end
lab_true:
<true_body>
lab_end:
38
![Page 80: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/80.jpg)
Oscar Bonilla 80 Universidad Galileo
Programa Ejemploif(ax > bx)
dx = ax - bx;else
dx = bx - ax;
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
address
src1src2dest
<do test>
boper ..., ..., lab0
<false body>
j lab1lab0:
<true body>
lab1:
![Page 81: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/81.jpg)
Oscar Bonilla 81 Universidad Galileo
Programa Ejemploif(ax > bx)
dx = ax - bx;else
dx = bx - ax;
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
address
src1src2dest
add $t0, $a1, zero
lw $t1, 0($fp)
bgt $t0, $t1, lab0
<fale body>
j lab1
lab0:
<true body>
lab1:
![Page 82: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/82.jpg)
Oscar Bonilla 82 Universidad Galileo
Programa Ejemploif(ax > bx)
dx = ax - bx;else
dx = bx - ax;
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
address
src1src2dest
add $t0, $a1, zero
lw $t1, 0($fp)
bgt $t0, $t1, lab0
lw $t0, 0($fp)
add $t1, $a1, zero
sub $t2, $t0, $t1
sw $t2, -12($fp)
j lab1
lab0:
<true body>
lab1:
![Page 83: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/83.jpg)
Oscar Bonilla 83 Universidad Galileo
Programa Ejemploif(ax > bx)
dx = ax - bx;else
dx = bx - ax;
return addressold frame pointer
Dynamic area
Caller saved registers
Argument 7: bz (-1)
fp
sp
Argument 6: by (1)Argument 5: bx (0)
Local variable dx (??) Local variable dy (??) Local variable dz (??)
v0 ??v1 ??a0 thisa1 ax (10)a2 ay (20)a3 az (30)v0 ??v1 ??t0 ??t1 ??t2 ??
address
src1src2dest
add $t0, $a1, zero
lw $t1, 0($fp)
bgt $t0, $t1, lab0
lw $t0, 0($fp)
add $t1, $a1, zero
sub $t2, $t0, $t1
sw $t2, -12($fp)
j lab1
lab0: add $t0, $a1, zero
lw $t1, 0($fp)
sub $t2, $t0, $t1
sw $t2, -12($fp)
lab1:
![Page 84: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/84.jpg)
Oscar Bonilla 84 Universidad Galileo
Template para ciclos while
while (test)body
![Page 85: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/85.jpg)
Oscar Bonilla 85 Universidad Galileo
Template para ciclos while
while (test)body
lab_cont:<do the test>boper …, lab_bodyj lab_end
lab_body:<body>j lab_cont
lab_end:
![Page 86: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/86.jpg)
Oscar Bonilla 86 Universidad Galileo
Template para ciclos while
while (test)body
lab_cont:<do the test>boper …, lab_bodyj lab_end
lab_body:<body>j lab_cont
lab_end:
• Una template optimizada
43
lab_cont:<do the test>boper …, lab_end<body>j lab_cont
lab_end:
![Page 87: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/87.jpg)
Oscar Bonilla 87 Universidad Galileo
Pregunta:
• ¿Cuál es la template para?
dobody
while (test)
![Page 88: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/88.jpg)
Oscar Bonilla 88 Universidad Galileo
Question:
• ¿Cuál es la template para?
dobody
while (test)
lab_begin:
<body>
<do test>
boper …, lab_begin
44
![Page 89: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/89.jpg)
Oscar Bonilla 89 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 90: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/90.jpg)
Oscar Bonilla 90 Universidad Galileo
return addressold frame pointer
Procedure Call
Dynamic area
Local variables
Calliee savedregisters
Caller saved registers arguments
Dynamic area
fp
sp
• En el procedimiento, el calliee al principio :– copiar $sp a $fp
– push $fp al stack
– push $ra al stack
– si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack
– crear espacio para variables locales en el stack
– ejecutar al calliee...
![Page 91: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/91.jpg)
Oscar Bonilla 91 Universidad Galileo
Procedure Call• En el procedimiento, el calliee
al principio :– copiar $sp a $fp
– push $fp al stack
– push $ra al stack
– si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack
– crear espacio para variables locales en el stack
– ejecutar al calliee...
46
![Page 92: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/92.jpg)
Oscar Bonilla 92 Universidad Galileo
Procedure Call• En el procedimiento, el calliee
al principio :– copiar $sp a $fp
– push $fp al stack
– push $ra al stack
– si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack
– crear espacio para variables locales en el stack
– ejecutar al calliee...
proc_entry:add $t0, $fp,
zeroadd $fp, $sp,
zeroaddi $sp, $sp, -4sw $t0, ($sp)addi $sp, $sp, -4sw $ra, ($sp)
48
![Page 93: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/93.jpg)
Oscar Bonilla 93 Universidad Galileo
Procedure Call• Ejecutar el cuerpo del
procedimiento callee– Acceso a variables
locales y parámetros como offsets del $fp
proc_entry:add $t0, $fp,
zeroadd $fp, $sp,
zeroaddi $sp, $sp, -4sw $t0, ($sp)addi $sp, $sp, -4sw $ra, ($sp). . .
![Page 94: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/94.jpg)
Oscar Bonilla 94 Universidad Galileo
Procedure Callproc_entry:
add $t0, $fp, zero
add $fp, $sp, zero
addi $sp, $sp, -4sw $t0, ($sp)addi $sp, $sp, -4sw $ra, ($sp). . .
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
– restaurar $ra del stack
– restaurar $fp del stack
– ejecutar jr ra para regresar al caller
![Page 95: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/95.jpg)
Oscar Bonilla 95 Universidad Galileo
Procedure Callproc_entry:
add $t0, $fp, zeroadd $fp, $sp, zeroaddi $sp, $sp, -4sw $t0, ($sp)addi $sp, $sp, -4sw $ra, ($sp). . .
• En el procedimiento, el calliee al final :– poner valores de retorno en v0,v1
– actualizar $sp usando $fp ($fp+4) + ...
– Pop los registros callee-saved del stack
– restaurar $ra del stack
– restaurar $fp del stack
– ejecutar jr ra para regresar al caller
add $v0, $t2lw $sp, -8($fp)addi $sp, $sp, -8lw $ra, ($sp)addi $sp, $sp, 4lw $fp, ($sp)addi $sp, $sp, 4jr $ra
51
![Page 96: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/96.jpg)
Oscar Bonilla 96 Universidad Galileo
Resumen
• Introducción• Resumen de un procesador moderno• Lenguaje de Máquina • Convenciones de Llamado• Generación de Expresiones• Generación de Control de Flujo• Generación de Procedimientos• Linking
![Page 97: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/97.jpg)
Oscar Bonilla 97 Universidad Galileo
Símbolos
• Ejecutable es una colección– Compilaciones separadas– Librerías linkeadas estática y dinámicamente
• Por lo tanto, no podemos crear una imagen de memoria en tiempo de compilación
• Fase adicional del linker para juntarlo todo y crear la imagen final de memoria
![Page 98: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/98.jpg)
Oscar Bonilla 98 Universidad Galileo
Salida del compilador
• Crear código objeto con direcciones simbólicas que pueden ser reposicionadas
• Direcciones simbólicas de todos los datos y principios de procedimientos que otros necesitan accesar son exportados
• Exportar los nombres de símbolos de referencias externas
![Page 99: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/99.jpg)
Oscar Bonilla 99 Universidad Galileo
Símbolos exportados por el compilador
Symbols from test.o:
[Index] Value Class Type Section Name
[0]| 0| File |ref=6 |Text | test.c
[1]| 0| Proc |end=3 int |Text | main
[2]| 56| Proc |end=5 int |Text | fib
[3]| 0| Global | |Bss | internal_var
[4]| 0| Proc |ref=1 |Text | main
[5]| 56| Proc |ref=3 |Text | fib
[6]| 0| Global | |Undefined| external_var
[7]| 0| Proc | |Undefined| foo
[8]| 0| Global | |Undefined| _gp_disp
![Page 100: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/100.jpg)
Oscar Bonilla 100 Universidad Galileo
Linker
• Ver todos los object files para encontrar símbolos no resueltos
• Hacer match de los símbolos y encontrar las partes necesarias en las librerías
• Layout en una sola imagen de memoria
• Resolver todos los nombres simbólicos a las direcciones correctas de memoria y offsets adecuados
![Page 101: Generación de Código No Optimizado](https://reader035.fdocuments.co/reader035/viewer/2022062314/56812aab550346895d8e70d9/html5/thumbnails/101.jpg)
Oscar Bonilla 101 Universidad Galileo
Lecturas
• Ballena– Capítulo 7
• Dragón (opcional)– Capítulo 9, 10.1, 10.2, 10.3, 10.4