Upload
others
View
5
Download
1
Embed Size (px)
Citation preview
Generación de código( desde Yacc/Bison para la máquina Q )
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.1 .
Notas preliminares
Generar código objeto directamente es más incómodo que
hacerlo desde una representación intermedia porque (1) ha de
adaptarse al momento justo del análisis y (2) a veces no se
dispone de toda la información apropiada.
Lo que se muestra a continuación son sólo ejemplos
ilustrativos: NO son la única posibilidad ni suponen una
implementación coherente pues (1) cada transparencia es
independiente y (2) se han obviado detalles por claridad.
No obstante, no hay grandes diferencias conceptuales entre
generar código para Q o para otra arquitectura (hardware).
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.2 .
Esquemas de traducción (1/2)
n + 5
n < 32 n =
do
inst
exp
condwhile inst
↓ L 4: // while: principio
↓ R0=I(0x11ff0); // n: carga
↓ R1=R0<32; // n<32
↓ IF(!R1) GT(5); // while: testa
↓ R0=I(0x11ff0); // n: carga
↓ R0=R0+5; // n+5
↓ I(0x11ff0)=R0; // n: almac.
↓ GT(4); // while: itera
↓ L 5: // while: salida
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.3 .
Esquemas de traducción (1/2)
n < 32 n =
do
inst
exp
condwhile inst
n + 5
↓ L 4: // while: principio
↓ R0=I(0x11ff0); // n: carga
↓ R1=R0<32; // n<32
↓ IF(!R1) GT(5); // while: test
↓ R0=I(0x11ff0); // n: carga
↓ R0=R0+5; // n+5
↓ I(0x11ff0)=R0; // n: almac.
↓ GT(4); // while: itera
↓ L 5: // while: salida
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.3 .
Esquemas de traducción (1/2)
n < 32 n =
do
inst
exp
condwhile inst
n + 5
↓ L 4: // while: principio
↓ R0=I(0x11ff0); // n: carga
↓ R1=R0<32; // n<32
↓ IF(!R1) GT(5); // while: test
↓ R0=I(0x11ff0); // n: carga
↓ R0=R0+5; // n+5
↓ I(0x11ff0)=R0; // n: almac.
↓ GT(4); // while: itera
↓ L 5: // while: salida
inst : while cond do inst ;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.3 .
Esquemas de traducción (1/2)
n < 32 n =
do
inst
exp
condwhile inst
n + 5
↓ L 4: // while: principio
↓ R0=I(0x11ff0); // n: carga
↓ R1=R0<32; // n<32
↓ IF(!R1) GT(5); // while: test
↓ R0=I(0x11ff0); // n: carga
↓ R0=R0+5; // n+5
↓ I(0x11ff0)=R0; // n: almac.
↓ GT(4); // while: itera
↓ L 5: // while: salida
inst : while {$$=ne(); gc("L %d:\n",$$);}cond do {$$=ne(); gc("\tIF(!R%d) GT(%d);\n",$3,$$);}inst {gc("\tGT(%d);\nL %d:\n",$2,$5);}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.3 .
Esquemas de traducción (2/2)
do
inst
condwhile inst
docondwhile inst
break
↓ L 4: // while: princ.
↓ · · ·↓ IF(!R1) GT(5); // while: test
↓ L 6: // while: princ.
↓ · · ·↓ IF(!R1) GT(7); // while: test
↓ GT(7); // break
↓ GT(6); // while: itera
↓ L 7: // while: salida
↓ GT(4); // while: itera
↓ L 5: // while: salida
inst : while {$$=ec; ec=ne(); gc("L %d:\n",ec);}cond do {$$=eb; eb=ne(); gc("\tIF(!R%d) GT(%d);\n",$3,eb);}inst {gc("\tGT(%d);\nL %d:\n",ec,eb); ec=$2; eb=$5);}
| break {if(eb) gc("\tGT(%d);\n",eb); else err(21);}
| continue {if(ec) gc("\tGT(%d);\n",ec); else err(22);}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.4 .
Declaraciones estáticas
j, = 2
;vars
vars
iint
decl
vars decl;
vars
decl
decl
char c
;
double x
MEM(0x11ffc,4); // i
DAT(0x11ff8,I,2); // j
MEM(0x11ff7,1); // c
MEM(0x11fec,8); // x
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.5 .
Declaraciones estáticas
j, = 2
Z=0x12000
0x11ffc
R7=0x11fec
0x11ff7
x
jc
i
0x11ff8
;vars
vars
iint
decl
vars decl;
vars
decl
decl
char c
;
double x
MEM(0x11ffc,4); // i
DAT(0x11ff8,I,2); // j
MEM(0x11ff7,1); // c
MEM(0x11fec,8); // x
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.5 .
Declaraciones estáticas
j, = 2
Z=0x12000
0x11ffc
R7=0x11fec
0x11ff7
x
jc
i
0x11ff8
;vars
vars
iint
decl
vars decl;
vars
decl
decl
char c
;
double x
MEM(0x11ffc,4); // i
DAT(0x11ff8,I,2); // j
MEM(0x11ff7,1); // c
MEM(0x11fec,8); // x
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.5 .
Declaraciones estáticas
j, = 2
;vars
vars
iint
decl
vars decl;
vars
decl
decl
char c
;
double x
MEM(0x11ffc,4); // i
DAT(0x11ff8,I,2); // j
MEM(0x11ff7,1); // c
MEM(0x11fec,8); // x
decl : vars ’;’ decl | ;
vars : tipo id | vars ’,’ id ’=’ cte ;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.5 .
Declaraciones estáticas
j, = 2
;vars
vars
iint
decl
vars decl;
vars
decl
decl
char c
;
double x
MEM(0x11ffc,4); // i
DAT(0x11ff8,I,2); // j
MEM(0x11ff7,1); // c
MEM(0x11fec,8); // x
decl : vars ’;’ decl | ;
vars : tipo id {unsigned int dir=alin(&estat,$1);
ts($2,VAR,EST,$1,dir);
gc("\tMEM(0x%x,%d);\n",dir,bytes($1)); $$=$1;}
| vars ’,’ id ’=’ cte {unsigned int dir=alin(&estat,$1);
ts($3,VAR,EST,$1,dir);
gc("\tDAT(0x%x,%c,%d);\n",dir,inic($1),$5); $$=$1;}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.5 .
Expresiones simples
i =
i
exp exp
+exp
2
exp
j
*
exp
;
inst
R0=0x11ffc; // &i
R1=2; // 2
R2=I(0x11ffc); // i
R3=I(0x11ff8); // j
R2=R2*R3; // i*j
R1=R1+R2; // 2+i*j
I(R0)=R1; // i=2+i*j
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.6 .
Expresiones simples
i =
i
exp exp
+exp
2
exp
j
*
exp
;
inst
R0=0x11ffc; // &i
R1=2; // 2
R2=I(0x11ffc); // i
R3=I(0x11ff8); // j
R2=R2*R3; // i*j
R1=R1+R2; // 2+i*j
I(R0)=R1; // i=2+i*j
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.6 .
Expresiones simples
i =
i
exp exp
+exp
2
exp
j
*
exp
;
inst
R0=0x11ffc; // &i
R1=2; // 2
R2=I(0x11ffc); // i
R3=I(0x11ff8); // j
R2=R2*R3; // i*j
R1=R1+R2; // 2+i*j
I(R0)=R1; // i=2+i*j
inst : var ’=’ exp ’;’ ;
exp : exp ’+’ exp
| exp ’*’ exp
| cte
| var
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.6 .
Expresiones simples
i =
i
exp exp
+exp
2
exp
j
*
exp
;
inst
R0=0x11ffc; // &i
R1=2; // 2
R2=I(0x11ffc); // i
R3=I(0x11ff8); // j
R2=R2*R3; // i*j
R1=R1+R2; // 2+i*j
I(R0)=R1; // i=2+i*j
inst : var ’=’ {$$=asig_reg(); gc("\tR%d=0x%x;\n",$$,$1);}exp ’;’ {gc("\tI(R%d)=R%d;\n,$3,$4); lib_regs();}
;
exp : exp ’+’ exp {$$=$1; gc("\tR%d=R%d+R%d;\n",$1,$1,$3); lib_reg($3);}
| exp ’*’ exp {$$=$1; gc("\tR%d=R%d*R%d;\n",$1,$1,$3); lib_reg($3);}
| cte {$$=asig_reg(); gc("\tR%d=%s;\n",$$,$1);}| var {$$=asig_reg(); gc("\tR%d=I(0x%x);\n",$$,$1);};
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.6 .
Entrada/salida con Qlib (1/2)
i − 5
inst
writeln ( exp );
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
STAT(0)STR(0x11ff3,"%d\n");· · ·
CODE(0)· · ·R7=R7-12; // pila param.P(R7+8)=0x11ff3; // par. &"%d\n"R0=I(0x11ffc); // iR1=5; // 5R0=R0-R1; // i-5I(R7+4)=R0; // par. i-5I(R7)=10; // etiq. ret.GT(-12); // putf_()
L 10: R7=R7+12; // lib. param.
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.7 .
Entrada/salida con Qlib (1/2)
inst
writeln ( exp );
i − 5
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
STAT(0)STR(0x11ff3,"%d\n");· · ·
CODE(0)· · ·R7=R7-12; // pila param.P(R7+8)=0x11ff3; // par. &"%d\n"R0=I(0x11ffc); // iR1=5; // 5R0=R0-R1; // i-5I(R7+4)=R0; // par. i-5I(R7)=10; // etiq. ret.GT(-12); // putf_()
L 10: R7=R7+12; // lib. param.
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.7 .
Entrada/salida con Qlib (1/2)
inst
writeln ( exp );
i − 5
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
STAT(0)STR(0x11ff3,"%d\n");· · ·
CODE(0)· · ·R7=R7-12; // pila param.P(R7+8)=0x11ff3; // par. &"%d\n"R0=I(0x11ffc); // iR1=5; // 5R0=R0-R1; // i-5I(R7+4)=R0; // par. i-5I(R7)=10; // etiq. ret.GT(-12); // putf_()
L 10: R7=R7+12; // lib. param.
inst : writeln ’(’ exp ’)’ ’;’ ;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.7 .
Entrada/salida con Qlib (1/2)
inst
writeln ( exp );
i − 5
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
STAT(0)STR(0x11ff3,"%d\n");· · ·
CODE(0)· · ·R7=R7-12; // pila param.P(R7+8)=0x11ff3; // par. &"%d\n"R0=I(0x11ffc); // iR1=5; // 5R0=R0-R1; // i-5I(R7+4)=R0; // par. i-5I(R7)=10; // etiq. ret.GT(-12); // putf_()
L 10: R7=R7+12; // lib. param.
inst : writeln ’(’
{gc("\tR7=R7-12;\n\tP(R7+8)=0x%x;\n",fmt_wrtln);}exp ’)’ ’;’
{$$=ne(); lib_regs();
gc("\tI(R7+4)=R%d;\n\tI(R7)=%d;\n\tGT(-12);\n\tL %d:\tR7=R7+12;\n",$4,$$,$$);}
; Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.7 .
Entrada/salida con Qlib (2/2)
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a
0x00
R7
valor
ret.etiq.
R7+4
&I(R7+4) 0x020x000x000x00
En general, tanto en Q como en C,para el tipo de datos T,
T(dir. Q)nos da el valor correcto, p.e.:
I(R7+4) == 2
Y en general podremos obtener ladirección C con &:
&T(dir. Q) == dir. Cp.e.:scanf("%d%o",&I(R7+4),&R5);
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.8 .
Entrada/salida con Qlib (2/2)
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
+1+2+3dir. C
dir. Q
+1+2+3
// Qlib.c BIBLIOTECA DE Q
· · ·L -12: {//entre llaves por usar variable local p
char *p=inv_str(&U(P(R7+8))); // invierte
printf(p,I(R7+4)); // traslada
reinv_str(p,&U(P(R7+8))); // re-invierte
GT(P(R7)); // retorna
}
· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.8 .
Entrada/salida con Qlib (2/2)
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
+1+2+3dir. C
dir. Q&U
+1+2+3
// Qlib.c BIBLIOTECA DE Q
· · ·L -12: {//entre llaves por usar variable local p
char *p=inv_str(&U(P(R7+8))); // invierte
printf(p,I(R7+4)); // traslada
reinv_str(p,&U(P(R7+8))); // re-invierte
GT(P(R7)); // retorna
}
· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.8 .
Entrada/salida con Qlib (2/2)
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
+1+2+3
dir. Q
dir. C+1+2+3
’%’
’\0’
’d’’\n’
p =
&U
// Qlib.c BIBLIOTECA DE Q
· · ·L -12: {//entre llaves por usar variable local p
char *p=inv_str(&U(P(R7+8))); // invierte
printf(p,I(R7+4)); // traslada
reinv_str(p,&U(P(R7+8))); // re-invierte
GT(P(R7)); // retorna
}
· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.8 .
Entrada/salida con Qlib (2/2)
’\0’’\n’’d’’%’
0xf30x1f0x01
0x000x000x000x0a0x000x000x000x020x00
R7
valor
ret.etiq.
+1+2+3dir. C
dir. Q&U
p =+1+2+3
// Qlib.c BIBLIOTECA DE Q
· · ·L -12: {//entre llaves por usar variable local p
char *p=inv_str(&U(P(R7+8))); // invierte
printf(p,I(R7+4)); // traslada
reinv_str(p,&U(P(R7+8))); // re-invierte
GT(P(R7)); // retorna
}
· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.8 .
Pila de registros de activación
estát.datos
par. main
loc. main
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
par. rut [1]
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
par. rut
loc. rut
[1]
[1]
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
par. rut
par. rut
loc. rut
[1]
[1]
[2]
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
par. rut
par. rut
loc. rut
loc. rut
[1]
[1]
[2]
[2]
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
par. rut
loc. rut
[1]
[1]
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Pila de registros de activación
estát.datos
par. main
loc. main
Z
R7
R6
var ...
rut(par) {
loc ...
rut(..);
}
main(par) {
loc ...
rut(..);
}
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.9 .
Procedimientos (1/3)
n
m
k
10
20
−1
R7
R6
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
R7
n
m
k
10
20
−1
R6
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
ret.R7etiq.
enlacedinám.
par. i
par. j
n
m
k
10
20
22
3
−1
R6
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
ret.R7etiq.
par. i
par. j
n
m
k
10
20
22
3
−1
R6=
enlacedinám.
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
ret.R7etiq.
par. i
par. j
n
m
k
10
20
3
−1
9
R6=
enlacedinám.
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
ret.R7etiq.
par. i
par. j
n
m
k
10
20
3
−1
9
R6
enlacedinám.
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (1/3)
n
m
k
10
20
−1
R7
R6
program P;
var k:int;
proced R
(i:int;
var j:int)
begin
i := k+j;
end
proced Q()
var n,m:int;
begin
· · ·R(n+2,m);
· · ·
STAT(0)MEM(0x11ffc,4);// k
CODE(0)// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.10 .
Procedimientos (2/3)
endinstsbeginlocs)forms(idproced
proc
proc : proced id ’(’ forms ’)’ locs begin insts end ;
forms : paso id ’:’ tipo ’;’ forms | ;
paso : var | ;
locs : var vars locs | ;
vars : id ’:’ tipo ’;’ | id ’,’ vars ;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.11 .
Procedimientos (2/3)
forms
paso i:int ;
j:int ;paso
forms
forms
var
proc
instslocsproced R ( ) begin end
// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
proc : proced id ’(’ {param=8; local=0;}
forms ’)’ locs begin
{$$=ne(); ts($2,PROC,$$,alinp(¶m,0),$5);
gc("L %d:\tR6=R7;\n\tR7=R7-%d",$$,$7);}insts {gc("\tR7=R6;\n\tR6=P(R7+4);\n\tR5=P(R7);\n\tGT(R5);\n");}end
;Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.11 .
Procedimientos (2/3)
paso i:int ;
j:int ;paso
forms
forms
forms
var
proc
begin insts endlocs)(Rproced
// proced RL 1: R6=R7; // nva base
R7=R7-0; // localesR0=R6+8; // &iR1=I(0x11ffc); // kR2=P(R6+12); // &jR2=I(R2); // jR1=R1+R2; // k+jI(R0)=R1; // i=k+jR7=R6; // lib localesR6=P(R7+4); // recup baseR5=P(R7); // etiq retGT(R5); // retorna
forms : paso id ’:’ tipo ’;’ {$$=alinp(¶m,$4);}
forms {$$=ts($2,PAR,$1,$4,$6,$7);}
| {$$=NIL;}
;
paso : var {$$=REF;}
| {$$=VAL;}
;Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.11 .
Procedimientos (3/3)
vars
vars
:m int ;
,n
var
proc
proced Q ( ) begin endlocsforms
locs
insts
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
locs : var vars locs | ;
vars : id ’:’ tipo ’;’ {ts($1,VAR,LOC,$3,alin(&local,$3); $$=$3;}
| id ’,’ vars {ts($1,VAR,LOC,$3,alin(&local,$3); $$=$3;}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.12 .
Procedimientos (3/3)
;actsR
,acts
proc
proced Q ( ) begin endforms insts
)(
locs
exp
exp
n+2
m
// proced QL 2: · · ·
R7=R7-16; // paramR0=I(R6-8); // nR0=R0+2; // n+2I(R7+8)=R0; // par 1oR0=R6-4; // &mI(R7+12)=R0; // par 2oP(R7+4)=R6; // base actP(R7)=3; // etiq retGT(1); // invoca R
L 3: R7=R7+16; // lib param· · ·
inst : id ’(’ { gc("\tR7=R7-%d;\n",tam_par($1)); $$=par($1);} acts ’)’
{$$=ne(); gc("\tP(R7+4)=R6;\n\tP(R7)=%d;\n\tGT(%d);\nL %d:\t\R7=R7+%d;\n",$$,etiq($1),$$,tam_par($1));} ’;’ ;
acts : exp {gc("\tI(R7+%d)=$1;\n",dir_par($0)); $$=sig_par($0);}
| acts ’,’ exp {gc("\tI(R7+%d)=$1;\n",dir_par($1)); $$=sig_par($1);}
; Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.12 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0 R6
R7
Z
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R6
R7
Z
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R6
R7
Z
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R6R7
Z
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R6
R7
Z
P1
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R6
R7
Z
P2
P1
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R7R6
Z
P3
P2
P1
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R7
R6
Z
P3
P2
P1
P3
P2
P1
P0
Q2
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R7
R6
Z
P2
P3
P2
P1
P3
P2
P1
P0
Q2
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R7R6
Z
P3
P2
Q2
P3
P2
P1
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (1/3)
P2
P3
Q2
P1
P0
R7R6
Z
P3
P3
P2
Q2
P3
P2
P1
P3
P2
P1
P0
program P0;
1→ var ...
1→ procedure P1;
1→ 2→ var ...
1→ 2→ procedure Q2; forward;
1→ 2→ procedure P2;
1→ 2→ 3→ var ...
1→ 2→ 3→ procedure P3;
1→ 2→ 3→ 4→ var ...
1→ 2→ 3→ 4→ begin ... end;
1→ 2→ 3→ begin ... end;
1→ 2→ procedure Q2;
1→ 2→ 3→ var ...
1→ 2→ 3→ begin ... end;
1→ 2→ begin ... end;
1→ begin ... end.Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.13 .
Rutinas locales (2/3)
ret.etiq.
i10
j
9
R7−2
R6
enlaceestát.enlacedinám.
· · ·procedure P1;
var i:integer;
procedure Q2;
forward;
procedure P2;
var j:integer;
procedure P3;
begin{P3}
· · ·i := j;
Q2;
end{P3};
begin{P2}
· · ·j := -2;
P3;
· · ·end{P2};
begin{P1}
· · ·
// procedure P3L 4: R6=R7; // nva base
R7=R7-0; // locales· · ·R0=P(R6+8); // P2R0=P(R0+8); // P1R0=R0-4; // &i en P1R1=P(R6+8); // P2R1=I(R1-4); // j en P2I(R0)=R1; // i=j;R7=R7-12; // paramR0=P(R6+8); // P2R0=P(R0+8); // P1P(R7+8)=R0; // enl estátP(R7+4)=R6; // base actP(R7)=5; // etiq retGT(2); // invoca Q2
L 5: · · ·// procedure P2L 3: · · ·
P(R0)=-2; // j=-2R7=R7-12; // paramP(R7+8)=R6; // enl estátP(R7+4)=R6; // base actP(R7)=7; // etiq retGT(4); // invoca P3
L 7: · · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.14 .
Rutinas locales (2/3)
ret.etiq.
ret.etiq.
i10
j
9
7R7
−2R6
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
· · ·procedure P1;
var i:integer;
procedure Q2;
forward;
procedure P2;
var j:integer;
procedure P3;
begin{P3}
· · ·i := j;
Q2;
end{P3};
begin{P2}
· · ·j := -2;
P3;
· · ·end{P2};
begin{P1}
· · ·
// procedure P3L 4: R6=R7; // nva base
R7=R7-0; // locales· · ·R0=P(R6+8); // P2R0=P(R0+8); // P1R0=R0-4; // &i en P1R1=P(R6+8); // P2R1=I(R1-4); // j en P2I(R0)=R1; // i=j;R7=R7-12; // paramR0=P(R6+8); // P2R0=P(R0+8); // P1P(R7+8)=R0; // enl estátP(R7+4)=R6; // base actP(R7)=5; // etiq retGT(2); // invoca Q2
L 5: · · ·// procedure P2L 3: · · ·
P(R0)=-2; // j=-2R7=R7-12; // paramP(R7+8)=R6; // enl estátP(R7+4)=R6; // base actP(R7)=7; // etiq retGT(4); // invoca P3
L 7: · · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.14 .
Rutinas locales (2/3)
ret.etiq.
ret.etiq.
i10
j
9
7
−2
R7R6=
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
· · ·procedure P1;
var i:integer;
procedure Q2;
forward;
procedure P2;
var j:integer;
procedure P3;
begin{P3}
· · ·i := j;
Q2;
end{P3};
begin{P2}
· · ·j := -2;
P3;
· · ·end{P2};
begin{P1}
· · ·
// procedure P3L 4: R6=R7; // nva base
R7=R7-0; // locales· · ·R0=P(R6+8); // P2R0=P(R0+8); // P1R0=R0-4; // &i en P1R1=P(R6+8); // P2R1=I(R1-4); // j en P2I(R0)=R1; // i=j;R7=R7-12; // paramR0=P(R6+8); // P2R0=P(R0+8); // P1P(R7+8)=R0; // enl estátP(R7+4)=R6; // base actP(R7)=5; // etiq retGT(2); // invoca Q2
L 5: · · ·// procedure P2L 3: · · ·
P(R0)=-2; // j=-2R7=R7-12; // paramP(R7+8)=R6; // enl estátP(R7+4)=R6; // base actP(R7)=7; // etiq retGT(4); // invoca P3
L 7: · · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.14 .
Rutinas locales (2/3)
ret.etiq.
ret.etiq.
ret.etiq.
i−2
j
R7
9
7
5
−2
R6
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
· · ·procedure P1;
var i:integer;
procedure Q2;
forward;
procedure P2;
var j:integer;
procedure P3;
begin{P3}
· · ·i := j;
Q2;
end{P3};
begin{P2}
· · ·j := -2;
P3;
· · ·end{P2};
begin{P1}
· · ·
// procedure P3L 4: R6=R7; // nva base
R7=R7-0; // locales· · ·R0=P(R6+8); // P2R0=P(R0+8); // P1R0=R0-4; // &i en P1R1=P(R6+8); // P2R1=I(R1-4); // j en P2I(R0)=R1; // i=j;R7=R7-12; // paramR0=P(R6+8); // P2R0=P(R0+8); // P1P(R7+8)=R0; // enl estátP(R7+4)=R6; // base actP(R7)=5; // etiq retGT(2); // invoca Q2
L 5: · · ·// procedure P2L 3: · · ·
P(R0)=-2; // j=-2R7=R7-12; // paramP(R7+8)=R6; // enl estátP(R7+4)=R6; // base actP(R7)=7; // etiq retGT(4); // invoca P3
L 7: · · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.14 .
Rutinas locales (2/3)
ret.etiq.
ret.etiq.
ret.etiq.
i−2
j
R7
9
7
5
−2
R6
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
enlaceestát.enlacedinám.
· · ·procedure P1;
var i:integer;
procedure Q2;
forward;
procedure P2;
var j:integer;
procedure P3;
begin{P3}
· · ·i := j;
Q2;
end{P3};
begin{P2}
· · ·j := -2;
P3;
· · ·end{P2};
begin{P1}
· · ·
// procedure P3L 4: R6=R7; // nva base
R7=R7-0; // locales· · ·R0=P(R6+8); // P2R0=P(R0+8); // P1R0=R0-4; // &i en P1R1=P(R6+8); // P2R1=I(R1-4); // j en P2I(R0)=R1; // i=j;R7=R7-12; // paramR0=P(R6+8); // P2R0=P(R0+8); // P1P(R7+8)=R0; // enl estátP(R7+4)=R6; // base actP(R7)=5; // etiq retGT(2); // invoca Q2
L 5: · · ·// procedure P2L 3: · · ·
P(R0)=-2; // j=-2R7=R7-12; // paramP(R7+8)=R6; // enl estátP(R7+4)=R6; // base actP(R7)=7; // etiq retGT(4); // invoca P3
L 7: · · ·
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.14 .
Rutinas locales (3/3)
repetirn− p− 1veces Ri=P(Ri+8);
Ri=P(R6+8);
· · ·Ri=P(Ri+8);
// r.a. nivel n− 1// r.a. nivel n− 2
// r.a. nivel p· · ·
Código de nivel n para obtener la base del registrode activación de nivel p:
n = p: ya en R6
n > p:
Alternativa: pila-vector de enlaces (display)
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.15 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);R7
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;R0=d;I(R7)=R0;R7=R7−4;R2=c;R1=b;R0=&a;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&aR7
R0R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;R0=d;I(R7)=R0;R7=R7−4;R2=c;R1=b;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&aR7
bR1
R0R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;R0=d;I(R7)=R0;R7=R7−4;R2=c;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&aR7
b
cR2
R1
R0R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;R0=d;I(R7)=R0;R7=R7−4;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
cR2
R1R7
R0=d;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;R7=R7−4;I(R7)=R0;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
dR0
R2
R1R7R2=R2*R0;
R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R7=R7−4;I(R7)=R0;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;R1=e;I(R7)=R1;R7=R7−4;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
dR0
R2R7
R1=e;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d
e
R0
R1
R2R7
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;R2=f;I(R7)=R2;R7=R7−4;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d
e
R0
R1
R7
R2=f;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d
e
f
R0
R1
R2
R7
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d
e*f
R0
R1
R7
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R7=R7+4;R2=I(R7);R0=R0+R1;R1=R1*R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d+e*fR0R7
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R7=R7+4;R2=I(R7);
R1=R1*R2;R0=R0+R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c
d+e*fR0
R2R7
R2=I(R7);R7=R7+4;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)R2R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)R2
R0 g
R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)R2
R0 g
R1 h
R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)
R0 g
R1 h
R7
R2=i;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)
R0 g
R1 h
R2 i
R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)
R0 g
R1 h*i
R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)
R0 g+h*iR7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)
R0 g+h*i
R2R7
R2=I(R7);R7=R7+4;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)*(g+h*i)R2R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b
c*(d+e*f)*(g+h*i)R2
R7R1
R1=I(R7);R7=R7+4;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&a
b+c*(d+e*f)*(g+h*i)R1R7R0=&a;
R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;
R0=I(R7);
I(R0)=R1;R7=R7+4;
R1=I(R7);R7=R7+4;R1=R1+R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);
&aR7
b+c*(d+e*f)*(g+h*i)R1
R0
R7=R7+4;
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;
I(R0)=R1;
R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Derramado de registros
a=b+c*(d+e*f)*(g+h*i);R7
R0=&a;R1=b;R2=c;
R0=d;
R1=e;
R2=f;
R7=R7−4;I(R7)=R0;
R7=R7−4;I(R7)=R1;
R7=R7−4;I(R7)=R2;
R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;
R2=R2*R0;R0=g;R1=h;R7=R7−4;I(R7)=R2;R2=i;R1=R1*R2;R0=R0+R1;R2=I(R7);R7=R7+4;R2=R2*R0;R1=I(R7);R7=R7+4;R1=R1+R2;R0=I(R7);R7=R7+4;I(R0)=R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.16 .
Salvado de registros
return a+b*( d+e*(f+g)c +h*i);
R7
z( , )
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R6
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
return a+b*( d+e*(f+g)c +h*i);
R7R0 a
z( , )
R6
R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
return a+b*( d+e*(f+g)c +h*i);
a
bR1
R0R7
z( , )
R6
R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
a
bR7
return a+b*( d+e*(f+g)c +h*i);
R6
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
R0 c
R6
R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
R6
R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
R6
R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d; R0
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e
R6
R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d; R0R1=e;
R1
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e
f
R6
R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d; R0R1=e;
R1R2=f;
R2
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e
f
R6
R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;
R1R2=f;
R2R7=R7−4;I(R7)=R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e
f
g
R6
R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;
R1R2=f;
R2R7=R7−4;I(R7)=R0;R0=g;
R0
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e
f+g
R6
R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;
R1R2=f;
R0R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e*(f+g)
R6
R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;
R0R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d
e*(f+g)
R6
R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;
R0R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;
R1
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d+e*(f+g)
R6R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;
R0
R0=R1+R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d+e*(f+g)
R6
R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d+e*(f+g)
enl. est.
etiq. ret.2
R6
GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d+e*(f+g)
enl. est.
etiq. ret.2
reg. act. z()
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);
R6
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
c
d+e*(f+g)
enl. est.
etiq. ret.2
R6
GT(1);
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
L 2: R7=R7+16;
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))
R6
R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))
h
R6
R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0R1=h;
R1
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))
h
i
R6
R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0R1=h;
R1
R2=i;
R2
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))
h*i
R6
R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0R1=h;
R1
R2=i;R1=R1*R2;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))+h*i
R6
R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0R1=h;R2=i;R1=R1*R2;R0=R0+R1;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7a
b
return a+b*( d+e*(f+g)c +h*i);
z(c,d+e*(f+g))+h*i
R6
R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:
R0R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;
R1
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7a
return a+b*( d+e*(f+g)c +h*i);
b*(z(c,d+e*(f+g))+h*i)
R6
R1=I(R7);R7=R7+4;R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;
R0
R0=R1*R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7a
return a+b*( d+e*(f+g)c +h*i);
b*(z(c,d+e*(f+g))+h*i)
R6
R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;
R0
R0=R1*R0;R1=I(R7);R7=R7+4;
R1
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
R7
return a+b*( d+e*(f+g)c +h*i);
a+b*(z(c,d+e*(f+g))+h*i)
R6
R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;
R0
R0=R1+R0;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
return a+b*( d+e*(f+g)c +h*i);
a+b*(z(c,d+e*(f+g))+h*i)
R6
R6=P(R7+4);R5=P(R7);GT(R5);
R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;
R0
R0=R1+R0;R7=R6;
R7=
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Salvado de registros
return a+b*( d+e*(f+g)c +h*i);
a+b*(z(c,d+e*(f+g))+h*i)
R7R0=a;R1=b;R7=R7−4;I(R7)=R0;R7=R7−4;I(R7)=R1;
, )z(
R0=c;R7=R7−4;I(R7)=R0;R0=d;R1=e;R2=f;R7=R7−4;I(R7)=R0;R0=g;R0=R2+R0;R0=R1*R0;R1=I(R7);R7=R7+4;R0=R1+R0;
R7=R7−4;I(R7)=R0;R7=R7−8;P(R7+4)=R6;P(R7)=2;GT(1);R7=R7+16;L 2:R1=h;R2=i;R1=R1*R2;R0=R0+R1;R1=I(R7);R7=R7+4;R0=R1*R0;R1=I(R7);R7=R7+4;
R0
R0=R1+R0;R7=R6;R6=P(R7+4);R5=P(R7);GT(R5);
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.17 .
Gestión de registros
Estructura global enlazando pila de registros ocupados:int ult(): Devuelve i en cima
int nvo(): Si pila llena, genera R7=R7-4;I(R7)=Rk; para k en fondo, que se extrae. Push de klibre. Devuelve k
op(char *x): Pop da j. Si queda vacía, generaRi=I(R7); R7=R7+4; t.q. i 6= j; si no, otro pop da i.Push de k libre. Genera Rk=RixRj;
vac(char b): Si b, genera salvado. Vacía la pila
k = 0 si R0 libre (asegura resultado último en R0).Innecesario pasar registros en $$.Registros de distintos tipos: ¡“heap” local en lugar de pila!
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.18 .
Formaciones [arrays] (1/2)
&V[i]
&V[a] = &V
&V[0] = &V0
&V[b]
t
Vectores
V[a:b] of T
t = tam_alin(T)
&V0 = &V− a× t
&V[i] = &V0 + i× t
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.19 .
Formaciones [arrays] (1/2)
&M[i1, i2]
&M[i1, a2]
&M[i1, 0]
&M[i1, b2]
&M[b1, b2]
&M = &M[a1, a2]
&M0 = &M[0, 0]
t1 t2
Matrices por filas [row-major]
M[a1:b1,a2:b2] of T
t1 = t× (b2 − a2 + 1)
t2 = t
&M0 = &M− a1t1 − a2t2
&M[i1, i2] = &M0 + i1t1 + i2t2
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.19 .
Formaciones [arrays] (1/2)
Caso general: n dimensiones por “filas”
F[a1:b1,· · ·,an:bn] of T
tn = t tk = tk+1 × (bk+1 − ak+1 + 1)
&F0 = &F−n∑
k=1
aktk
&F[i1, · · · , in] = &F0 +n∑
k=1
iktk
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.19 .
Formaciones [arrays] (2/2)
int m[5,10];· · ·m[i,j+1]=-1;
FIL(0x11f38,200,0); // int m[5,10]...R0=I(0x11ffc); // iR0=R0*40; // vector 1oR1=I(0x11ff8); // jR1=R1+1; // j+1R1=R1*4; // vector 2oR0=R0+R1; // posic [i,j+1]R0=R0+0x11f38; // &m[i,j+1]I(R0)=-1; // m[..]=-1;
vars : tip id ’[’ {tp=$1;} rangs ’]’ ’;’
{unsigned int dir=alin(&estat,$5); ts($2,VAR,EST,$5,dir);
gc("\tFIL(0x%x,%d,0);\n",dir,bytes($5));};
rangs : cte {$$=ts(_,TIP,VECT,tp,$1*bytes(tp));}
| cte ’,’ rangs {$$=ts(_,TIP,VECT,$3,$1*bytes($3));}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.20 .
Formaciones [arrays] (2/2)
int m[5,10];· · ·m[i,j+1]=-1;
FIL(0x11f38,200,0); // int m[5,10]...R0=I(0x11ffc); // iR0=R0*40; // vector 1oR1=I(0x11ff8); // jR1=R1+1; // j+1R1=R1*4; // vector 2oR0=R0+R1; // posic [i,j+1]R0=R0+0x11f38; // &m[i,j+1]I(R0)=-1; // m[..]=-1;
acc : id ’[’ inds ’]’ {gc("\tR%d=R%d+0x%x\n",ult(),ult(),dir($1));} ;
inds : exp
{$$=elem(tipo($-1)); gc("\tR%d=R%d*%d\n",ult(),ult(),bytes($$));}| inds ’,’ exp
{$$=elem($1); gc("\tR%d=R%d*%d\n",ult(),ult(),bytes($$)); op("+");}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.20 .
Registros y uniones
c CMP 0
i CMP 0d CMP 0u TIP UN 8v CMP 4j CMP 12s TIP ST 16t VAR 0x11ff0
struct s {
char c;
union u {
int i;
double d;
} v;
int j;
} t;
· · ·t.v.i=-1;
FIL(0x11ff0,16,0); // t...R0=0x11ff4; // &t.v.iI(R0)=-1; t.v.i=-1;
tipo : su id ’{’ {$$=0;} campos ’}’ {$$=ts($2,TIP,$1,$4,$5);} ;
su : STRUCT {$$=ST;} | UNION {$$=UN;} ;
campos : {$$=NULL;} campo {$$=$2;} | campos campo {$$=$2;} ;
campo : tipo id ’;’ {if ($-4==UN) if (bytes($1)>$-1) $-1=bytes($1);
$$=ts($2,CMP,$1,($-4==UN)?0:alinp(&$-1,$1),$0);}
;Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.21 .
Registros y uniones
c
i
j
svd
&t=0x11ff0
struct s {
char c;
union u {
int i;
double d;
} v;
int j;
} t;
· · ·t.v.i=-1;
FIL(0x11ff0,16,0); // t...R0=0x11ff4; // &t.v.iI(R0)=-1; t.v.i=-1;
acc : id sel {gc("\tR%d=0x%x\n",nvo(),dir($1)+$2.pos);} ;
sel : sel ’.’ id {$$.ts=tc($1.ts,$3); $$.pos=$1.pos+dir($$.ts);}
| {$$.ts=tipo($0); $$.pos=0;}
;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.21 .
Punteros y variables dinámicas
p: ptr int;new(p);· · ·pˆ:=-1;
R7=R7-8; // parámsI(R7+4)=4; // 4 bytesP(R7)=5; // dir. ret.GT(-11); // invoca new()
L 5: R7=R7+8; // liberaP(R6+8)=R0; // p...R0=P(R6+8); // pI(R0)=-1; // pˆ=-1
vars : id ’:’ PTR tip ’;’
{int d=alin(&local,$$=ts(_,TIP,PTR,$4,4)); ts($1,VAR,LOC,$$,d);}
;
inst : NEW ’(’ var ’)’ ’;’
{int et=ne(); gc("\tR7=R7-8;\n\tI(R7+4)=%d;\tP(R7)=%d;\n\\tGT(-11);\nL %d:\tR7=R7+8;\n\tP(R6+%d)=R0;\n",bytes(tipo($3)),et,et,dir($3));}
;
acc : var ’ˆ’ {gc("\tR%d=P(R6+%d);\n",nvo(),dir($1));} ;
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.22 .
Expresiones complejas
double f() {...}struct {int *p, i;} v[3];...*v[(int)f(3+2)].p=2.1+v[2].i;
FIL(0x11fe8,24,0); // v...R7=R7-12; // parámsI(R7+8)=5; // 3+2I(R7+4)=R6; // enl. din.P(R7)=4; // dir. ret.GT(1); // invoca f()
L 4: R7=R7+12; // liberaR0=RR0; // (int)IF(R0<0) GT(-3); // cheq. lím. inf.IF(R0>=3) GT(-3); // cheq. lím. sup.R0=R0*8; // pos v[..]R0=R0+0x11fe8; // &v[..]==&v[..].pR0=P(R0); // v[..].pR1=I(0x11ffc); // v[2].iRR0=2.1+R1; // 2.1+v[2].iI(R0)=RR0; // = conv. forz.
Generacion de codigo v0.4 c©2006 Jose Fortes Galvez – p.23 .