Share code between rv32ui and rv64ui tests
[riscv-tests.git] / mt / az_matmul.c
1 #include "stdlib.h"
2
3 #include "util.h"
4
5 #include "dataset.h"
6 void __attribute__((noinline)) matmul(const int coreid, const int ncores, const int lda, const data_t A[], const data_t B[], data_t C[] )
7 {
8
9 if(coreid > 1) return;
10 static __thread int i, j, k;
11 static __thread data_t tempA0, tempA1, tempA2, tempA3, tempA4, tempA5, tempA6, tempA7;
12 static __thread data_t tempC0, tempC1, tempC2, tempC3, tempC4, tempC5, tempC6, tempC7; //tempC8, tempC9, tempC10, tempC11, tempC12, tempC13, tempC14, tempC15;
13
14 static __thread int start, end, jStride, jToRow, jToCol, iToRow;
15
16 start = coreid << 9;
17 end = ((ncores == 1) ? 2 : (coreid+1)) << 9;
18 jStride = 8;
19
20 for (j=start; j < end; j+=jStride) {
21 jToRow = (j>>5)<<5;
22 jToCol = j%32;
23 tempC0 = 0;
24 tempC1 = 0;
25 tempC2 = 0;
26 tempC3 = 0;
27 tempC4 = 0;
28 tempC5 = 0;
29 tempC6 = 0;
30 tempC7 = 0;
31 //tempC8 = 0;
32 //tempC9 = 0;
33 //tempC10 = 0;
34 //tempC11 = 0;
35 //tempC12 = 0;
36 //tempC13 = 0;
37 //tempC14 = 0;
38 //tempC15 = 0;
39
40 for ( i=0; i < lda; i+=2 ) {
41 iToRow = i << 5;
42
43 tempA0 = A[i + jToRow];
44 tempA1 = A[i+1 + jToRow];
45 //tempA2 = A[i+2 + jToRow];
46 //tempA3 = A[i+3 + jToRow];
47 //tempA4 = A[i+4 + jToRow];
48 //tempA5 = A[i+5 + jToRow];
49 //tempA6 = A[i+6 + jToRow];
50 //tempA7 = A[i+7 + jToRow];
51
52 tempC0 += tempA0 * B[(jToCol ) + (iToRow)];
53 tempC1 += tempA0 * B[(jToCol+1 ) + (iToRow)];
54 tempC2 += tempA0 * B[(jToCol+2 ) + (iToRow)];
55 tempC3 += tempA0 * B[(jToCol+3 ) + (iToRow)];
56 tempC4 += tempA0 * B[(jToCol+4 ) + (iToRow)];
57 tempC5 += tempA0 * B[(jToCol+5 ) + (iToRow)];
58 tempC6 += tempA0 * B[(jToCol+6 ) + (iToRow)];
59 tempC7 += tempA0 * B[(jToCol+7 ) + (iToRow)];
60 //tempC8 += tempA0 * B[(jToCol+8 ) + (iToRow)];
61 //tempC9 += tempA0 * B[(jToCol+9 ) + (iToRow)];
62 //tempC10 += tempA0 * B[(jToCol+10) + (iToRow)];
63 //tempC11 += tempA0 * B[(jToCol+11) + (iToRow)];
64 //tempC12 += tempA0 * B[(jToCol+12) + (iToRow)];
65 //tempC13 += tempA0 * B[(jToCol+13) + (iToRow)];
66 //tempC14 += tempA0 * B[(jToCol+14) + (iToRow)];
67 //tempC15 += tempA0 * B[(jToCol+15) + (iToRow)];
68
69 iToRow += 32;
70 tempC0 += tempA1 * B[(jToCol ) + (iToRow)];
71 tempC1 += tempA1 * B[(jToCol+1 ) + (iToRow)];
72 tempC2 += tempA1 * B[(jToCol+2 ) + (iToRow)];
73 tempC3 += tempA1 * B[(jToCol+3 ) + (iToRow)];
74 tempC4 += tempA1 * B[(jToCol+4 ) + (iToRow)];
75 tempC5 += tempA1 * B[(jToCol+5 ) + (iToRow)];
76 tempC6 += tempA1 * B[(jToCol+6 ) + (iToRow)];
77 tempC7 += tempA1 * B[(jToCol+7 ) + (iToRow)];
78 //tempC8 += tempA1 * B[(jToCol+8 ) + (iToRow+32)];
79 //tempC9 += tempA1 * B[(jToCol+9 ) + (iToRow+32)];
80 //tempC10 += tempA1 * B[(jToCol+10) + (iToRow+32)];
81 //tempC11 += tempA1 * B[(jToCol+11) + (iToRow+32)];
82 //tempC12 += tempA1 * B[(jToCol+12) + (iToRow+32)];
83 //tempC13 += tempA1 * B[(jToCol+13) + (iToRow+32)];
84 //tempC14 += tempA1 * B[(jToCol+14) + (iToRow+32)];
85 //tempC15 += tempA1 * B[(jToCol+15) + (iToRow+32)];
86
87 //iToRow += 32;
88 //tempC0 += tempA2 * B[(jToCol ) + (iToRow)];
89 //tempC1 += tempA2 * B[(jToCol+1 ) + (iToRow)];
90 //tempC2 += tempA2 * B[(jToCol+2 ) + (iToRow)];
91 //tempC3 += tempA2 * B[(jToCol+3 ) + (iToRow)];
92 //tempC4 += tempA2 * B[(jToCol+4 ) + (iToRow)];
93 //tempC5 += tempA2 * B[(jToCol+5 ) + (iToRow)];
94 //tempC6 += tempA2 * B[(jToCol+6 ) + (iToRow)];
95 //tempC7 += tempA2 * B[(jToCol+7 ) + (iToRow)];
96 //tempC8 += tempA2 * B[(jToCol+8 ) + (iToRow)];
97 //tempC9 += tempA2 * B[(jToCol+9 ) + (iToRow)];
98 //tempC10 += tempA2 * B[(jToCol+10) + (iToRow)];
99 //tempC11 += tempA2 * B[(jToCol+11) + (iToRow)];
100 //tempC12 += tempA2 * B[(jToCol+12) + (iToRow)];
101 //tempC13 += tempA2 * B[(jToCol+13) + (iToRow)];
102 //tempC14 += tempA2 * B[(jToCol+14) + (iToRow)];
103 //tempC15 += tempA2 * B[(jToCol+15) + (iToRow)];
104
105 //iToRow += 32;
106 //tempC0 += tempA3 * B[(jToCol ) + (iToRow)];
107 //tempC1 += tempA3 * B[(jToCol+1 ) + (iToRow)];
108 //tempC2 += tempA3 * B[(jToCol+2 ) + (iToRow)];
109 //tempC3 += tempA3 * B[(jToCol+3 ) + (iToRow)];
110 //tempC4 += tempA3 * B[(jToCol+4 ) + (iToRow)];
111 //tempC5 += tempA3 * B[(jToCol+5 ) + (iToRow)];
112 //tempC6 += tempA3 * B[(jToCol+6 ) + (iToRow)];
113 //tempC7 += tempA3 * B[(jToCol+7 ) + (iToRow)];
114 //tempC8 += tempA3 * B[(jToCol+8 ) + (iToRow)];
115 //tempC9 += tempA3 * B[(jToCol+9 ) + (iToRow)];
116 //tempC10 += tempA3 * B[(jToCol+10) + (iToRow)];
117 //tempC11 += tempA3 * B[(jToCol+11) + (iToRow)];
118 //tempC12 += tempA3 * B[(jToCol+12) + (iToRow)];
119 //tempC13 += tempA3 * B[(jToCol+13) + (iToRow)];
120 //tempC14 += tempA3 * B[(jToCol+14) + (iToRow)];
121 //tempC15 += tempA3 * B[(jToCol+15) + (iToRow)];
122
123 //iToRow += 32;
124 //tempC0 += tempA4 * B[(jToCol ) + (iToRow)];
125 //tempC1 += tempA4 * B[(jToCol+1 ) + (iToRow)];
126 //tempC2 += tempA4 * B[(jToCol+2 ) + (iToRow)];
127 //tempC3 += tempA4 * B[(jToCol+3 ) + (iToRow)];
128 //tempC4 += tempA4 * B[(jToCol+4 ) + (iToRow)];
129 //tempC5 += tempA4 * B[(jToCol+5 ) + (iToRow)];
130 //tempC6 += tempA4 * B[(jToCol+6 ) + (iToRow)];
131 //tempC7 += tempA4 * B[(jToCol+7 ) + (iToRow)];
132 //
133 //iToRow += 32;
134 //tempC0 += tempA5 * B[(jToCol ) + (iToRow)];
135 //tempC1 += tempA5 * B[(jToCol+1 ) + (iToRow)];
136 //tempC2 += tempA5 * B[(jToCol+2 ) + (iToRow)];
137 //tempC3 += tempA5 * B[(jToCol+3 ) + (iToRow)];
138 //tempC4 += tempA5 * B[(jToCol+4 ) + (iToRow)];
139 //tempC5 += tempA5 * B[(jToCol+5 ) + (iToRow)];
140 //tempC6 += tempA5 * B[(jToCol+6 ) + (iToRow)];
141 //tempC7 += tempA5 * B[(jToCol+7 ) + (iToRow)];
142 //
143 //iToRow += 32;
144 //tempC0 += tempA6 * B[(jToCol ) + (iToRow)];
145 //tempC1 += tempA6 * B[(jToCol+1 ) + (iToRow)];
146 //tempC2 += tempA6 * B[(jToCol+2 ) + (iToRow)];
147 //tempC3 += tempA6 * B[(jToCol+3 ) + (iToRow)];
148 //tempC4 += tempA6 * B[(jToCol+4 ) + (iToRow)];
149 //tempC5 += tempA6 * B[(jToCol+5 ) + (iToRow)];
150 //tempC6 += tempA6 * B[(jToCol+6 ) + (iToRow)];
151 //tempC7 += tempA6 * B[(jToCol+7 ) + (iToRow)];
152 //
153 //iToRow += 32;
154 //tempC0 += tempA7 * B[(jToCol ) + (iToRow)];
155 //tempC1 += tempA7 * B[(jToCol+1 ) + (iToRow)];
156 //tempC2 += tempA7 * B[(jToCol+2 ) + (iToRow)];
157 //tempC3 += tempA7 * B[(jToCol+3 ) + (iToRow)];
158 //tempC4 += tempA7 * B[(jToCol+4 ) + (iToRow)];
159 //tempC5 += tempA7 * B[(jToCol+5 ) + (iToRow)];
160 //tempC6 += tempA7 * B[(jToCol+6 ) + (iToRow)];
161 //tempC7 += tempA7 * B[(jToCol+7 ) + (iToRow)];
162
163 }
164 C[j ] = tempC0;
165 C[j + 1 ] = tempC1;
166 C[j + 2 ] = tempC2;
167 C[j + 3 ] = tempC3;
168 C[j + 4 ] = tempC4;
169 C[j + 5 ] = tempC5;
170 C[j + 6 ] = tempC6;
171 C[j + 7 ] = tempC7;
172 //C[j + 8 ] = tempC8 ;
173 //C[j + 9 ] = tempC9 ;
174 //C[j + 10] = tempC10;
175 //C[j + 11] = tempC11;
176 //C[j + 12] = tempC12;
177 //C[j + 13] = tempC13;
178 //C[j + 14] = tempC14;
179 //C[j + 15] = tempC15;
180 }
181 }