 
 
 
 
 
 
 
 
 
 










 
 ) por operaciones de desplazamiento.
Repase el capítulo de expresiones regulares. Es posible que aquí quiera emplear
una sustitución en la que la cadena de reemplazo
sea evaluada sobre la marcha. Si es así, repase la sección
3.1.6. La siguiente sesión con el depurador
pretende ilustrar la idea:
) por operaciones de desplazamiento.
Repase el capítulo de expresiones regulares. Es posible que aquí quiera emplear
una sustitución en la que la cadena de reemplazo
sea evaluada sobre la marcha. Si es así, repase la sección
3.1.6. La siguiente sesión con el depurador
pretende ilustrar la idea:
$ perl -de 0 DB<1> $a = "MUL R2, 16" DB<2> $a =~ s/MUL R(\d), (\d+)/($2 == 16)?"SHL R$1, 4":$&/e DB<3> p $a SHL R2, 4 DB<5> $a = "MUL R2, 7" DB<6> $a =~ s/MUL R(\d), (\d+)/($2 == 16)?"SHL R$1, 4":$&/e DB<7> p $a MUL R2, 7 DB<8>
a = a * 2 * 3 no será plegada, ya que produce
un árbol de la forma 
 
Dado que el algoritmo no
puede plegar  tampoco plegará
 tampoco plegará  .  Busque en el código objeto
secuencias de multiplicaciones 
por constantes y abrévielas en una. Haga lo mismo para las restantes operaciones.
.  Busque en el código objeto
secuencias de multiplicaciones 
por constantes y abrévielas en una. Haga lo mismo para las restantes operaciones.
$ cat test14.tutu int a,b; a = 2; b = a*a+1El código producido por el traductor para la máquina de registros es:
1 LOADC R0, 2 2 STORE 0, R0 # a 3 LOADM R0, 0 # a 4 MULTM R0, 0 # a 5 PLUSC R0, 1 # 1 6 STORE 1, R0 # bSe ve que la instrucción de carga
LOADM R0, 0 de la 
línea 3 es innecesaria por cuanto
el contenido de la variable a ya está en el registro R0, 
ya que fué cargada en el registro en la línea 2.
Nótese que esta hipótesis no es necesariamente cierta
si la línea 3 fuera el objetivo de un salto desde 
otro punto del programa. Esta condición se cumple
cuando nos movemos dentro de un bloque básico: 
una secuencia de instrucciones que no contiene instrucciones
de salto ni es el objetivo de instrucciones de salto, con la excepción
de las instrucciones inicial y final.
Mejore el código generado 
intentando detectar patrones
de este tipo, eliminando la operación de carga correspondiente.
 
 
 
 
 
 
 
 
 
 










