operaciones (tres campos o slots en cada instrucción VLIW), todas las operaciones pueden predicarse. Para establecer los valores de los predicados se utilizan instrucciones de comparación (cmp) con el formato (p) p1[, p2] cmp.cnd x,y donde cnd es la condición que se comprueba entre x e y (lt, ge, eq, ne, …). Si la condición es verdadera p1=1 [y p2=0], y si es falsa, p1=0 [y p2=1]. La operación sólo se ejecuta si el predicado p=1 (habrá sido establecido por otra instrucción de comparación). Indique cómo se escribiría la sentencia:
for i=1 to 2 do if ((X[i]>Y[i]) and (Y[i] ≥0))
then X[i]=-X[i] else if (Y[i]<0) then X[i]=Y[i]
sin ninguna operación de salto y con el
mínimo número de instrucciones VLIW, teniendo en cuenta que las instrucciones de comparación sólo pueden aparecer en el primer campo o slot de la instrucción VLIW(el resto de las instrucciones pueden aparecer en cualquier campo). Considere que dispone del número de unidades funcionales que necesite en cada momento. Solución:
La secuencia de instrucciones debe quedar sin
ningún salto, por lo tanto debemos desenrollar el bucle y predicar las instrucciones que contiene en su interior. A continuación se muestran el organigrama del programa una vez que se ha desenrollado el bucle y se han predicado las instrucciones y su respectivo código en ensamblador. Tras desenrollar e introducir las operaciones con predicados, podemos reorganizar el código respetando las dependencias de datos para construir las instrucciones VLIW: