diff options
Diffstat (limited to 'input/easy-matrices.asm')
-rw-r--r-- | input/easy-matrices.asm | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/input/easy-matrices.asm b/input/easy-matrices.asm new file mode 100644 index 0000000..9cee909 --- /dev/null +++ b/input/easy-matrices.asm @@ -0,0 +1,83 @@ +;;;;;;;; +;;; performs a matrix multiply the matrices m1 and m2: +;;; 9 4 3 1 0 4 2 2 65 21 55 72 40 +;;; 1 4 2 8 3 1 9 4 49 18 18 50 22 +;;; 9 4 7 8 3 5 6 2 = 97 33 75 96 48 +;;; 6 6 6 102 36 60 102 48 +;;; the result of which is placed into r +;;; does not use designated vector instructions + +.data + m1 9 4 3 1 4 2 9 4 7 6 6 6 + m2 1 0 4 2 2 8 3 1 9 4 8 3 5 6 2 + n 3 ; # of columns of m1, rows of m2 + m 4 ; # of rows of m1 + p 5 ; # of columns of m2 + r 0 ; a matrix of size n,p + +.text + addi $5 $2 0x0 ; establish frame pointer + jmp MAIN + +MAIN: + push $5 ; function preamble + addi $5 $2 0x0 + subi $2 $2 0x0 + + addi $7 $0 0x0 ; tracks M + jrl MCOND + +MITER: + addi $8 $0 0x0 ; tracks P + jrl PCOND +PITER: + addi $9 $0 0x0 ; tracks N + addi $10 $0 0x0 ; tracks accumulated result + + load $6 n($0) ; index m1 + mul $11 $6 $7 + addi $11 $11 m1 + + addi $12 $8 m2 ; index m2 + + jrl NCOND +NITER: + add $13 $11 $9 ; increment m1 + + load $6 p($0) + mul $14 $9 $6 ; increment m2 + add $14 $14 $12 + + load $6 0($13) + load $15 0($14) + mul $6 $6 $15 + add $10 $10 $6 + + addi $9 $9 0x1 ; increment element being added +NCOND: + load $6 n($0) + cmp $6 $9 + bgt NITER + + load $6 p($0) ; store result + mul $6 $6 $7 + add $6 $6 $8 + store $10 r($6) + + addi $8 $8 0x1 ; increment columns in m2 +PCOND: + load $6 p($0) + cmp $6 $8 + bgt PITER + + addi $7 $7 0x1 ; increment rows in m1 +MCOND: + load $6 m($0) + cmp $6 $7 + bgt MITER + nop + nop + nop + nop + nop + nop |