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 | |
parent | 8af0269e0897a8700ac6953257671e6ed002d334 (diff) |
Add two new tests for vector (strides + matrix)
-rw-r--r-- | input/matrix-vector.asm | 98 | ||||
-rw-r--r-- | input/stride.asm | 35 |
2 files changed, 133 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 diff --git a/input/stride.asm b/input/stride.asm new file mode 100644 index 0000000..5a99a3d --- /dev/null +++ b/input/stride.asm @@ -0,0 +1,35 @@ +;;;;;;;; +;;; tests the stride load/store operations + +.data + s 8 + j 0 2 4 6 8 10 -6 -3 ; tricky stride + d 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 + r 0 +.text + addi $5 $0 d ; obtain pointer to data/result + addi $6 $0 r + addi $7 $0 j + load $4 s($0) ; set vector length + addv $17 $16 $16 + +;;; TMP TESTING ;;; + addi $4 $0 0x0 + addv $17 $16 $16 ; clear vector +;;; END ;;; + + addv $18 $17 $16 + + srdl $19 $7 $16 ; load fun stride + rotv $19 $19 $5 ; mix it up + srds $19 $6 $17 + + srdl $20 $5 $17 + srds $20 $6 $16 + + srdl $20 $5 $19 + srds $20 $6 $16 + + nop + nop + nop |