docente: carlos orlando claros vásquez unsaca - huacho facultad de ingenieria módulo: generación...

101
Docente: Carlos Orlando Claros Vásque UNSACA - HUACHO FACULTAD DE INGENIERIA FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Upload: hernando-cordoba

Post on 22-Jan-2016

217 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Docente: Carlos Orlando Claros Vásquez

UNSACA - HUACHO

FACULTAD DE INGENIERIAFACULTAD DE INGENIERIA

Módulo: Generación de Código No Optimizado

Page 2: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 2 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 3 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 4 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 5 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 6 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 7 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 8 UNSACA

Resumen de un Procesador Moderno

• ALU

• Control

• Memoria

• Registros

Memory

Registers ALU

Control

Page 9: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 9 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 10 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 11 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 12 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 13 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 14 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 15 UNSACA

Memory

• Espacio de Direcciones plano– Compuesto de words– Direccionable por bytes

• Necesitamos guardar– Programa– Variables locales– Stack– Heap

Memory

Registers ALU

Control

Page 16: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 16 UNSACA

Memory

Memory

Registers ALU

Control

Stack

Código Generado

HeapObjetos

Arrays

locales(parámetros)

Page 17: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 17 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 18 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 19 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 20 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 21 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 22 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 23 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 24 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 25 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 26 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 27 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 28 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 29 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 30 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 31 UNSACA

Registros

• No es un registro, hard-wired a la constante 0

0 zero hard-wired to zero

20

Page 32: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 32 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 33 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 34 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 35 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 36 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 37 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 38 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 39 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 40 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 41 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 42 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 43 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 44 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 45 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 46 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 47 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 48 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 49 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 50 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 51 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 52 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 53 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 54 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 55 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 56 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 57 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 58 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 59 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 60 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 61 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 62 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 63 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 64 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 65 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 66 UNSACA

Pregunta:

• ¿es necesario el $fp?

• ¿cuáles son las ventajas y desventajas de tener $fp?

30

Page 67: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 67 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 68 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 69 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 70 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 71 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 72 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 73 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 74 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 75 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 76 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 77 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 78 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 79 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 80 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 81 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 82 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 83 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 84 UNSACA

Template para ciclos while

while (test)body

Page 85: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 85 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 86 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 87 UNSACA

Pregunta:

• ¿Cuál es la template para?

dobody

while (test)

Page 88: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 88 UNSACA

Question:

• ¿Cuál es la template para?

dobody

while (test)

lab_begin:

<body>

<do test>

boper …, lab_begin

44

Page 89: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 89 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 90 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 91 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 92 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 93 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 94 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 95 UNSACA

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

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 96 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 97 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 98 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 99 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 100 UNSACA

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: Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 101 UNSACA

Lecturas

• Ballena– Capítulo 7

• Dragón (opcional)– Capítulo 9, 10.1, 10.2, 10.3, 10.4