summaryrefslogtreecommitdiff
path: root/input
diff options
context:
space:
mode:
Diffstat (limited to 'input')
-rw-r--r--input/matrix-vector.asm98
-rw-r--r--input/stride.asm35
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