// SIMDE v0.1 // Autor: Ivan Castilla Rodriguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posicion 50 (R2) de memori tienes un vector de // 16 elementos y quieres sumar a cada elemento una cantidad fija (en la posicion de memoria // 40). El resultado se coloca a partir de la posicion 70 (R3) de memoria. 11 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 LOOP: LF F1 (R2) ADDF F1 F1 F0 SF F1 (R3) ADDI R2 R2 #1 ADDI R3 R3 #1 BNE R2 R5 LOOP
// SIMDE v1.0 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes // un vector de de 16 elementos y quieres sumar a cada elemento una cantidad // fija (en la posición de memoria 40). El resultado se coloca a partir de la // posición 70 (R3) de memoria. // Este fichero es el mismo bucle de "bucle.pla" pero desenrollado para que en // cada iteración se hagan dos pasadas del bucle // 14 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 LOOP: LF F1 (R2) LF F2 1(R2) ADDF F1 F1 F0 ADDF F2 F2 F0 SF F1 (R3) SF F2 1(R3) ADDI R2 R2 #2 ADDI R3 R3 #2 BNE R2 R5 LOOP
// SIMDE v1.0 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes // un vector de de 16 elementos y quieres sumar a cada elemento una cantidad // fija (en la posición de memoria 40). El resultado se coloca a partir de la // posición 70 (R3) de memoria. // Este fichero es el mismo bucle de "bucle.pla" pero desenrollado para que en // cada iteración se hagan cuatro pasadas del bucle // 20 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 LOOP: LF F1 (R2) LF F2 1(R2) LF F3 2(R2) LF F4 3(R2) ADDF F1 F1 F0 ADDF F2 F2 F0 ADDF F3 F3 F0 ADDF F4 F4 F0 SF F1 (R3) SF F2 1(R3) SF F3 2(R3) SF F4 3(R3) ADDI R2 R2 #4 ADDI R3 R3 #4 BNE R2 R5 LOOP
// SIMDE v1.0 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes // un vector de de 16 elementos y quieres sumar a cada elemento una cantidad // fija (en la posición de memoria 40). El resultado se coloca a partir de la // posición 70 (R3) de memoria. // Este fichero es el mismo bucle de "bucle.pla" pero desenrollado para que en // cada iteración se hagan ocho pasadas del bucle // 32 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 LOOP: LF F1 (R2) LF F2 1(R2) LF F3 2(R2) LF F4 3(R2) LF F5 4(R2) LF F6 5(R2) LF F7 6(R2) LF F8 7(R2) ADDF F1 F1 F0 ADDF F2 F2 F0 ADDF F3 F3 F0 ADDF F4 F4 F0 ADDF F5 F5 F0 ADDF F6 F6 F0 ADDF F7 F7 F0 ADDF F8 F8 F0 SF F1 (R3) SF F2 1(R3) SF F3 2(R3) SF F4 3(R3) SF F5 4(R3) SF F6 5(R3) SF F7 6(R3) SF F8 7(R3) ADDI R2 R2 #8 ADDI R3 R3 #8 BNE R2 R5 LOOP
// SIMDE v0.1 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes un vector de // 5 elementos y quieres sumar a cada elemento una cantidad fija (en la posición de memoria // 40). El resultado se coloca a partir de la posición 70 (R3) de memoria. // Adem�s se ha a�adido un segundo bucle para poder testear el Multiway branching de la VLWW. // Este segundo bucle multiplica los elementos del vector por el mismo valor 18 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #5 LOOP: LF F1 (R2) ADDF F1 F1 F0 SF F1 (R3) ADDI R2 R2 #1 ADDI R3 R3 #1 BNE R2 R5 LOOP ADDI R3 R0 #70 ADDI R5 R3 #5 LOOP2: LF F1 (R3) MULTF F1 F1 F0 SF F1 (R3) ADDI R3 R3 #1 BNE R3 R5 LOOP2
// SIMDE v0.1 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE que crea la sucesión An = (An-1 * 2) + 3 durante // 5 iteraciones y con A0 = 1 // Comentarios: Este programa usa únicamente operaciones enteras y bucles sin hacer uso de // instrucciones de memoria ni de punto flotante 8 ADDI R1 R0 #1 ADDI R2 R0 #2 ADDI R3 R0 #0 ADDI R4 R0 #5 LOOP: MULT R5 R1 R2 ADDI R1 R5 #3 ADDI R3 R3 #1 BNE R3 R4 LOOP
// SIMDE v0.1 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes un vector de // 16 elementos y quieres sumar a cada elemento una cantidad fija (en la posición de memoria // 40). El resultado se coloca a partir de la posición 70 (R3) de memoria. // En este caso, al bucle se le ha aplicado una técnica de Software pipelining. 18 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 // Código de inicialización LF F1 (R2) ADDF F2 F1 F0 LF F1 1(R2) ADDI R2 R2 #2 LOOP: SF F2 (R3) ADDF F2 F1 F0 LF F1 (R2) ADDI R2 R2 #1 ADDI R3 R3 #1 BNE R2 R5 LOOP // Código de finalización SF F2 (R3) ADDF F2 F1 F0 SF F2 1(R3)
// SIMDE v0.1 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes un vector de // 16 elementos y quieres sumar a cada elemento una cantidad fija (en la posición de memoria // 40). El resultado se coloca a partir de la posición 70 (R3) de memoria. // En este caso, al bucle se le ha aplicado una técnica de Software pipelining., y después se // ha desenrollado para hacer dos iteraciones en cada pasada 27 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 // Código de inicialización LF F1 (R2) LF F3 1(R2) ADDF F2 F1 F0 ADDF F4 F3 F0 LF F1 2(R2) LF F3 3(R2) ADDI R2 R2 #4 LOOP: SF F2 (R3) SF F4 1(R3) ADDF F2 F1 F0 ADDF F4 F3 F0 LF F1 (R2) LF F3 1(R2) ADDI R2 R2 #2 ADDI R3 R3 #2 BNE R2 R5 LOOP // Código de finalización SF F2 (R3) SF F4 1(R3) ADDF F2 F1 F0 ADDF F4 F3 F0 SF F2 2(R3) SF F4 3(R3)
10 ADDI R1 R0 #3 ADDI R2 R0 #2 SLLV R3 R1 R2 SRLV R4 R1 R2 ADDI R5 R0 #11 ADDI R6 R0 #6 OR R7 R5 R6 AND R8 R5 R6 NOR R9 R5 R6 XOR R10 R5 R6
// SIMDE v1.0 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes // un vector de de 16 elementos y quieres sumar a cada elemento una cantidad // fija (en la posición de memoria 40). El resultado se coloca a partir de la // posición 70 (R3) de memoria. // Este fichero es el mismo bucle de "bucle.pla" pero desenrollado totalmente // (sin bucle) // 52 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) LF F1 (R2) LF F2 1(R2) LF F3 2(R2) LF F4 3(R2) LF F5 4(R2) LF F6 5(R2) LF F7 6(R2) LF F8 7(R2) LF F9 8(R2) LF F10 9(R2) LF F11 10(R2) LF F12 11(R2) LF F13 12(R2) LF F14 13(R2) LF F15 14(R2) LF F16 15(R2) ADDF F1 F1 F0 ADDF F2 F2 F0 ADDF F3 F3 F0 ADDF F4 F4 F0 ADDF F5 F5 F0 ADDF F6 F6 F0 ADDF F7 F7 F0 ADDF F8 F8 F0 ADDF F9 F9 F0 ADDF F10 F10 F0 ADDF F11 F11 F0 ADDF F12 F12 F0 ADDF F13 F13 F0 ADDF F14 F14 F0 ADDF F15 F15 F0 ADDF F16 F16 F0 SF F1 (R3) SF F2 1(R3) SF F3 2(R3) SF F4 3(R3) SF F5 4(R3) SF F6 5(R3) SF F7 6(R3) SF F8 7(R3) SF F9 8(R3) SF F10 9(R3) SF F11 10(R3) SF F12 11(R3) SF F13 12(R3) SF F14 13(R3) SF F15 14(R3) SF F16 15(R3)
7 ADDI R2 R0 #3 BGT R0 R2 ET1 ADDI R3 R0 #2 ET1: SUB R4 R3 R2 BGT R2 R3 ET2 SUB R5 R2 R3 ET2: SUB R6 R2 R3
// Simde v1.2 // Búsqueda en profundidad en un árbol. // Cada nodo se define a partir de una pos. de memoria A: // A[0] contiene el ID del nodo // A[1] contiene el nºmero de hijos N del nodo // A[2]-A[N+1] contienen las direcciones de memoria de los hijos // Puesto que no puede usarse recursividad se emplea una pila para almacenar los // valores. // La salida del programa es la lista de los ids de los nodos visitados. // // SIGNIFICADO DE LOS REGISTROS: // R1: Dirección del nodo padre del actual (-1 si el actual es la raíz) // R2: Dirección del nodo actual (la raíz está en 10) // R34: Dirección donde se coloca el resultado (400) // R33: Se usa como constante para almacenar un -1 // R31: Puntero a la pila (500) // R3: Se usa para almacenar el ID del nodo actual // R4: Se usa para almacenar el nº de hijos del nodo actual // 26 ADDI R33 R0 #-1 ADDI R34 R0 #400 ADDI R1 R0 #-1 ADDI R2 R0 #10 // Inicialización de la pila ADDI R31 R0 #500 // Bucle principal INI: LW R3 (R2) LW R4 1(R2) // Se guarda el nodo visitado SW R3 (R34) ADDI R34 R34 #1 BUC: // Si no tiene hijos es un nodo hoja y no hay que recorrer nada BEQ R4 R0 HOJA // Se almacenan los valores del padre y nº de hijos en la pila SW R1 (R31) SW R4 1(R31) ADDI R31 R31 #2 // Se sustituye el padre por el actual y se carga la dirección del hijo ADDI R1 R2 #0 ADD R5 R2 R4 LW R2 1(R5) // se vuelve al principio para visitar el hijo BEQ R0 R0 INI HOJA: // Si al llegar aquí se trata de la raíz es que hemos terminado de recorrer el árbol BEQ R1 R33 FIN // Se sustituye al nodo actual por el padre ADDI R2 R1 #0 // Se saca de la pila el valor del padre y el nº de hijos que quedan por visitar LW R1 -2(R31) LW R4 -1(R31) ADDI R31 R31 #-2 // Se decrementa en 1 el nºmero de hijos ADDI R4 R4 #-1 // Esta línea no es necesaria, simplemente vuelve a poner en R3 el ID del nodo LW R3 (R2) BEQ R0 R0 BUC FIN: // Operación nula: Es necesaria porque el simulador exige que todas las etiquetas // vayan asociadas a una operación. ADDI R0 R0 #0
// Simde v1.2 // Recorre y suma // Este ejemplo recorre una lista de elementos ordenados por prioridad y suma el valor que // contienen ponderándolo con la posición en la lista. Cada elemento E de la lista se // compone de: // E[0] contiene el valor del elemento // E[1] contiene 1 si el valor es ponderado o 0 si el valor no se pondera // E[2] contiene la dirección del siguiente elemento (-1 para fin de la lista) // // Registros empleados: // - R1 apunta al comienzo de la lista (posición 10 de memoria) // - R2 es el elemento actual // - R3 apunta al resultado (posición 9) // - F0 va a contener el contador de la lista (hay que inicializarlo a 0) // - F1 contiene un 1 en flotante para incrementar el valor de 0 // - F2 contiene el resultado parcial 19 ADDI R33 R0 #-1 ADDI R1 R0 #10 ADDI R2 R1 #0 ADDI R3 R0 #9 SW R0 (R3) LF F0 (R3) LF F2 (R3) // Inicializo a 1 F1. Para ello uso la posicion 1 de memoria como "puente" ADDI R10 R0 #1 SW R10 1(R0) LF F1 1(R0) LOOP: LF F4 (R2) LW R4 1(R2) BEQ R4 R0 NOOP MULTF F4 F0 F4 NOOP: ADDF F2 F2 F4 // Incremento el contador de la lista ADDF F0 F1 F0 LW R2 2(R2) BNE R2 R33 LOOP SF F2 (R3)
// SIMDE v1.0 // Autor: Iván Castilla Rodríguez // Utilidad: Programa de testeo de SIMDE // Comentarios: El programa presupone q en la posición 50 (R2) de memoria tienes // un vector de de 16 elementos y quieres sumar a cada elemento una cantidad // fija (en la posición de memoria 40). El resultado se coloca a partir de la // posición 70 (R3) de memoria. // Este fichero es el mismo bucle de "bucle.pla" pero desenrollado para que en // cada iteración se hagan dos pasadas del bucle // 14 ADDI R2 R0 #50 ADDI R3 R0 #70 ADDI R4 R0 #40 LF F0 (R4) ADDI R5 R2 #16 LOOP: LF F1 (R2) LF F2 1(R2) ADFF F1 F1 F0 ADDF F2 F2 F0 SF F1 (R3) SF F2 1(R3) ADDI R2 R2 2 ADDI R3 R3 #2 BNE R2 R5 LOOP

results matching ""

    No results matching ""