diff options
author | bd <bdunahu@operationnull.com> | 2025-05-11 22:03:02 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-11 22:03:02 -0400 |
commit | 0f098df58940efa75f4dffd8291a0922bd34eac2 (patch) | |
tree | b98efce9a331f7f974d29f14860b0b0742de8554 /input/matrix-vector.asm | |
parent | 8af0269e0897a8700ac6953257671e6ed002d334 (diff) |
Add two new tests for vector (strides + matrix)
Diffstat (limited to 'input/matrix-vector.asm')
-rw-r--r-- | input/matrix-vector.asm | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/input/matrix-vector.asm b/input/matrix-vector.asm new file mode 100644 index 0000000..7b91a6a --- /dev/null +++ b/input/matrix-vector.asm @@ -0,0 +1,98 @@ +;;;;;;;; +;;; 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 + +;;; +;;; setup vector stuff, rotate num, column stride + load $4 n($0) + addi $14 $4 0x0 + load $6 p($0) + load $7 m($0) + addi $15 $0 0x1 + addi $8 $0 0x0 + jrl STRCOND +STR: + addv $17 $17 $16 ; set column stride + addi $8 $8 0x1 +STRCOND: + cmp $6 $8 + bgt STR +;;; end vector setup +;;; + + addi $8 $0 0x0 ; tracks M + jrl MCOND + +MITER: + load $4 n($0) ; set vector length to n + addi $9 $0 0x0 ; tracks P + jrl PCOND +PITER: + mul $10 $4 $8 ; index m1 + addi $10 $10 m1 + + addi $11 $9 m2 ; index m2 + + srdl $18 $10 $16 ; load row + srdl $19 $11 $17 ; load column + + mulv $18 $18 $19 ; mul elements + + addi $13 $0 0x1 ; tracks iterations + jrl ROTCOND +ROT: + rotv $18 $18 $15 + addi $13 $13 0x1 +ROTCOND: + addi $4 $0 0x1 + addv $20 $20 $18 + addi $4 $14 0x0 + cmp $4 $13 + bgt ROT + + mul $13 $6 $8 ; store the result + add $13 $13 $9 + addi $13 $13 r + srds $20 $13 $16 + + addi $4 $0 0x0 ; clear the accumulator + addv $20 $20 $20 + addi $4 $14 0x0 + + addi $9 $9 0x1 ; increment columns in m2 +PCOND: + cmp $6 $9 + bgt PITER + + addi $8 $8 0x1 ; increment rows in m1 +MCOND: + cmp $7 $8 + bgt MITER + nop + nop + nop + nop + nop + nop |