-
Notifications
You must be signed in to change notification settings - Fork 2
/
anotacionesmariano
35 lines (21 loc) · 2.51 KB
/
anotacionesmariano
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Estas son algunas anotaciones en base a la lectura del libro que estoy haciendo. Tiene cosas que está bueno acordarse.
Capitulo 6
newFrame debe:
-> alocar los parametro de la funcion
-> implementar el view shift
Un frame guarda los siguientes secretos:
-> La localizacion de las variables y el acceso
-> Las instrucciones que implementan el view shift
-> El label de la funcion
El view shift se encarga por ejemplo de poner el fp = sp y sp = sp - K, guardar fp en memoria, etc
El level (translate) es la abstraccion de un nivel sintactico provisto por translate, cada level posee un frame.
Cosas que creo que están mal hechas:
-El acces de tigertrans deberia ser un level * frame.acces y VarEntry del enviroment deberia guardar solo un tigertrans.acces.
-El static link deberia estar implementado a nivel de tigertrans (este es un error muy leve porque seman y trans es solo para separar tareas de type checking y traduccion a codigo intermedio respectivamente) por ejemplo newlebel deberia añadirle el static link en los formals antes de crear el frame. Lo que si sería un error grave sería hacer cosas del static link en frame (ya que esto es una caracteristica del lenguaje tiger, no de la arquitectura).
Capítulo 7
MOVE( TEMP/MEM x, _ ) son las unicas opciones válidas. En este caso MEM tiene significado de store y no de fetch. Es por eso que no necesitamos tratar diferentemente l y r values.
Funciones procEntryExit (mi interpretacion):
procEntryExit: Pone el label de la funcion (de esto creo que deberia encarse la 3). Agrega esto junto al cuerpo de la funcion de datosGlobs. Está declarada en translate y debe ser llamada en Translate.functionDec
procEntryExit1: Esta declarada en el frame. Hace tareas correspondientes al prologo y epilogo de cada funcion: salvar los argumentos escapados, salvar y restaurar los callee-save registers. Se debe aplicar en Translate.functionDec
procEntryExit2: Está declarada en frame. Ver pag 208. Agrega una silly instruccion assembler (esto esta en seleccion deinstrucciones) al cuerpo de la funcion para decir que registros están vivos al finalizar la función (calleesaves por ejemplo).
procEntryExit3: Debería estar declarada en frame. Instrucciones para setear y resetear el stack pointer correctamente a la entrada y salida de cada funcion, colocar las pseudoinstrucciones de inicio y fin, colocar el label de cada funcion y ocuparse de la instruccion de return (ver pag 168 y 261). DUDA: no entiendo muy bien si tambien se deberia encargar del label, que se encarga en realidad procEntryExit.