1 / 101

Generación de Código No Optimizado

Generación de Código No Optimizado. De la Representación Intermedia a Código de Máquina. 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.

Download Presentation

Generación de Código No Optimizado

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Generación de Código No Optimizado De la Representación Intermedia a Código de Máquina

  2. 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 Oscar Bonilla2Universidad Galileo

  3. Programa (character stream) Token Stream Representación Intermedia Representación Intermedia Optimizada Código en Assembler Anatomía de un Compilador Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Arbol de Parseo Generador de Código Intermedio Optimizador de Código Intermedio Generador de Código Oscar Bonilla3Universidad Galileo

  4. Programa (character stream) Token Stream Código en Assembler Anatomía de un Compilador Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Arbol de Parseo Generador de Código Intermedio High-level IR Low-level IR Representación Intermedia Generador de Código Oscar Bonilla4Universidad Galileo

  5. Representación en Formato Intermedio while (i < v.length && v[i] != 0) { i = i+1; } entry cbr < ldl i len cbr ldf v != stl i 0 lda exit + ldf v ldl i ldl i 0 Oscar Bonilla5Universidad Galileo

  6. 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 Oscar Bonilla6Universidad Galileo

  7. 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 Oscar Bonilla7Universidad Galileo

  8. Resumen de un Procesador Moderno Memory • ALU • Control • Memoria • Registros Registers ALU Control Oscar Bonilla8Universidad Galileo

  9. Arithmetic and Logic Unit Memory • 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) Registers ALU Control Oscar Bonilla9Universidad Galileo

  10. Arithmetic and Logic Unit Memory • 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) Registers ALU Control Oscar Bonilla10Universidad Galileo

  11. Control Memory • 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 Registers ALU Control Oscar Bonilla11Universidad Galileo

  12. Control Memory • Saltos no condicionales • Fetch de la siguiente instrucción de una localidad diferente • Salto incondicional a una dirección dada j 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 labeljalr rsrc Registers ALU Control Oscar Bonilla12Universidad Galileo

  13. Control Memory • 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 Registers ALU Control Oscar Bonilla13Universidad Galileo

  14. Control Memory • 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 Registers ALU Control Oscar Bonilla14Universidad Galileo

  15. Memory Memory • Espacio de Direcciones plano • Compuesto de words • Direccionable por bytes • Necesitamos guardar • Programa • Variables locales • Stack • Heap Registers ALU Control Oscar Bonilla15Universidad Galileo

  16. Memory Memory Stack locales (parámetros) Registers ALU Objetos Control Heap Arrays Código Generado Oscar Bonilla16Universidad Galileo

  17. Registers Memory • 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 Registers ALU Control Oscar Bonilla17Universidad Galileo

  18. Otras Interacciones Memory • 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 Registers ALU Control Oscar Bonilla18Universidad Galileo

  19. 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 Oscar Bonilla19Universidad Galileo

  20. 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 Oscar Bonilla20Universidad Galileo

  21. 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 Oscar Bonilla21Universidad Galileo

  22. Programa (character stream) Token Stream Código en Assembler Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Arbol de Parseo Generador de Código Intermedio High-level IR Low-level IR Representación Intermedia Generador de Código Oscar Bonilla22Universidad Galileo

  23. Programa (character stream) Token Stream Código en Assembler Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Arbol de Parseo Generador de Código Intermedio High-level IR Low-level IR Representación Intermedia Generador de Código Assembler & linker Binario Ejecutable Procesador Oscar Bonilla23Universidad Galileo

  24. 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 Oscar Bonilla24Universidad Galileo

  25. 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 Oscar Bonilla25Universidad Galileo

  26. Ejemplo de Assembler item: .word 1 .text fib: subu $sp, 40 sw $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, $32 move $2, $0 b lab2 lab1: lw $15, 40($sp) bne $15, 1, $33 li $2, 1 b lab1 Oscar Bonilla26Universidad Galileo

  27. 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 Oscar Bonilla27Universidad Galileo

  28. 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 Oscar Bonilla28Universidad Galileo

  29. Layout de Memoria 0x7fffffff Stack • Inicio del Stack • Manejo del Heap • free lists • Posición de inicio en el segmento de texto locals (parameters) Objects Heap Arrays Text segment 0x400000 Reserved Oscar Bonilla29Universidad Galileo

  30. 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 Oscar Bonilla30Universidad Galileo

  31. 20 Registros • No es un registro, hard-wired a la constante 0 Oscar Bonilla31Universidad Galileo

  32. Registros • Return Address de una llamada (call) • Implicitamente copiada por jal y jalr Oscar Bonilla32Universidad Galileo

  33. Registros • Frame pointer • Stack pointer • Pointer to global area Oscar Bonilla33Universidad Galileo

  34. Registros • Reservado para uso del ensamblador • Se necesita almacenamiento para manejar instrucciones de assembler compuestas Oscar Bonilla34Universidad Galileo

  35. Registros • Retornan los resultados • Copiar el resultado cuando estamos listos para retornar • Usados para evaluar expresiones (si quieren) Oscar Bonilla35Universidad Galileo

  36. 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 Oscar Bonilla36Universidad Galileo

  37. Registros • El resto son temporales Oscar Bonilla37Universidad Galileo

  38. Registros • En una llamada a procedimiento los temporales: • Son guardados por el caller • Son guardados por el callee • Alguna combinación de ambos Oscar Bonilla38Universidad Galileo

  39. 21 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 Oscar Bonilla39Universidad Galileo

  40. Registros • En una llamada a procedimiento los temporales: • Son guardados por el caller • Son guardados por el callee • Alguna combinación de ambos Oscar Bonilla40Universidad Galileo

  41. 23 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 Oscar Bonilla41Universidad Galileo

  42. Stack ... argument 5 argument 4 fp old frame pointer return address • Dirección del n-ésimo argumento es -(n-4)*4*$fp • Variables locales son constantes positivas de $fp Calliee saved registers Local variables Stack temporaries Dynamic area sp Oscar Bonilla42Universidad Galileo

  43. 24 Stack ... argument 5 argument 4 fp old frame pointer return address • Al llamar un nuevo procedimiento Calliee saved registers Local variables Stack temporaries Dynamic area sp Oscar Bonilla43Universidad Galileo

  44. Stack ... argument 5 argument 4 fp old frame pointer return address • Al llamar un nuevo procedimiento, el caller: Calliee saved registers Local variables Stack temporaries Dynamic area sp Oscar Bonilla44Universidad Galileo

  45. Stack ... argument 5 argument 4 fp old frame pointer return address • Al llamar un nuevo procedimiento, el caller: • push de cualquier t0-t9 que tenga un valor importante al stack Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers sp Oscar Bonilla45Universidad Galileo

  46. Stack ... argument 5 argument 4 fp old frame pointer return address • 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 Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers arguments sp Oscar Bonilla46Universidad Galileo

  47. Stack ... argument 5 argument 4 fp old frame pointer return address • 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 Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers arguments sp Oscar Bonilla47Universidad Galileo

  48. sp 25 Stack ... argument 5 argument 4 fp old frame pointer return address • En el procedimiento, el calliee al principio: Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers arguments Oscar Bonilla48Universidad Galileo

  49. sp Stack ... argument 5 argument 4 old frame pointer return address • En el procedimiento, el calliee al principio : • copiar $sp a $fp Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers fp arguments Oscar Bonilla49Universidad Galileo

  50. sp Stack ... argument 5 argument 4 old frame pointer return address • En el procedimiento, el calliee al principio : • copiar $sp a $fp • push $fp al stack Calliee saved registers Local variables Stack temporaries Dynamic area Caller saved registers arguments fp old frame pointer Oscar Bonilla50Universidad Galileo

More Related